在项目中遇到关于NDK的问题,不知道NDK到底是什么鬼,所以一直在找相关的资料,尝试不同的方法进行编写,在这个过程中碰到许多坑,所以在这里进行一下总结,同时也希望能帮助更多的开发者,那么我们今天就浅浅的谈一下NDK开发,
一,NDK 是 Google为Android提供做C/C++代码开发的工具包,包含GCC的编译器以及各个平台(arm,X86,MIPS)的相关头文件,交叉编译的一些平台相关文件等。
废话不多说让我们直接来体验下ndk开发的感觉。
1.首先我们要配置好开发环境,配置环境如下:
找到sdk目录下的ndk文件夹,进行环境变量的配置,下面是Windows的环境变量配置;
在这里说明一下,使用android studio进行NDK下载时需要耗费一点时间,需要耐心等待。配置好后dos下命令:ndk-build;出现以下信息说明配置成功。
2.环境配置好后,下面就进行NDK的例子说明
首先新建一个项目,并勾选Include C++ support,一直next下去。
3.配置Android studio中的NDK路径,并检查local.properties是否配置正确,如下图:
4.检查是否配置正确:
5.设置as。将ndk版本差异检测过滤掉,要不然项目无法编译。添加:android.useDeprecatedNdk=true
6. 编写调用c的java代码。同时把MainActivity里的static {System.loadLibrary("native-lib"); }与public static native int square(int num);剪切复制到新建的MathKit类中
7.生成调用本地方法的.h方法,用as自带的Terminal工具来生成。命令:
进入创建项目的java文件夹下
执行命令:
生成效果如下:
8.在main目录下创建jin文件夹,将步骤7生成的.h文件剪切复制到jni目录,并创建.c文件
9. 写c的测试代码。include中指向你创建的.h头文件com_fittop_ndkkaifa_MathKit;内容如下:
10.在build.gradle中配置生成so文件的信息,主要配置abiFilters
由于android studio 2.2以上使用CMake,所以需要配置CMakeLists.txt文件,修改生成后so文件名称、添加.c文件的路径:
11. 用Make Project 生成so文件,然后运行项目。然后就可以拿到so文件
测试调用c文件,测试如下:
运行效果如下:
12.打包jar文件
删除一些无用的资源,如MainActivity,layout等,只留下和JNI有关的java类.
14. 修改module的build.gradle文件
有如下几个地方需要修改:
将最前面的apply plugin: 'com.android.application'修改为apply plugin: 'com.android.library'
将defaultConfig修改为:
在上图该文件最后加上:
task deleteOldJar(type: Delete) {delete'build/outputs/test.jar'}task exportJar(type: Copy) {from('build/intermediates/bundles/release/')into('build/libs/')include('classes.jar')rename ('classes.jar','test.jar')}exportJar.dependsOn(deleteOldJar, build)
15.导出jar包
首先打开Gradle
打开app->Tasks->other->exportJar
双击exportJar就可以了,然后再'app/build/libs'文件夹下找到test.jar包,可以复制导出使用。
具体可参考小弟上传到github上的demo:github.com/liuxinggithub/Ndk.git
本文参考了网上资料,总结了一下使用方法,方便更多使用者的使用。