首先,在 Project Structure 中配置好 SDK、JDK、NDK 路径
值得注意的是,NDK 版本应用 r10d 及以上版本,笔者测试过使用 r9d 版本,出现了众多的 bug 及相关问题如 jni 头文件找不到(这是由于编译的版本是5.0及以上而 NDK 版本过低造成的),所以建议使用新版
假设我在包 www.exchange.com.mylibrary 下建立了一个类 NdkString ,并写了一个本地方法,如图所示:
打开cmd,输入以下命令生成.h头文件
【1】进入目录:cd C:\Users\ASUS\AndroidStudioProjects\TestSkill\mylibrary
【2】为 NdtString 类生成 jni 目录及.h文件:javah -d jni -classpath ..\..\build\intermediates\classes\debug www.exchange.com.library.NdkString
如上图,没有任何报错,即生成.h头文件成功,可在IDE中找到如下文件
如果此处报错找不到类,优先检查有没有输错路径,如没错,则rebuild 下 project,关闭 cmd,再重新执行命令即可
可见文件中申明了 getFromC 方法
下面新建一个 Hello.c 文件,导入头文件,并实现 getFromC 方法
右键项目,点击 Make Module 'mylibrary' 编译项目
会得到如下编译错误
产生错误的原因,是** Android Stuido 不允许 NDK 开发中只存在单独一个 .c文件**,所以解决方法是生成一个空的 Hello1.c 文件,再次编译即可
可在路径 \mylibrary\build\intermediates\ndk\debug\lib 中查看.so文件
接下来,我们在任意一个 module 中,添加 mylibrary 依赖进行测试
笔者这里选用 app module,添加 Module dependency
在 NdkString 类中,加载 .so文件
最后编写测试类即可,此处笔者就不粘贴效果图了
最后,笔者在百度云中,给出 AndroidNDKR10D 的下载链接,有需要的读者自行下载。