不知不覺入宦,使用Android Studio開發(fā)App已有一段時間了哺徊,接觸到了各式各樣的第三方庫文件的引入,也是時候總結(jié)一波了乾闰。
使用Android Studio開發(fā)Android應用時唉工,避免不了需要借助Gradle引入各式各樣的第三方庫文件,幫助我們更好的開發(fā)App汹忠,常見的引入方式有:Jar文件淋硝,so文件,Library庫文件宽菜,aar文件谣膳,遠程jcenter、maven倉庫文件铅乡。這幾種引入方式各有利弊继谚,對應的gradle配置也有所不同,本文根據(jù)平時的使用經(jīng)驗阵幸,做一個簡單的總結(jié)花履,幫助大家更好的利用Gradle引入第三方庫文件。
jar文件
將jar文件復制至app module目錄下的libs文件夾下挚赊,然后打開app module目錄下的build.gradle
配置文件诡壁,在dependencies
項中添加配置命令,這里有兩種配置方式可供選擇:
- 一次性引入libs目錄下所有jar文件
compile fileTree(include: ['*.jar'], dir: 'libs')
- 單個逐一引入jar文件
compile files('libs/universal-image-loader-1.8.6-with-sources.jar')
so文件
- Gradle 舊版本
將so文件(包含arm64等文件夾)復制app module下面的libs文件夾中荠割,和jar文件類似妹卿,然后在build.gradle的android
欄目下添加一個task:指定so文件的目錄,并將其轉(zhuǎn)化為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)
}
- Gradle 新版本
新版Gradle實現(xiàn)了自動打包編譯so文件的功能夺克,并且為so文件指定了默認的目錄app/src/main/jniLibs
,當然默認是沒有這個文件夾的嚎朽,我們只需要新建一個jniLibs
文件夾铺纽,并將so文件復制到該文件夾下,編譯運行即可哟忍。
通常狡门,為了更好地管理第三方庫文件陷寝,或者更簡單地將Eclipse項目轉(zhuǎn)化為Android Studio項目,建議將jar文件和so文件放在一起融撞,統(tǒng)一擱置在app/libs
目錄下,此時粗蔚,我們只需要在build.gradle的android
一欄中添加如命令尝偎,指定so文件的目錄即可:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
通過這種方式,編譯過后鹏控,將項目目錄切換至Android試圖致扯,可以看到,app目錄下多了一個jniLibs文件夾当辐,里面包含了引入的so文件和jar包抖僵,如下圖所示,表示集成成功缘揪。
Library庫文件
將第三方Library庫文件復制到項目根目錄下耍群,打開項目根目錄下的settings.gradle
文件,添加配置命令找筝,如:
include ':app', ':PullToRefresh'
然后打開app module目錄下的build.gradle
蹈垢,添加配置命令,如:
compile project(':PullToRefresh')
小技巧:推薦在項目根目錄下新建一個文件夾袖裕,如extras文件夾曹抬,將所有Library庫文件都復制到該文件下,方便統(tǒng)一瀏覽管理急鳄,這樣上面兩步對應的配置命令將變成:
include ':app', ':extras:PullToRefresh'
和
compile project(':extras:PullToRefresh')
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')
注意:這種引入方式無法查看aar文件中的代碼和資源等文件兼雄。
- libs目錄中引入
將aar文件復制到app module目錄下的libs文件夾中吟逝,然后打開app module目錄下的build.gradle
配置文件,在android
一欄中添加依賴:
repositories {
flatDir {
dirs 'libs'
}
}
然后再在dependencies
一欄中添加:
compile(name:'qiniu-android-sdk-7.2.0', ext:'aar')
對應完整的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')
}
重新同步赦肋,編譯工程块攒,然后可以在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
}
然后再各個Module的build.gradle
配置文件的dependencies
項中添加依賴庞呕,格式為`compile 'name:version'`新翎,如:
compile 'com.squareup.okhttp3:okhttp:3.2.0'
總結(jié)
以上便是針對Android Studio引入第三方庫文件的幾種方式,它們各有利弊住练,總結(jié)來看地啰,就是在包含內(nèi)容、源碼修改讲逛、版本更新三方面上的差異亏吝。Jar文件只包含java代碼,不像aar等其他文件能夠包含res資源文件盏混;Library文件形式的引入可以讓開發(fā)人員根據(jù)自己的需求修改庫文件源碼蔚鸥,以達到適應自己項目的目的;而遠程倉庫形式的引入可以實現(xiàn)版本的自動檢測更新许赃,保證自己項目使用的第三方庫文件始終是最新版本株茶。
當然,一個優(yōu)秀的第三方庫一般會提供多種方式的引入图焰,考慮到Eclipse和AS用戶启盛,至少要包含Jar文件和Gradle構建這兩種,其他一些供應者會根據(jù)自己的功能模式提供其他引入方式技羔,比如七牛云存儲便提供了aar的引入方式僵闯。大家可以根據(jù)自己的項目需求選擇合適的引入方式,畢竟藤滥,適合自己的才是最好的鳖粟。