文章摘要
1绪钥、 三種依賴類型
2灿里、庫依賴關(guān)系配置
3、遠(yuǎn)程倉庫
4程腹、查看依賴關(guān)系樹
Android Studio中的搖籃構(gòu)建系統(tǒng)可以很容易地包括外部的二進(jìn)制文件或其他庫模塊到您的構(gòu)建與依賴。該依賴性可以位于您的計算機上或遠(yuǎn)程倉庫中色鸳,他們宣布任何傳遞依賴將自動包括在內(nèi)。
一蒜哀、依賴類型
要添加一個依賴于你的項目撵儿,指定諸如依賴配置compile在dependencies您的塊build.gradle文件淀歇。
例如浪默,下面build.gradle為應(yīng)用模塊文件包括三種不同類型的依賴關(guān)系:
apply plugin: 'com.android.application'
android { ... }
dependencies {
// Dependency on a local library module
compile project(":mylibrary")
// Dependency on local binaries
compile fileTree(dir: 'libs', include: ['*.jar'])
// Dependency on a remote binary
compile 'com.example.android:app-magic:12.3'
}
每個這些要求不同類型的依賴關(guān)系如下:
- 1纳决、本地庫模塊依賴
compile project(':mylibrary')
此聲明一有依賴性的Android庫模塊 名為“在MyLibrary”(此名稱必須定義為庫名稱相匹配include你的settings.gradle文件)岳链。它需要構(gòu)建系統(tǒng)編譯庫模塊與應(yīng)用模塊掸哑,并在您的APK所產(chǎn)生的AAR文件苗分。
- 2摔癣、本地二進(jìn)制依賴
compile fileTree(dir: 'libs', include: ['*.jar'])
由于Gradle讀取相對路徑的build.gradle 文件择浊,這告訴構(gòu)建系統(tǒng)添加您的項目內(nèi)的所有JAR文件 module_name/libs/的目錄的依賴琢岩。
或者担孔,您可以指定單獨的文件如下:
compile files('libs/foo.jar', 'libs/bar.jar')
- 3、遠(yuǎn)程二進(jìn)制依賴
compile 'com.example.android:app-magic:12.3'
這實際上是以下簡寫:
compile group: 'com.example.android', name: 'app-magic', version: '12.3'
這宣告了“應(yīng)用程序魔”庫的12.3版本的依賴啄育,在“code.example.android”命名空間組內(nèi)挑豌。
注意:這樣的遠(yuǎn)程依賴性要求你申報相應(yīng)的遠(yuǎn)程資源庫拼坎,其中搖籃應(yīng)該尋找?guī)旄√骸H绻麕煲呀?jīng)不存在本地,搖籃從遠(yuǎn)程站點時泰鸡,構(gòu)建需要它(當(dāng)您單擊如拉它同步工程與搖籃文件 或當(dāng)您運行構(gòu)建)债蓝。
二、庫依賴關(guān)系配置
內(nèi)側(cè)dependencies塊盛龄,可以聲明使用幾種不同的一個庫依賴依賴關(guān)系配置(諸如compile上面示出)饰迹。每個相關(guān)配置提供了搖籃有關(guān)如何使用圖書館不同的指令。下面的列表描述了每個可使用在你的Android項目庫依賴的配置余舶。
注:雖然 Java Plugin for Gradle 提供了類似于下面定義的依賴關(guān)系配置啊鸭,你不能在你的Android使用它們的項目,只有下面配置了Android Plugin for Gradle兼容匿值。
- compile
搖籃增加依賴于編譯類路徑,并在APK挟憔。 - apk
搖籃增加了依賴性只有APK(它不添加到編譯類路徑)绊谭。
注意:您可以使用apk只為JAR二進(jìn)制依賴政恍。它不支持庫模塊或AAR二進(jìn)制依賴达传。
- provided
搖籃增加依賴于編譯類路徑中唯一(它不添加到APK)篙耗。
當(dāng)你創(chuàng)建一個,這是有用的Android庫模塊 宪赶,你在編譯過程中需要的依賴性罕伯,但它是可選的有在運行時出現(xiàn)。也就是說,如果你使用這種配置,那么你的庫模塊必須包括一個運行狀況檢查依賴性是否可用硅堆,然后優(yōu)雅地改變其行為民褂,如果它沒有提供它仍然可以正常工作面殖。這有助于通過不添加短暫的依賴關(guān)系不是關(guān)鍵減少最終APK的大小遵绰。
您也可以在Android應(yīng)用模塊中,當(dāng)你依賴的是逛犹,你需要在編譯時的JAR文件使用码撰,并且您可以安全地假設(shè)已經(jīng)在運行時可用(因此你不希望將它復(fù)制到你的APK) 朵栖∩茉冢或者门扇,也許你想編譯反對使用指定的JAR provided配置,但使用apk 的配置來包裝不同的JAR到APK偿渡,其中包括需要在運行相同的API臼寄。
注意:如果你要創(chuàng)建一個Android應(yīng)用程序模塊,則不能使用 provided了AAR的依賴溜宽,只為JAR文件吉拳。在Android庫模塊,你可以用它兩個JAR和AARS坑质。
以上配置適用于項目的主要來源集合武,它適用于所有的構(gòu)建變種。
如果你不是想聲明的依賴只有特定的 構(gòu)建變量源設(shè)置或更改一個 測試源設(shè)置涡扼,你必須利用配置名稱以及與構(gòu)建變量或測試源集的名稱前綴它稼跳。
例如,在添加compile
依賴關(guān)系只為您的“免費”產(chǎn)品的風(fēng)味(使用遠(yuǎn)程二進(jìn)制依賴)吃沪,它看起來像這樣:
dependencies {
freeCompile 'com.google.firebase:firebase-ads:9.8.0'
}
但是汤善,如果你想添加一個依賴于結(jié)合了產(chǎn)品的風(fēng)味變體和構(gòu)建類型,那么你必須初始化的配置名稱configurations塊票彪。下面的示例增加了一個apk依賴于你的“freeDebug”打造變種(使用本地二進(jìn)制依賴):
configurations {
// Initializes a placeholder for the freeDebugApk dependency configuration.
freeDebugApk {}
}
dependencies {
freeDebugApk fileTree(dir: 'libs', include: ['*.jar'])
}
要添加compile為本地測試和儀表測試的依賴性红淡,它看起來像這樣:
dependencies {
// Adds a remote binary dependency only for local tests.
testCompile 'junit:junit:4.12'
// Adds a remote binary dependency only for the instrumented test APK.
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
如果你的庫模塊提供了多個變種,你可以添加不同的庫變體像這樣不同的應(yīng)用程序變量:
dependencies {
// Adds the 'debug' varaint of the library to the debug varaint of the app
debugCompile project(path: ':my-library-module', configuration: 'debug')
// Adds the 'release' varaint of the library to the release varaint of the app
releaseCompile project(path: ':my-library-module', configuration: 'release')
}
三降铸、遠(yuǎn)程倉庫
當(dāng)你的依賴比當(dāng)?shù)氐膱D書館或文件樹以外的東西在旱,搖籃會在哪個在線存儲庫中指定的文件 repositories的塊build.gradle文件。
默認(rèn)情況下推掸,新的Android Studio項目申報JCenter作為該項目的頂級存儲庫位置build.gradle的文件桶蝎,如下圖所示:
allprojects {
repositories {
jcenter()
}
}
如果你想從Maven的中央倉庫的東西,然后再添加 mavenCentral()谅畅,或本地存儲庫使用mavenLocal():
allprojects {
repositories {
jcenter()
mavenCentral()
mavenLocal()
}
}
參考配置:
allprojects {
repositories {
maven {
url "https://repo.example.com/maven2"
}
maven {
url "file://local/repo/"
}
ivy {
url "https://repo.example.com/ivy"
}
}
}
四登渣、查看依賴關(guān)系樹
有些直接依賴可能有自己的依賴。這些被稱為 傳遞依賴毡泻。而不是要求您手動聲明每個傳遞依賴胜茧,搖籃自動收集,并增加了它們仇味。為了形象化兩個項目的直接和傳遞依賴呻顽,對于搖籃的Android插件提供了生成依賴關(guān)系樹為每個搖籃任務(wù)構(gòu)建變量和 測試源集合雹顺。
要生成此報告,步驟如下:
1芬位、選擇視圖>工具的Windows>Gradle(或單擊 Gradle中的工具窗口欄)无拗。
2、展開AppName的 >任務(wù)>的android并雙擊androidDependencies昧碉。
3、要查看報告揽惹,選擇查看>工具的Windows>搖籃控制臺被饿。
下面的示例報告顯示調(diào)試構(gòu)建變量的依賴關(guān)系樹,包括前面例子中的本地庫模塊依賴和遠(yuǎn)程依賴性搪搏。
Executing tasks: [androidDependencies]
:app:androidDependencies
debug
/**
* Both the library module dependency and remote binary dependency are listed
* with their transitive dependencies.
*/
+--- MyApp:mylibrary:unspecified
| \--- com.android.support:appcompat-v7:26.0.0
| +--- com.android.support:animated-vector-drawable:26.0.0
| | \--- com.android.support:support-vector-drawable:26.0.0
| | \--- com.android.support:support-v4:26.0.0
| | \--- LOCAL: internal_impl-26.0.0.jar
| +--- com.android.support:support-v4:26.0.0
| | \--- LOCAL: internal_impl-26.0.0.jar
| \--- com.android.support:support-vector-drawable:26.0.0
| \--- com.android.support:support-v4:26.0.0
| \--- LOCAL: internal_impl-26.0.0.jar
\--- com.android.support:appcompat-v7:26.0.0
+--- com.android.support:animated-vector-drawable:26.0.0
| \--- com.android.support:support-vector-drawable:26.0.0
| \--- com.android.support:support-v4:26.0.0
| \--- LOCAL: internal_impl-26.0.0.jar
+--- com.android.support:support-v4:26.0.0
| \--- LOCAL: internal_impl-26.0.0.jar
\--- com.android.support:support-vector-drawable:26.0.0
\--- com.android.support:support-v4:26.0.0
\--- LOCAL: internal_impl-26.0.0.jar
...