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

作者简介

微信公众号(高质量文章推送):走向全栈工程师

作者:陈博易

声明:本文是个人原创,未经允许请勿转载

商业合作请在微信公众号回复:联系方式


build-->make project结果展示

项目运行结果展示

前言


  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

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

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不能忽视了,重要的事情说三遍。。。

生成JAR方式一:双击makeJar

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

编译完成后会提示

最终生成JAR 包和 so类库

3. 使用so类库项目介绍

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

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 {
}

使用就是这么简单

总结


  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 开发之旅 开源项目

长按二维码“识别”关注或者扫一扫

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值