1、原理
jni实现java和c互通,jni定义了一些数据类型,进行java与C参数传递。
数据类型对应关系如下表:
Java 类型 | 本地 C 类型 |
实际表示的 C 类型
(Win32)
| 说明 |
---|---|---|---|
boolean | jboolean | unsigned char | 无符号,8 位 |
byte | jbyte | signed char | 有符号,8 位 |
char | jchar | unsigned short | 无符号,16 位 |
short | jshort | short | 有符号,16 位 |
int | jint | long | 有符号,32 位 |
long | jlong | __int64 | 有符号,64 位 |
float | jfloat | float | 32 位 |
double | jdouble | double | 64 位 |
void | void | N/A | N/A |
2、如何将java传入的String参数转换为c的char*?
java传入的String参数,在c文件中被jni转换为jstring的
数据类型。
首先在c函数中加入函数参数jstring Java_com_example_as_MainActivity_stringFromJNI(JNIEnv* env,
jobject thiz,jstring fff) ,对应java中函数也改为 public native String stringFromJNI(String s); 。
jobject thiz,jstring fff) ,对应java中函数也改为 public native String stringFromJNI(String s); 。
在c文件中声明char* test,然后test = (char*)(*env)->GetStringUTFChars(env, jstring, NULL);
3、如何把char*转化为java的String
使用
NewStringUTF可以把char* 转化为jstring
char a[10]={0};
a[0]='c';
a[1]='s';
a[2]='\0';
return (*env)->NewStringUTF(env,a);
a[0]='c';
a[1]='s';
a[2]='\0';
return (*env)->NewStringUTF(env,a);
参考文献: