第一次接触NDK开发,嘿嘿,刚写了个Demo测试成功,记录下环境的搭建过程和遇到的问题。
1、首先去下载一个NDK开发包,我使用的是android-ndk-r7,直接解压就OK了,D:\android-ndk-r7
记得设置环境变量 path = D:\android-ndk-r7;
2、安装CygWin,用来在Windows下模拟linux环境,编译我们写的的JNI代码。
3、CygWin安装成功之后,进入到安装的根目录,找到这个文件 -> /home/(你的用户)/.bash_profile,在文件的最后里面加入
NDK=/cygdrive/D/android-ndk-r7
设置NDK的路径,在CygWin里面测试设置是否成功 cd $NDK,进入NDK的目录则说明设置OK。
4、有时候NDK使用的awk.exe会过期,造成编译源码的时候失败,可以直接进入D:\android-ndk-r7\prebuilt\windows\bin目录,删除掉awk.exe即可。
接下来就可以开始写一个测试Demo了
C语言写的 native 函数的实现源码必须放到一个名字为jni文件夹内进行编译,这是必须的,不然会编译出错。
first-jni.c
#include<jni.h>
#include<string.h>
jstring
Java_com_iqiwh_car_MainActivity_firstJni(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env, "This is my first jni test!");
}
对应的JNI函数命名规则:
Java_ + 包名(com.lucyfyr) + 类名(MainActivity) + 接口名(firstJni):必须要按此JNI规范来操作
在CygWin里面进入到JNI目录,使用$NDK/ndk-build,来编译源码,编译成功会产生对应的.so文件,拷贝到Android项目工程libs目录里面。
然后在Activity里面加入代码,用来加载库文件
static {
System.loadLibrary("first-jni");
}
然后定义对应的native 函数
public native String firstJni();
在适当的位置直接调用就行了,函数会返回一个Java的String字符串。
一个简单的Demo。