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;  | 
 -  | 
 -  | 
|
                    
                
                
            
        
浙公网安备 33010602011771号