你好,我正在使用jni构建一个android应用程序,我正在尝试将base64字符串传递给c++,然后返回base64字符串。我使用javax.crypto.cipher库对base64字符串进行加密,并将该字符串发送到c++,然后将该字符串与c++一起使用。但是由于某种原因,当我把这个字符串传递给jni时,它没有显示出来。下面是我的代码片段。。
enter code here
//MyJobService.java
public class MyJobService extends JobService
{
NativeLibrary ni = new NativeLibrary();
public void httpRequest()
{
AES128 encrypted = AES128.encrypt("MyKey", String.valueOf("My input string"));
ni.request(encrypted.toString())
}
}
//NativeLibrary.java
public class NativeLibrary extends AsyncTask<String, Void, String>
{
static {
System.loadLibrary("native-lib");
}
public native String request(String encryptStr);
}
//native-lib.cpp
extern "C" JNIEXPORT jstring JNICALL Java_com_example_mobileapp_NativeLibrary_request(JNIEnv *env,jobject
instance, jstring encStr)
{
__android_log_write(ANDROID_LOG_DEBUG, "ENC_STRING", (char *) encStr);
// .. do something
return (char *) encStr;
}
1条答案
按热度按时间x6yk4ghg1#
jnienvinterface公开了一组函数表来检索从java前端传递的参数。https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
在您的例子中,需要使用getstringutfchars()从java读取jstring-