前言
最近两三年智能硬件高速发展(为什么我感觉飞速更合适),从智能手环到智能家居,从VR再到无人机,智能硬件越来越渗入人们的生活,而所有这些操作系统大多都是Android 和 c/c++来完成的,Android负责展示界面直接与用户进行交互,c/c++负责底层运行,那么问题来了,Android和C/C++是怎么沟通的呢?Android怎么将用户的操作传递给C/C++去执行呢?没错,这个沟通的桥梁就是JNI。JNI即Java Native Interface,Java本地接口,Android通过JNI去调用C/C++(不仅仅只能调用这两种)的代码,完成Java不能完成的任务,同时也加快系统运行速度。在这个“金三银四”的跳槽季,你若不会JNI开发,好意思张口要加薪么?废话不再多说,直接上正文。
Android Studio下的JNI开发
为什么要强调AS,而不是eclipse?因为是谷歌的亲儿子啊。。。
上步骤:
12个步骤,略多,因为比较详细,但是你自己写一下就能感受到,是不是很简单?!1.首先JDK、NDK必备2.新建一个class为NdkJni,在内部声明native方法3.主代码调用4.build->make project,编译之后会生成一个.class文件,文件目录为app\build\intermediates\classes\debug(要在左侧视图窗口中切换为project才能看的到)5.把.class文件生成为.h的头文件(javah -jni 路径\JNI所属类名),.h文件存放在当前目录6.在main目录下新建一个jni目录,将刚才的.h文件剪切过来7.jni目录下新建一个c文件,取名xx.c,8.编写c代码,这里略。。。接下来准备调用了(这些步骤也可以放在最前边)9.添加自己的ndk路径(配置NDK路径),可以在structure中添加,也可以在local.properties中添加,(仿照sdk的,ndk.dir=C\:\\AndroidStdioSDK\\android-ndk-r10d-64bit)10.app下的build.gradle中添加如下代码defaultConfig {......ndk{moduleName "YourJniLibName"//.so库名字ldLibs "log", "z", "m" //logabiFilters "armeabi", "armeabi-v7a", "x86" //abi三种体系so库}},同步或者build11.在NdkJni或者MainActivity中添加如下代码块以初始化static {System.loadLibrary("YourJniLibName"); //.so库名字}12.完成