初识JNI(快速生成.so文件)

前言:

从事Android开发工作有一段时间了,天天跟布局、原生控件打交道,用着别人的轮子,好用是好用,就是感觉自己没什么提升,脑子里思来想去,考虑到还得靠这行生存下去,现状不利于自己职业的发展,也实现不了自身的理想,故从今开始,尝试着记录下自己学习的过程,一来当做学习的总结与技术点的备份,二来试着分享一下自己的学习经验,希望从今天开始与诸君共勉!

准备工作:

  • 下载并配置NDK开发工具包,我使用的是Android Studio自带的,需下载的可去NDK 下载(PS:自备梯子)
  • 配置NDK路径,windows下快捷键Ctrl + Alt + Shift + S或File->Project Struture进入设置界面,如图:
初识JNI(快速生成.so文件)_第1张图片
NDK路径配置.png

步骤

1. 创建Android工程X-JniDemo。

初识JNI(快速生成.so文件)_第2张图片
创建Android工程X-JniDemo.png

2. 在Module的build.gradle对应位置添加以下代码:

 ndk {
            moduleName "NdkTools"
            ldLibs "log", "z", "m"
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }
初识JNI(快速生成.so文件)_第3张图片
配置build.gradle文件.png

3. 在gradle.properties文件添加代码。

android.useDeprecatedNdk=true
初识JNI(快速生成.so文件)_第4张图片
配置gradle.properties文件.png

4. 在app/src/main节点下创建jni和jniLIB文件夹。

初识JNI(快速生成.so文件)_第5张图片
新建文件夹.png

5. 新建Class文件NdkTools,编写代码装载库文件和声明native方法,这里的“NdkTools”就是第二步在build.gradle文件中配置的ModuleName,也将决定生成的.so文件的命名。

初识JNI(快速生成.so文件)_第6张图片
装载库文件和声明native方法.png

6. 直接Make Project,编译通过后会在app/build/intermediates/classes/debug/包名下生成NdkTools.class文件。

初识JNI(快速生成.so文件)_第7张图片
Make Project.png

初识JNI(快速生成.so文件)_第8张图片
app/build/intermediates/classes/debug/NdkTools.class文件.png

7.进入Terminal,依次输入

cd app\build\intermediates\classes\debug
javah -jni -encoding UTF-8 包名.NdkTools

完成后将在app/build/intermediates/classes/debug下生成对应的.h文件

初识JNI(快速生成.so文件)_第9张图片
生成对应的.h文件.png

8.将生成的.h文件剪贴至第四步创建的jni文件夹下,新建空文件util.c和ndktools.c,ndktools.c随意命名,将.h文件内容复制到ndktools.c中并改写

初识JNI(快速生成.so文件)_第10张图片
创建.c文件.png

9.再次Make Project项目,在app/build/intermediates下生成了ndk目录,其目录下生成了.so文件,将.so文件剪切至第四步创建的jniLIB目录下即可。

初识JNI(快速生成.so文件)_第11张图片
得到.so文件

初识JNI(快速生成.so文件)_第12张图片
文件剪切.png

你可能感兴趣的:(初识JNI(快速生成.so文件))