JNI 将 java base64 字符串传递给 C++ 并将 return base64 字符串传递给 java
JNI pass java base64 string to C++ and return base64 string to java
你好,我正在使用 JNI 构建一个 android 应用程序,我试图将一个 base64 字符串传递给 C++,然后 return 一个 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;
}
JNIENVInterface 公开了一组函数 table 来检索从 JAVA 前面传递的参数。
https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
在您的情况下,您需要使用 GetStringUTFChars() 从 Java -
中读取 jstring
//native-lib.cpp
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_mobileapp_NativeLibrary_request(JNIEnv *env,jobject
instance, jstring encStr)
{
char *utfString = (char *) (env)->GetStringUTFChars(encStr, NULL);
__android_log_print(ANDROID_LOG_DEBUG, "ENC_STRING = %s", utfString);
// .. do something
return env->NewStringUTF(utfString);//modified string returned
}
你好,我正在使用 JNI 构建一个 android 应用程序,我试图将一个 base64 字符串传递给 C++,然后 return 一个 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;
}
JNIENVInterface 公开了一组函数 table 来检索从 JAVA 前面传递的参数。 https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
在您的情况下,您需要使用 GetStringUTFChars() 从 Java -
中读取 jstring//native-lib.cpp
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_mobileapp_NativeLibrary_request(JNIEnv *env,jobject
instance, jstring encStr)
{
char *utfString = (char *) (env)->GetStringUTFChars(encStr, NULL);
__android_log_print(ANDROID_LOG_DEBUG, "ENC_STRING = %s", utfString);
// .. do something
return env->NewStringUTF(utfString);//modified string returned
}