【原創】Android 引用第三方庫檔案大全
不知不覺,使用Android Studio開發App已有一段時間了,接觸到了各式各樣的第三方庫檔案的引入,也是時候總結一波了。
使用android Studio開發Android應用時,避免不了需要藉助Gradle引入各式各樣的第三方庫檔案,幫助我們更好的開發App,常見的引入方式有:Jar檔案,so檔案,Library庫檔案,aar檔案,遠端jcenter、maven倉庫檔案。這幾種引入方式各有利弊,對應的gradle配置也有所不同,本文根據平時的使用經驗,做一個簡單的總結,幫助大家更好的利用Gradle引入第三方庫檔案。
jar檔案
將jar檔案複製至app module目錄下的libs資料夾下,然後開啟app module目錄下的build.gradle
dependencies
項中新增配置命令,這裡有兩種配置方式可供選擇:
- 一次性引入libs目錄下所有jar檔案
compile fileTree(include: ['*.jar'], dir: 'libs')
- 1
- 1
- 單個逐一引入jar檔案
compile files('libs/universal-image-loader-1.8.6-with-sources.jar')
- 1
- 1
so檔案
- Gradle 舊版本
將so檔案(包含arm64等資料夾)複製app module下面的libs資料夾中,和jar檔案類似,然後在build.gradle的android
欄目下新增一個task:指定so檔案的目錄,並將其轉化為Jar檔案。命令如下:
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)
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- Gradle 新版本
新版Gradle實現了自動打包編譯so檔案的功能,並且為so檔案指定了預設的目錄app/src/main/jniLibs
,當然預設是沒有這個資料夾的,我們只需要新建一個jniLibs
資料夾,並將so檔案複製到該資料夾下,編譯執行即可。
通常,為了更好地管理第三方庫檔案,或者更簡單地將Eclipse專案轉化為Android Studio專案,建議將jar檔案和so檔案放在一起,統一擱置在app/libs
目錄下,此時,我們只需要在build.gradle的android
一欄中新增如命令,指定so檔案的目錄即可:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
通過這種方式,編譯過後,將專案目錄切換至Android試圖,可以看到,app目錄下多了一個jniLibs資料夾,裡面包含了引入的so檔案和jar包,如下圖所示,表示整合成功。
Library庫檔案
將第三方Library庫檔案複製到專案根目錄下,開啟專案根目錄下的settings.gradle
檔案,新增配置命令,如:
include ':app', ':PullToRefresh'
- 1
- 1
然後開啟app module目錄下的build.gradle
,新增配置命令,如:
compile project(':PullToRefresh')
- 1
- 1
小技巧:推薦在專案根目錄下新建一個資料夾,如extras資料夾,將所有Library庫檔案都複製到該檔案下,方便統一瀏覽管理,這樣上面兩步對應的配置命令將變成:
include ':app', ':extras:PullToRefresh'
- 1
- 1
和
compile project(':extras:PullToRefresh')
- 1
- 1
aar檔案
aar其實也是一個壓縮檔案,相比jar檔案,它能夠含帶res資原始檔等,aar檔案的引入方式有兩種:
- Module形式引入
選擇File選單,或者開啟Project Structure
介面,新增新的Module(New Module…),選擇Import
.JAR/.AAR Package
,選擇目標aar檔案匯入。匯入之後,在專案根目錄下會自動生成一個新的資料夾放置aar檔案及其配置檔案,如:
然後開啟app module目錄下的build.gradle
配置檔案,在dependencies
依賴項中新增配置即可:
compile project(':qiniu-android-sdk-7.2.0')
- 1
- 1
注意:這種引入方式無法檢視aar檔案中的程式碼和資源等檔案。
- libs目錄中引入
將aar檔案複製到app module目錄下的libs資料夾中,然後開啟app module目錄下的build.gradle
配置檔案,在android
一欄中新增依賴:
repositories {
flatDir {
dirs 'libs'
}
}
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
然後再在dependencies
一欄中新增:
compile(name:'qiniu-android-sdk-7.2.0', ext:'aar')
- 1
- 1
對應完整的app module目錄下的build.gradle
配置檔案如:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.feng.demo"
minSdkVersion 11
targetSdkVersion 23
versionCode 1
versionName "1.0.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile project(':extras:PullToRefresh')
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile(name:'qiniu-android-sdk-7.2.0', ext:'aar')
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
重新同步,編譯工程,然後可以在app的build目錄下生成對應aar的臨時檔案,可以看到aar檔案中的jar檔案、資原始檔等,看上去更像是一個解壓縮資料夾:
jcenter、maven倉庫檔案
在專案根目錄的build.gradle
檔案中新增倉庫,如:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
然後再各個Module的build.gradle
配置檔案的dependencies
項中新增依賴,格式為`compile
‘name:version’`,如:
compile 'com.squareup.okhttp3:okhttp:3.2.0'
因為AndroidStuduio加入對Library Module的安全管理機制,所以不能直接右鍵專案找到Delete(Delete選單壓根找不到)進行刪除。
解決辦法:在專案列表直接右鍵你要刪除的Library Module(其他型別Module也可以這樣操作),找到選單Open Module Settings,在彈出的Project Structure視窗中找到要刪除的Library Module,點選左上角的 - 號圖示,移除後點擊OK,這時Library Module 失去依賴,最後右鍵專案中的Library Module 這時可以看到Delete選單了,點選進行最後一步的刪除,搞定!
- 1
- 1
因為AndroidStuduio加入對Library Module的安全管理機制,所以不能直接右鍵專案找到Delete(Delete選單壓根找不到)進行刪除。
解決辦法:在專案列表直接右鍵你要刪除的Library Module(其他型別Module也可以這樣操作),找到選單Open Module Settings,在彈出的Project Structure視窗中找到要刪除的Library Module,點選左上角的 - 號圖示,移除後點擊OK,這時Library Module 失去依賴,最後右鍵專案中的Library Module 這時可以看到Delete選單了,點選進行最後一步的刪除,搞定!
因為AndroidStuduio加入對Library Module的安全管理機制,所以不能直接右鍵專案找到Delete(Delete選單壓根找不到)進行刪除。