Android NDK JNI 开发之旅03 so类库 JAR包使用

作者简介

微信公众号(高质量文章推送):走向全栈工程师
作者:陈博易
声明:本文是个人原创,未经允许请勿转载
商业合作请在微信公众号回复:联系方式


Android NDK JNI 开发之旅03 so类库 JAR包使用_第1张图片
build-->make project结果展示
Android NDK JNI 开发之旅03 so类库 JAR包使用_第2张图片
项目运行结果展示

前言


  1. 为什么要学习JNI呢,我的回答是:因为我好学!哈哈哈。
  2. 用Jar包的方式加载so类库的方式比较优雅。在使用高德地图开发地图模块时,也是这个套路,导入高德的Jar包和一堆的类库

环境以及工具


  1. Android项目:AndroidStudio3.0
  2. NDK
  3. CMake3.6.4
  4. LLDB3.0

整体步骤


  1. 创建so类库的library
  2. library生成对应的JAR包和so类库
  3. 使用so类库项目介绍

核心步骤解读


1. 创建so类库的library
Android NDK JNI 开发之旅03 so类库 JAR包使用_第3张图片
Android NDK JNI 开发之旅03 so类库 JAR包使用_第4张图片
Android NDK JNI 开发之旅03 so类库 JAR包使用_第5张图片

将上篇文章的这几个文件复制到library项目相对应目录中,别说你不知道在哪里,那就看我的前面几篇文章,去找找

Android NDK JNI 开发之旅03 so类库 JAR包使用_第6张图片

jnilibrary/build.gradle代码展示

apply plugin: 'com.android.library'

android {
    compileSdkVersion 26



    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //Gradle 文件配置对CMake的配置
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
        //Gradle 构建并打包某个特定abi体系架构下的.so库
        ndk {
            // Specifies the ABI configurations of your native
            // libraries Gradle should build and package with your APK.
            abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
                    'arm64-v8a','mips','mips64'

        }
    }
    //Gradle 文件配置对CMake的配置
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}



def JAR_NAME = "JniUtils";//定义jar name
def JAR_VERSION = "_V1.0";//定义jar version
def JARDestinationPath = "build";//定义输出路径
def zipJarFile = file('build/intermediates/bundles/release/classes.jar')//jar包来源

task deleteBuild(type: Delete) {
    //删除之前生成的jar包
    delete JARDestinationPath + JAR_NAME + JAR_VERSION + ".jar"
}

task makeJar(type: Jar) {
    from zipTree(zipJarFile)//jar包来源
    from fileTree(dir: 'src/main',includes: ['assets/**'])//assets文件的内容打包到jar包里
    baseName = JAR_NAME + JAR_VERSION//jar包输出名称
    destinationDir = file(JARDestinationPath)//jar包输出路径
}

makeJar.dependsOn(deleteBuild, build)

2. 生成对应的JAR包和so类库

jnilibrary/build.gradle的task不能忽视了,重要的事情说三遍。。。

Android NDK JNI 开发之旅03 so类库 JAR包使用_第7张图片
Android NDK JNI 开发之旅03 so类库 JAR包使用_第8张图片

生成JAR方式一:双击makeJar

Android NDK JNI 开发之旅03 so类库 JAR包使用_第9张图片

生成JAR方式二:在terminal 终端下输入gradlew makeJar命令

编译完成后会提示

最终生成JAR 包和 so类库

Android NDK JNI 开发之旅03 so类库 JAR包使用_第10张图片
3. 使用so类库项目介绍

将类库中的JAR包和so复制代主项目的libs目录下

Android NDK JNI 开发之旅03 so类库 JAR包使用_第11张图片

app/build.gradle展示

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
    }
    buildTypes {
    }
    sourceSets {
        main {
            //加载对应类库:如果是将so放在app/libs则
            //需要jniLibs.srcDirs = ['libs'],如果是将so放在
            // app/src/main/jniLibs,则需要jniLibs.srcDirs = ['jniLibs']
            // 也可以删除,因为AndroidStudio中新建项目时,系统默认为我们配置好了
            // gradle,所以系统默认就会到这个目录下找so包
            jniLibs.srcDirs = ['libs']
        }
    }
}
dependencies {
}

使用就是这么简单

Android NDK JNI 开发之旅03 so类库 JAR包使用_第12张图片

总结


  1. 请大家多关注关注我。
  2. 接下来继续深入ndk jni这一块的知识以及基本的c c++基本知识,希望大家多多支持

Android NDK JNI 开发 环境搭建入门篇
Android NDK JNI 开发之旅 so类库 简单使用篇

个人相关教程

各种大佬推荐的编程视频资源分享
Android 微信 支付宝支付,2行代码实现支付
Android前端 Java后端 集成支付宝支付
postman使用 Android java后端 接口调试工具
Android抓包 Charles http接口调试
消息推送 Android java后端集成小米推送
如何导入简单的java项目-IntelliJ IDEA

请关注我(高质量文章推送)

源码地址———关注微信公众号,回复:ndk类库使用02

Android NDK JNI 开发之旅 开源项目

Android NDK JNI 开发之旅03 so类库 JAR包使用_第13张图片
长按二维码“识别”关注或者扫一扫

你可能感兴趣的:(Android NDK JNI 开发之旅03 so类库 JAR包使用)