AndroidNDKJNI開發之旅03so類庫JAR包使用

NO IMAGE

作者簡介

微信公眾號(高質量文章推送):走向全棧工程師

作者:陳博易

聲明:本文是個人原創,未經允許請勿轉載

商業合作請在微信公眾號回覆:聯繫方式


AndroidNDKJNI開發之旅03so類庫JAR包使用

AndroidNDKJNI開發之旅03so類庫JAR包使用

前言


  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

AndroidNDKJNI開發之旅03so類庫JAR包使用

AndroidNDKJNI開發之旅03so類庫JAR包使用

AndroidNDKJNI開發之旅03so類庫JAR包使用

將上篇文章的這幾個文件複製到library項目相對應目錄中,別說你不知道在哪裡,那就看我的前面幾篇文章,去找找

AndroidNDKJNI開發之旅03so類庫JAR包使用

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

AndroidNDKJNI開發之旅03so類庫JAR包使用

AndroidNDKJNI開發之旅03so類庫JAR包使用

生成JAR方式一:雙擊makeJar

AndroidNDKJNI開發之旅03so類庫JAR包使用

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

AndroidNDKJNI開發之旅03so類庫JAR包使用

編譯完成後會提示

AndroidNDKJNI開發之旅03so類庫JAR包使用

最終生成JAR 包和 so類庫

AndroidNDKJNI開發之旅03so類庫JAR包使用

3. 使用so類庫項目介紹

將類庫中的JAR包和so複製代主項目的libs目錄下

AndroidNDKJNI開發之旅03so類庫JAR包使用

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

使用就是這麼簡單

AndroidNDKJNI開發之旅03so類庫JAR包使用

總結


  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 開發之旅 開源項目

AndroidNDKJNI開發之旅03so類庫JAR包使用

相關文章

Kotlin重構如何兼容原先的ButterKnife、EventBus3.1

Kotlin環境搭建

Android9.0加密適配

AndroidNDKJNI開發之旅02so類庫簡單使用篇