很久没用玩jni ndk编译so库了,为了防止手生就用最近需要实现的一个高斯模糊算法类练手。当然这个算法不是我实现的,我只是把这个算法C代码编译成了一个so库,因为C执行效率比java更高,作为这个吃CPU的算法很适合做成SO文件。
这里不再介绍JNI和NDK了,我要说的重点是一个SO库从编译到使用的这个过程。
上面图片可以清除看到这个SO库的生成和java层代码通过KJNI环境调用C/C++代码的过程。
我是用android studio编译的,因为SO都是一个库并且需要对应的java层加载库文件和申明方法接口所以我们可以直接在工程里面新建一个依赖库模块,下面开始讲解完成步骤:
(1)新建一个依赖库根据需要填写包名
(2)配置编译环境
- 在依赖库项目中找到local.properties文件添加ndk工具位置。
ndk.dir=/home/zhuxingchong/Android/Sdk/ndk-bundle
ndk位置file->project setting可以在下面找到
- 为了兼容低版本ndk在依赖库gradle.properties文件中添加
android.useDepreCateNdk=true
依赖库build.gradle文件中添加ndk编译模块和so文件编译mk文件
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrum