这几天刚刚接触NDK开发,我觉得这个也是我们android开发者必须掌握的,所以在这里mark下,我们比较熟悉的是android的SDK开发,一般的开发中我们很少去接触NDK,其实就是我们常说的jni。已经有SDK了,为什么android支持NDK呢,google就是为了让android支持直接去调用c/c++的一些东西,我们都知道c/c++是比java效率更高的,java是牺牲运行效率,提高编译效果,而c/c++则反之。那么SDK和NDK是什么关系呢,我直接在网上找了一张图来看下
通过上图我们可以知道NDK最终生成的是so文件,然后通过SDK去调用。下面我们就直接来写第一个NDK程序。写之前我们先来准备好环境。
1,下载ndk,我用的是最新的r10包。点击下载
2,下载好后,直接运行exe文件就可以直接解压了,解压后放在一个你喜欢的路径下,然后我们在AS直接配置路径就好了,ctr+alt+shift+s,如下图配置![这里写图片描述]
3,配置好之后,我们来到local.properties配置下,在最后一行添加
ndk.dir=E:\AS\NDK\android-ndk-r10d,这个路径要填你自己ndk的路径。
4,然后再src目录下的build.gradle的defaultConfig配置下
defaultConfig {
....
ndk{
moduleName "YanboberJniLibName" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
}
配置好后我们就可以来coding了,demo直接参考博客。
coding了一遍, 编译的时候报了一个错:
Error:(13, 0) Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
<a href="openFile:E:\AS\workspace\NDKDemo\app\build.gradle">Open File</a>
直接gradle.properties加一行就好了
android.useDeprecatedNdk=true
还有一个就是在AS里面c文件会出现红色的报错的信息,这个是AS的原因。
编译运行后的效果: