博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK JNI 开发之旅03 so类库 JAR包使用
阅读量:7220 次
发布时间:2019-06-29

本文共 3098 字,大约阅读时间需要 10 分钟。

作者简介

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

作者:陈博易

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

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


前言


  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 namedef JAR_VERSION = "_V1.0";//定义jar versiondef 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++基本知识,希望大家多多支持

个人相关教程

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

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

你可能感兴趣的文章
p2v/V2V 之linux篇——xenserver虚拟机迁移到vmware
查看>>
修改Exchange内/外主机名为统一域名(outlook证书报错)
查看>>
第五章 VIM 工具
查看>>
linux服务器安全初始化shell脚本
查看>>
Linxu基础(21)网络命令
查看>>
2.8-增加和删除用户组
查看>>
1.9-chattr文件隐藏属性
查看>>
详谈PHP之cookie的路径
查看>>
真正的换位思考:我做测试人员的一天
查看>>
CIH病毒破坏及其修复工具与方法
查看>>
Erlang学习:尾递归
查看>>
MySQL 主从双向复制实验
查看>>
解决IE屏蔽Java Applet问题的方法
查看>>
常用镜像地址
查看>>
中间件技术介绍
查看>>
linux系统用户管理
查看>>
我的友情链接
查看>>
简单使用epel源来安装NTOP及使用和chkrootkit的安装应用
查看>>
zabbix 监控mysql
查看>>
《jQuery权威指南》学习笔记——第三章
查看>>