前言:
从事Android开发工作有一段时间了,天天跟布局、原生控件打交道,用着别人的轮子,好用是好用,就是感觉自己没什么提升,脑子里思来想去,考虑到还得靠这行生存下去,现状不利于自己职业的发展,也实现不了自身的理想,故从今开始,尝试着记录下自己学习的过程,一来当做学习的总结与技术点的备份,二来试着分享一下自己的学习经验,希望从今天开始与诸君共勉!
准备工作:
- 下载并配置NDK开发工具包,我使用的是Android Studio自带的,需下载的可去NDK 下载(PS:自备梯子)
- 配置NDK路径,windows下快捷键Ctrl + Alt + Shift + S或File->Project Struture进入设置界面,如图:
![](https://img.haomeiwen.com/i2608017/3cd49f7cd6b30d56.png)
步骤
1. 创建Android工程X-JniDemo。
![](https://img.haomeiwen.com/i2608017/010485431354830e.png)
2. 在Module的build.gradle对应位置添加以下代码:
ndk {
moduleName "NdkTools"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
![](https://img.haomeiwen.com/i2608017/28fa9ee590d63701.png)
3. 在gradle.properties文件添加代码。
android.useDeprecatedNdk=true
![](https://img.haomeiwen.com/i2608017/b290239a199cc33f.png)
4. 在app/src/main节点下创建jni和jniLIB文件夹。
![](https://img.haomeiwen.com/i2608017/739345e77e0045fb.png)
5. 新建Class文件NdkTools,编写代码装载库文件和声明native方法,这里的“NdkTools”就是第二步在build.gradle文件中配置的ModuleName,也将决定生成的.so文件的命名。
![](https://img.haomeiwen.com/i2608017/8b8409a139712a36.png)
6. 直接Make Project,编译通过后会在app/build/intermediates/classes/debug/包名下生成NdkTools.class文件。
![](https://img.haomeiwen.com/i2608017/71ce848e3a6647da.png)
![](https://img.haomeiwen.com/i2608017/90958840510765b9.png)
7.进入Terminal,依次输入
cd app\build\intermediates\classes\debug
javah -jni -encoding UTF-8 包名.NdkTools
完成后将在app/build/intermediates/classes/debug下生成对应的.h文件
![](https://img.haomeiwen.com/i2608017/85b4548aa93919d6.png)
8.将生成的.h文件剪贴至第四步创建的jni文件夹下,新建空文件util.c和ndktools.c,ndktools.c随意命名,将.h文件内容复制到ndktools.c中并改写
![](https://img.haomeiwen.com/i2608017/7bd91b4e8b856294.png)
9.再次Make Project项目,在app/build/intermediates下生成了ndk目录,其目录下生成了.so文件,将.so文件剪切至第四步创建的jniLIB目录下即可。
![](https://img.haomeiwen.com/i2608017/b03fd97b7abd3603.png)
![](https://img.haomeiwen.com/i2608017/2287adec11dc6a5b.png)
网友评论