Android(java)学习笔记262:JNI之工具快速开发步骤

时间:2022-08-13 16:02:13

下面通过一个案例说明一下,利用工具jni快速开发步骤

1.新建一个Android工程,命名为"03_对int数组加1",如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

2. 在MainActivity.java中对addIntArray方法进行声明,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

3. 生成com_himi_addarray_MainActivity.h头文件,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

com_himi_addarray_MainActivity.h如下已经成功生成:

Android(java)学习笔记262:JNI之工具快速开发步骤

4. 利用快速工具,如下:

(1)选中"03_对int数组加1"工程,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

点击Android Tools ----> Add Native Support,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

点击Eclipse中的  窗口--->首选项,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

(2)接下来我们再次如下界面:

Android(java)学习笔记262:JNI之工具快速开发步骤

这个时候我们看看工程,发现:

Android(java)学习笔记262:JNI之工具快速开发步骤

同时打开Android.mk,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

上面默认生成的.cpp(C++)代码,直接把扩展名.cpp改成.c(addarray.cpp修改扩展名,同时Android.mk中也要修改),如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

(3)打开addarray.c,我们会发现头文件jni.h没有关联好,显示下划线,怎么办?

选中"03_对int数组加1"工程,右击"属性",然后是"C/C++ General " --->"Paths and Symbols",如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

之后jni.h头文件的下划线警告就会消失了。

(4)打开addarray.c文件,开始编写其中的代码:

jni函数声明在头文件Java_com_himi_addarray_MainActivity.h中,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

将上面的jni函数声明复制到addarray.c文件中(去掉JNIEXPORT 和 JNICALL,同时括号里添加形参),如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

(5)回到这个MainActivity,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

同时让程序可以在多个平台运行,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

(6)布署程序到模拟器上运行,如下:

Android(java)学习笔记262:JNI之工具快速开发步骤

2. 工具开发jni(详细步骤)

(1)创建工程

(2)创建native方法

(3)配置ndk路径

  windows-->preference-->android-->ndk 找到ndk目录 ,确定

(4)右键工程-->android tools -->add native support  输入动态库的文件名称,确定

(5)把生成的.cpp文件改成.c,并且在Android.mk中也要.cpp改成.c

(6)右键工程-->properties-->c/c++ general -->paths and sysmbols -->includes -->点击add按钮-->点击file system-->找到一个任何一个平台的include目录

如: I:\android-ndk-r9\platforms\android-9\arch-arm\usr\include

(7)c工程师实现功能,在jni方法中调用

(8)在源代码中加动态库:

static {

    System.loadLibrary(".so文件名");

(9)调用native方法

(10)运行。

3. 总而言之,JNI开发流程可以概括为下面的步骤:

(1)在java中声明native方法
(2)编译java源文件得到class文件,然后通过javah命令导出JNI头文件
(3)实现jni方法(java中native声明的方法),使用C、C++实现
(4)编译成so库并在java中调用