android studio环境下的NDK开发之路

在项目中遇到关于NDK的问题,不知道NDK到底是什么鬼,所以一直在找相关的资料,尝试不同的方法进行编写,在这个过程中碰到许多坑,所以在这里进行一下总结,同时也希望能帮助更多的开发者,那么我们今天就浅浅的谈一下NDK开发,

一,NDK 是 Google为Android提供做C/C++代码开发的工具包,包含GCC的编译器以及各个平台(arm,X86,MIPS)的相关头文件,交叉编译的一些平台相关文件等。

废话不多说让我们直接来体验下ndk开发的感觉。

1.首先我们要配置好开发环境,配置环境如下:

android studio环境下的NDK开发之路_第1张图片
CMake,LLDB安装
android studio环境下的NDK开发之路_第2张图片
NDK安装

找到sdk目录下的ndk文件夹,进行环境变量的配置,下面是Windows的环境变量配置;

android studio环境下的NDK开发之路_第3张图片
NDK配置
android studio环境下的NDK开发之路_第4张图片
加到Path路径后

在这里说明一下,使用android studio进行NDK下载时需要耗费一点时间,需要耐心等待。配置好后dos下命令:ndk-build;出现以下信息说明配置成功。

android studio环境下的NDK开发之路_第5张图片
配置成功

2.环境配置好后,下面就进行NDK的例子说明

首先新建一个项目,并勾选Include C++ support,一直next下去。

android studio环境下的NDK开发之路_第6张图片
新建项目

3.配置Android studio中的NDK路径,并检查local.properties是否配置正确,如下图:

android studio环境下的NDK开发之路_第7张图片
ndk路径

4.检查是否配置正确:

android studio环境下的NDK开发之路_第8张图片
上图证明已正确配置

5.设置as。将ndk版本差异检测过滤掉,要不然项目无法编译。添加:android.useDeprecatedNdk=true

android studio环境下的NDK开发之路_第9张图片
gradle.properties配置

6. 编写调用c的java代码。同时把MainActivity里的static {System.loadLibrary("native-lib"); }与public static native int square(int num);剪切复制到新建的MathKit类中

android studio环境下的NDK开发之路_第10张图片
调用c的java代码

7.生成调用本地方法的.h方法,用as自带的Terminal工具来生成。命令:

进入创建项目的java文件夹下

进入Java文件目录

执行命令:

执行命令

生成效果如下:

android studio环境下的NDK开发之路_第11张图片
执行结果

8.在main目录下创建jin文件夹,将步骤7生成的.h文件剪切复制到jni目录,并创建.c文件

.c文件

9. 写c的测试代码。include中指向你创建的.h头文件com_fittop_ndkkaifa_MathKit;内容如下:

.c文件内容

10.在build.gradle中配置生成so文件的信息,主要配置abiFilters

android studio环境下的NDK开发之路_第12张图片
配置abiFilters

由于android studio 2.2以上使用CMake,所以需要配置CMakeLists.txt文件,修改生成后so文件名称、添加.c文件的路径:

android studio环境下的NDK开发之路_第13张图片
so文件名与.c文件路径

11. 用Make Project 生成so文件,然后运行项目。然后就可以拿到so文件

android studio环境下的NDK开发之路_第14张图片
so文件

测试调用c文件,测试如下:

android studio环境下的NDK开发之路_第15张图片
java文件调用

运行效果如下:

android studio环境下的NDK开发之路_第16张图片
运行结果

12.打包jar文件

删除一些无用的资源,如MainActivity,layout等,只留下和JNI有关的java类.

android studio环境下的NDK开发之路_第17张图片
删除无用文件

14. 修改module的build.gradle文件

有如下几个地方需要修改:

将最前面的apply plugin: 'com.android.application'修改为apply plugin: 'com.android.library'

将defaultConfig修改为:

android studio环境下的NDK开发之路_第18张图片
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

android studio环境下的NDK开发之路_第19张图片
打开AS右侧的Gradle

打开app->Tasks->other->exportJar

android studio环境下的NDK开发之路_第20张图片
双击执行

双击exportJar就可以了,然后再'app/build/libs'文件夹下找到test.jar包,可以复制导出使用。

具体可参考小弟上传到github上的demo:github.com/liuxinggithub/Ndk.git

本文参考了网上资料,总结了一下使用方法,方便更多使用者的使用。

参考文档:blog.csdn.net/yanbober/article/details/51027520

你可能感兴趣的:(android studio环境下的NDK开发之路)