最近有个项目需要用到NDK,所以记录下自己集成NDK时遇到的问题和解决办法。
关于NDK和JNI的一些基础知识,可以参考这篇文章。
集成时本地环境介绍:
1.jdk版本:jdk1.8.0_171;
2.Android Studio版本:Android Studio 3.1.2;
3.CMake版本:3.10.2;
4.NDK版本:19.1.5.
集成步骤:
1.安装CMake和NDK;
使用的是AS的安装工具,如图,打开Tools-->SDK Manager
然后选择Android SDK-->SDK Tools,选中下方的CMake和NDK,点击ok,直到提示安装成功
2.新建项目:
新建一个Android项目,然后在Include C++ support选项打勾,一路next就ok了。
3.把项目的Gradle插件版本修改到合适的版本,我使用的是
com.android.tools.build:gradle:3.2.1
具体位置在项目跟目录下的build.gradle文件,如下图位置:
4
4.不出意外,这个时候可以编译运行app,效果如图
可以看到图中的文字是 Helle from C++,这时候表示,你已经正确集成了NDK,如果想要再进一步修改这段文字,可以在如图的位置,修改你的文字
编译运行,效果如下
至此,一个简单的NDK集成完成。
集成过程中遇到的一些问题和报错:
Error configuring ,配置出错,如图,并且没有更多的报错信息;
这个是你使用的Gradle插件版本导致的,你可以按照AS的提示,使用最新的Gradle插件版本,比如我换成和3.3.2,然后clean项目,又报了一个新的错,Unsupported method:NativeArtifact.getSourceFolders().
根据报错信息,是使用的gradle版本不支持该方法,所以还是gradle版本的问题
为了找到一个合适的gradle版本,可以去官网看Plugin version和Required Gradle version的对应关系,然后尝试更换gradle插件版本,最终我使用3.2.1,编译通过。
在此过程中,还遇到了一些别的问题,No toolchains found in the NDK toolchains folder for ABI with prefix:mips64el-linux-android.
这是因为你使用的Gradle插件版本和你的NDK版本不匹配,最新的NDK已经把mips64el-linux-android从toolchains下删除了。所以Gradle找不到。
可能还会出现一个CMake版本找不到的问题,你需要clean你的项目,重新编译。
希望能帮到你。