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

做者简介

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

做者:陈博易java

声明:本文是我的原创,未经容许请勿转载android

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


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项目相对应目录中,别说你不知道在哪里,那就看个人前面几篇文章,去找找git

jnilibrary/build.gradle代码展现github

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命令bash

编译完成后会提示微信

最终生成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 开发之旅 开源项目

长按二维码“识别”关注或者扫一扫
相关文章
相关标签/搜索