如何优雅地使用NDK | 家杰的博客
NDK开发比较常用的命令就是生成头文件、构建so包,在android studio上我们可以先配置好命令,使用起来就很方便了,这是我感觉最赞的地方。
如下图所示,我添加了三个命令,按加号添加
其中一个命令的配置详情如下图:
命令配置参数:
javah用于生成头文件
Program:$JDKPath$/bin/javah
Parameters: -encoding UTF-8 -d ../jni -jni $FileClass$
注意:这个命令我加上了-encoding UTF-8指定编码,你可以改成你工程的编码。
Working directory: $SourcepathEntry$\..\java
ndk-build用于构建so包
Program: 你的NDK目录\build\ndk-build.cmd
注意:windows用ndk-build.cmd,MAC/Linux用ndk-build
Parameters: 什么都不用填
Working directory:$ModuleFileDir$\src\main
ndk-build clean清除so包
Program: 你的NDK目录\build\ndk-build.cmd
注意:windows用ndk-build.cmd,MAC/Linux用ndk-build
Parameters: clean
Working directory:$ModuleFileDir$\src\main
配置完三个命令之后,你就可以在右键菜单中找到这几个命令,可以直接使用。如下图演示了生成NdkTest类的头文件
配置工程
让工程项目使用NDK,需要做一些配置工作
在local.properties文件中填写使用的NDK目录:
1 | ndk.dir=你的NDK目录的绝对路径 |
在gradle.properties文件中添加如下代码
1 | android.useDeprecatedNdk = true |
在module的build.gradle添加如下代码:
1 | android { |
Hello word
按上面的步骤全都配置完之后就可以在Android Studio上享受NDK了。
下面写一个简单的返回Hello word字符串的程序。
首先在java中声明一个本地方法,并加载本地库,如下:
1 | public class NdkTest |
生成它的头文件(自动生成的名字是包名+类名me_majiajie_ndktest_NdkTest.h),并且创建c/c++文件(NdkTest.cpp),如下:
1 | #include "me_majiajie_ndktest_NdkTest.h" |
在jni目录创建一个文件命名为Android.mk,填入以下内容
1 | LOCAL_PATH := $(call my-dir) |
然后在jni目录创建一个文件命名为Application.mk,填入以下内容
1 | APP_MODULES := NdkTest |
注意:Android.mk和Application.mk都是NDK默认的配置文件,关于这两个文件的详细介绍可以看官网。
最后生成so包就可以了,记住每次修改C文件都需要重新生成so包: