詳解Android studio中正確引入so文件的方法
相信很多朋友在使用Android studio開(kāi)發(fā)中,遇到過(guò)如何引入第三方so文件的問(wèn)題,然而第三方官方僅僅給出了ADT環(huán)境下的集成方式。
Android studio中默認(rèn)使用的是gradle編譯方式,與ADT編輯方式不一樣,那么so文件應(yīng)當(dāng)如何引入呢?
其實(shí)很簡(jiǎn)單。這里以集成JPUSH為例,看一下so文件如何引入到編譯環(huán)境,最終到JNI直接可以調(diào)用該so文件。
首先,在我們的Module的根目錄中建立libs目錄,將jpush集成SDK中的so文件分別拷入,截圖如下:

然后就是編寫(xiě)我們的build.gradle文件。
關(guān)于so文件引入的配置很簡(jiǎn)單,代碼配置如下:
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
自定義一個(gè)任務(wù),在其中指定項(xiàng)目所依賴(lài)的so文件的目錄,這里用了**/*.so來(lái)寫(xiě),為了省事,指定需要拷入的目錄 into "lib",那么動(dòng)態(tài)運(yùn)行庫(kù)就被拷入到lib目錄中。
完整的build.gradle文件如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
applicationId "com.wujay.footerballstar"
minSdkVersion 8
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
compile files('libs/jpush-sdk-release1.7.2.jar')
compile files('libs/umeng_sdk.jar')
compile files('libs/libammsdk.jar')
}
基于有人在評(píng)論區(qū)提問(wèn),這里補(bǔ)充一下,有一個(gè)更為快捷輕快的配置方法
那就是在build.gradle配置中,配置如下的信息:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
你的so包可以放在lib目錄下,跟jar包放在同樣的目錄,如lib/armeabi/libjpush172.so。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開(kāi)發(fā)筆記XML數(shù)據(jù)解析方法及優(yōu)缺點(diǎn)
XML數(shù)據(jù)是一種常見(jiàn)的數(shù)據(jù)格式,Android開(kāi)發(fā)中需要對(duì)其進(jìn)行解析。常用的XML解析方式有DOM、SAX、Pull和Json等,每種方式都有其優(yōu)缺點(diǎn)。開(kāi)發(fā)者可以根據(jù)具體需求選擇合適的解析方式,提高數(shù)據(jù)解析效率和性能2023-05-05
詳解Android性能優(yōu)化之啟動(dòng)優(yōu)化
一款應(yīng)用的第一印象很重要,第一印象往往決定了用戶(hù)的去留。打開(kāi)一款應(yīng)用,如果速度很快,很順暢,那么很容易讓人覺(jué)得這款應(yīng)用背后的技術(shù)實(shí)力很強(qiáng),用戶(hù)潛意識(shí)中會(huì)對(duì)這款應(yīng)用更加的信賴(lài)。本文將詳細(xì)介紹Android性能優(yōu)化之啟動(dòng)優(yōu)化。2021-06-06
Flutter 快速實(shí)現(xiàn)聊天會(huì)話(huà)列表效果示例詳解
這篇文章主要為大家介紹了Flutter 快速實(shí)現(xiàn)聊天會(huì)話(huà)列表效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android Listview點(diǎn)贊問(wèn)題關(guān)于圖片重復(fù)問(wèn)題
最近在開(kāi)發(fā)android方面的項(xiàng)目時(shí),遇到很多問(wèn)題,下面小編以listview 與 baseadapter結(jié)合使用為例,給大家分享下關(guān)于點(diǎn)贊的的時(shí)候 圖片重復(fù)問(wèn)題的解決方法,一起看看吧2016-11-11
Android開(kāi)發(fā) -- setTag的妙用和The key must be an application-specif
本文主要介紹Android開(kāi)發(fā)setTag的妙用,小編覺(jué)得挺實(shí)用的,給大家一個(gè)參考,希望對(duì)大家學(xué)習(xí)有所幫助。2016-06-06
Android應(yīng)用中通過(guò)Layout_weight屬性用ListView實(shí)現(xiàn)表格
這篇文章主要介紹了Android應(yīng)用中通過(guò)Layout_weight屬性用ListView實(shí)現(xiàn)表格的方法,文中對(duì)Layout_weight屬性先有一個(gè)較為詳細(xì)的解釋,需要的朋友可以參考下2016-04-04

