2010-07-23 39 views
1

我想从C/C++代码生成JNI包装。SWIG生成的Android上的JNI代码问题

这是我的接口文件。

/* aes_security.i */ 
%module jni_security_example 
%{ 
    #include "pbkdf2.h" 
%} 

extern int pbkdf2_sha1 (const char *passphrase, size_t passphraseLength, 
     const char *SSID, size_t SSIDlen, 
     unsigned int iterationCount, 
     char *aeskey, size_t keyLength); 

extern int GenrateIV_16_Bytes(unsigned char *IV); 

以下是SWIG生成的Java代码片断

public static int pbkdf2_sha1(String passphrase, long passphraseLength, 
String SSID, long SSIDlen, long encryptGrade, String key, 
long keyLength) { 
    return cot_jni_security_exampleJNI.pbkdf2_sha1(passphrase, 
    passphraseLength, SSID, SSIDlen, encryptGrade, key, keyLength); 
} 

public static int GenrateIV_16_Bytes(SWIGTYPE_p_unsigned_char IV) { 
    return cot_jni_security_exampleJNI 
    .GenrateIV_16_Bytes(SWIGTYPE_p_unsigned_char.getCPtr(IV)); 
} 

这里是我如何调用JNI代码。

private String PASSPHRASE = "password"; 
private String SSID = "dummyssid"; 
private long iterationCount = 4096; 

public String pbkdf2SHA1() { 

    int keyLength = 32; 
    char[] aesKey = new char[keyLength]; 
    int result = pbkdf2_sha1(PASSPHRASE, (long) PASSPHRASE.length(), SSID, 
    SSID.length(), iterationCount, aesKey.toString(), 
    (long) keyLength); 
    Log.e(TAG, "Result " + result); 

    return new String(aesKey); 

} 

该代码编译,但是当我运行它崩溃在C代码的某处。任何帮助将不胜感激。

谢谢。

回答

0

我不知道Java或JNI。但是,您的C代码可能存在一些问题。尝试从C接口调用pbkdf2_sha1()。如果它在C代码中崩溃了它的一个问题。否则找出崩溃点。在需要参数的情况下投射时可能会出现问题