JNI简单入门
1.在目前版本的AndroidStudio(3.2)上默认使用CMake来编译C/C++代码,向cpp文件夹添加新的C/C++代码时,会发现在IDE里并没有显示新添加的文件,这个时候只需要在CMakeList.txt里面添加下面的代码,然后点击Refresh Linked C++ Projects即可
2.在Java代码中添加System.loadLibrary加载so库,然后声明一个native方法,以便在后面的C/C++代码中实现它
3.在C/C++文件中实现Java中声明的方法,注意名字一定要和java中一致
4.下面是JNI中的数据类型与JAVA,C/C++中的对应关系
映射 类型 |
Java类型 |
JNI本地类型 |
C类型 |
||||
type/bits |
type/bits/signatures |
type/bits |
|||||
基本 类型 |
boolean |
8 |
jboolean |
u8 |
Z |
- |
|
byte |
8 |
jbyte |
8 |
B |
- |
|
|
char |
16 |
jchar |
u16 |
C |
char |
8 |
|
short |
16 |
jshort |
16 |
S |
short |
16 |
|
int |
32 |
jint |
32 |
I |
int |
32 |
|
long |
64 |
jlong |
64 |
J |
long |
32 |
|
float |
32 |
jfloat |
32 |
F |
float |
32 |
|
double |
64 |
jdouble |
64 |
D |
double |
64 |
|
|
void |
- |
Void |
N/A |
V |
void |
- |
引用 类型 |
Object |
- |
jobject |
- |
- |
- |
- |
Class |
- |
jclass |
- |
L fully-qualified-class; |
- |
- |
|
String |
- |
jstring |
- |
Ljava/lang/String; |
- |
- |
|
arrays |
- |
jarray |
- |
- |
- |
- |
|
object arrays |
- |
jobjectArray |
- |
[L fully-qualified-class; |
- |
- |
|
boolean arrays |
- |
jbooleanArray |
- |
[Z |
- |
- |
|
byte arrays |
- |
jbyteArray |
- |
[B |
- |
- |
|
char arrays |
- |
jcharArray |
- |
[C |
- |
- |
|
short arrays |
- |
jshortArray |
- |
[S |
- |
- |
|
int arrays |
- |
jintArray |
- |
[I |
- |
- |
|
long arrays |
- |
jlongArray |
- |
[J |
- |
- |
|
float arrays |
- |
jfloatArray |
- |
[F |
- |
- |
|
double arrays |
- |
jdoubleArray |
- |
[D |
- |
- |
|
Throwable |
- |
jthrowable |
- |
Ljava/lang/Throwable; |
- |
- |