最近接到一个任务,叫我将项目上的压缩图片的方法优化一下。我就吭哧吭哧的找,找了几个开源库,发现效果也就那样,最后发现有个方法是调用jni来进行压缩,就这样我开始了的第一行JNI代码。
---------------------------------------------------------------------------------------------------------------------------
说实话,JNI的开发资料很乱,我也是找了几个晚上的资料之后才写出了类似的代码,接这个机会我在这里分享一下。
---------------------------------------------------------------------------------------------------------------------------
开发环境:
AndroidStudio 3.2.1
NDK 16(一开始我通过AS下载下来的是17.+的版本,后面遇到了一些问题我调整成了16,什么问题我后面会提出来)
WIn10
---------------------------------------------------------------------------------------------------------------------------
第零步 配置
打开sdkManager下载CMake和LLDB
配置ndk的环境
把红框中的路径,加到环境变量中
第一步 创建项目
这里要把 支持C++功能打开,接下来无脑next/finish,这个时候我们就可以得到一个系统默认的工程,这个工程里已经有了一个默认的jni的实现,这个很有助于我们开发,建议可以先看一哈~
最直观的来讲,从项目的结构上来讲主要多了这两个东西
第二步 创建我自己的native方法
第三步 生成对应的C++文件
我当时主要的事件都耗在这里了,因为开发工具/开发工具版本的不同,所以网上有很多方法,我这里选取了一个最最简单的方法(无需命令行)
配置 Anroid Studio 外部工具,一劳永逸,往后无需命令行,File->Setting->Tools->External Tools->“+”进入页面
按图配置好就成,其中三个最麻烦的在下面
Program:$JDKPath$\bin\javah.exe
Parameters:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$
Working directory:$ModuleFileDir$\src\main\Java
配置好这个工具之后,对native所在的方法,执行这个tool
执行完成之后,多了一个文件夹,文件夹中也会多一个.h文件
同目录下新建一个.cpp文件,然后我们把.h里面的内容copy到新建的文件里面(具体可以参照as自带的.cpp的文件)
第四步 配置对应的CMakeLists文件
几年前,我们还需要做JniLib.cpp 、Android.mk、Application.mk的配置,现在我们只需要对CMakeLists文件配置一下就可以了
还是那样模仿as生成的CMakeLists模板内容,差不多写一份就行了
第五步 调用native方法
注意libname 不要写错
第六步 调用我们写的native方法(getString)
最后运行得到程序
---------------------------------------------------------------------------------------------------------------------------
如果想得到这个工程对应的so包的话,可以通过以下路径获取
这些文件都会在rebuild成功之后出现。
最后来解答以下为什么用ndk16。
在ndk17+之后,我们无法通过这种方法生成armeabi的so包,只能生成上图所示的这些包,这会与我们开发过程中相冲突,所以我这里选用了16的版本
输出指定格式的so包
这时候重新rebuild一下,我们可以看到
---------------------------------------------------------------------------------------------------------------------------
接触jni没多久,望大神轻喷
demo: https://download.youkuaiyun.com/download/just_hu/11111799
参考链接
https://blog.youkuaiyun.com/ziyoutiankoong/article/details/79696279
https://blog.youkuaiyun.com/mayohn/article/details/82152360#新建项目