NDK开发实例
-
刚接触android studio,正好手头有个移植任务,把以前的eclipse的工程移植到androidstudio开发环境。
移植过程中,发现要用到NDK(android native develop kits)。
NKD可以把c/c++ ->编译成一个linux下可以执行的二进制文件, java代码里面就可以通过jni调用执行二进制的文件.
什么是JNI :java本地开发接口,JNI是一个协议这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。
JNI开发用途:驱动开发 (wifi-hotspot) 2.3无线热点共享 ,Native code效率高,数学运算,实时渲染的游戏上,音视频处理(极品飞车,opengl,ffmpeg),复用代码(文件压缩,人脸识别…)等。
-
开发环境介绍:
Android studio 1.5
-
建立一个空的工程NDKTest
-
声明一个native函数:
public native StringgetStringFromNative();
然后在工具栏选择make->build,在目录C:\Users\leo.liu\AndroidStudioProjects\NDKTest\app\build\intermediates\classes\debug\com\example\leoliu\ndktest下,会生成MainActivity.class文件。
-
根据生成的MainActivity.class文件,使用javah命令生成需要的.h头文件。具体命令如下:
javah -d jni -classpathC:/Users/leo.liu/AppData/Local/Android/sdk/platforms/android-23/android.jar;C:/Users/leo.liu/AppData/Local/Android/sdk/extras/android/m2repository/com/android/support/appcompat-v7/23.1.1/appcompat-v7-23.1.1-sources.jar;C
:/Users/leo.liu/AndroidStudioProjects/NDKTest/app/build/intermediates/classes/debugcom.example.leoliu.ndktest.MainActivity
注意:文件路径标识符是‘/’,该标识符符合linux的书写规范
该命令运行完之后,在目录C:\Users\leo.liu\AndroidStudioProjects\NDKTest\app\src\main下,生成新的目录jni。新的头文件com_example_leoliu_ndktest_MainActivity.h存放在jni目录下面。
-
由于工程下面没有自动生成jni目录和头文件com_example_leoliu_ndktest_MainActivity.h,可以手动添加目录jni,然后将生成的头文件拷贝到jni目录下。
-
修改3个文件
在build.gradle中,增加:
Gradle.properties增加:
Local.properties增加:
注: nkd r10是从网上下载的,然后解压到与sdk相同的目录。
-
修改MainActivity
-
编译运行程序
发现编译错误。原来还要在jni目录下,添加意义空的c文件。
现在工程就可以运行了。