NDK开发环境搭建—-AndroidStudio
本片文章用于讲解windows下android studio 的NDK环境搭建以及Demo展示:
Android Studio搭建
开发软件:
1 NDK下载:https://developer.android.google.cn/ndk/downloads/index.html
2 Cygwin下载:https://cygwin.com/install.html
1. 配置ndk
1)配置NDK的环境变量(在系统环境变量中配置,不赘述):
2)打开Android Studio(后面简称AS),依次点击File->Project Structure->SDK Location,到如下界面,选择你的NDK所在的目录,选择完之后点击ok,就可以了:
2. 配置使用Terminal(如果已经配置跳过)
使用ctrl + alt +s打开settings,然后操作setting->Tools->Terminal,配置cmd.exe这样就可以在Terminal里面做dos命令(后面用来生成jni文件)。
3. 写JniDemo
1) 首先在项目中新建一个类JniClient,如:
这里做一下讲解,这个里面有两个静态方法,都是用native修饰,意思表示是JniClient类里面有两个本地方法helloWord和calculate,但是这里显示的是红色说明我们只是声明,但是AS没有找到这两个方法。下面就来创建方法
2)创建玩JniClient类之后
make 一下项目,AS会在在项目的app\build\intermediates\classes\debug\ zj\guyue\testjni 下创建JniClient.class字节码文件,之后创建jni文件夹如下:
打开AS命令行窗口(View->Tool Window->Terminal)。输入如下命令:
javah -d jni -classpath E:\5-ProjectFile\2-AndroidStudio\TestJNI\app\build\intermediates\classes\debug zj.guyue.testjni.JniClient
可以在刚刚创建的jni文件夹下看到对应的.h文件(生成的文件名称规则:包名_ 类名.h,包名的点变成 _)
3)创建c代码
创建c文件
编写C代码
#include <zj_guyue_testjni_JniClient.h>
JNIEXPORT jstring JNICALL Java_zj_guyue_testjni_JniClient_helloWord(JNIEnv *env, jclass obj){
return (*env)->NewStringUTF(env,"guyuelan");
}
JNIEXPORT jint JNICALL Java_zj_guyue_testjni_JniClient_calculate(JNIEnv *env,jclass obj,jint a,jint b){
return a + b;
}
4)配置项目参数
在gradle.properties 里面加上:android.useDeprecatedNdk=true
在gradle的defaultConfig里面添加
ndk{ moduleName "JniClient" // 生成的so文件名 abiFilters "armeabi","x86","armeabi-v7a" //CPU类型 }
5)生成so文件
项目参数配置好之后,直接rebuild一次,然后在项目的build目录下就有对应的so文件。
这样AS的JNI使用就OK了~,至于引用so文件简单的说下:将生成的3个类型的文件夹(含so文件)拷贝到项目的libs文件夹下就可以直接引用了,看下调用结果。
常见的错误解决办法:
- 报错说“….找不到文件”/…Not Found…——>你的NDK本身有问题重新下载一个
- 报错说: ….ndk.cmd….错误———->你在jni文件夹下添加一个空的empty.c文件(为什么这样,我在网上找了很久,说是AS集成jni,不是很友好….目前也没有明确,为什么这么说,你可以去你的jni文件夹下看看你写的c文件,即使编译成功,生成so文件,但是c文件里还是显示红色。)