Android Studio 使用 Gradle 做為生成的工具在 Dependency 的管理上,節(jié)省掉很多煩人的工作,讓引用 Library 變成極為單純的作業(yè),也讓開(kāi)發(fā)人員可以更專注在重要的事項(xiàng)。如同在“使用 Android Studio 開(kāi)發(fā) Web 程序 - 設(shè)定共用庫(kù)”或這篇中提到,項(xiàng)目透過(guò) Gradle 的功能,要引用 Project 以外的 Library,只要在 build.gradle 中提供 Library 的識(shí)別名稱及對(duì)應(yīng)版本編號(hào),即可透過(guò)預(yù)先配置好的 Repository 來(lái)自動(dòng)取得 jar,不需要再由人工下載、更新。
以下是一個(gè)簡(jiǎn)易的引用演示:
dependencies {
// http://m.itdecent.cn/u/fea63707e07f
compile 'com.android.support:appcompat-v7:24.2.1'
}
就算是公司內(nèi)部自行開(kāi)發(fā)的 Library,也能在編譯、輸出 jar 后,上傳到私有的 Repository 中。再經(jīng)由同樣的模式,在 build.gradle 中新增私有 Repository、要引用的 Library 資訊,就可以于 Coding 時(shí)使用 Library 中的功能。
例如:
repositories {
maven {
// http://m.itdecent.cn/u/fea63707e07f
url "http://192.168.1.1”
}
}
更多深入的文章請(qǐng)參閱簡(jiǎn)書 http://m.itdecent.cn/u/fea63707e07f 或 wznote.blogspot.com
縱使利用 Repository 的形式來(lái)管理 Dependency 可以滿足大部份的開(kāi)發(fā)需求,但仍然有一些情境之下必須要使用獨(dú)立的 jar 來(lái)做為 Dependency。像是有一些小型的團(tuán)隊(duì),可能沒(méi)有足夠的資源來(lái)設(shè)置自己私有的 Repository,可是還是有跨項(xiàng)目共用功能的需求,這時(shí)就只能透過(guò) jar 或共用 Android Studio 的 Module 來(lái)達(dá)成。
所幸在 Gradle 的設(shè)定中,除了使用 Repository 之外,還提供直接引用 jar 的配置方法。在 Android Studio 預(yù)設(shè)產(chǎn)生的 build.gradle 中都會(huì)有以下的內(nèi)容:
dependencies {
// http://m.itdecent.cn/u/fea63707e07f
compile fileTree(include: ['*.jar'], dir: 'libs')
}
這個(gè)內(nèi)容代表了只要把 jar 的文件放到 Project 結(jié)構(gòu)中名為 libs 的目錄下,在 Coding 時(shí)就可以直接使用 jar 內(nèi)提供的功能。
只是光這樣還是會(huì)有一些不足之處,若是以開(kāi)發(fā)為業(yè),勢(shì)必不可能只有一個(gè) Project。團(tuán)隊(duì)內(nèi)部共用的 jar 在每開(kāi)一個(gè) Project 就要再?gòu)?fù)制一份到其下的 libs 目錄中,似乎不是一個(gè)好的 Dependency 管理模式,而把 jar 集中在所有項(xiàng)目之外的需求就應(yīng)運(yùn)而生。
這時(shí)就出現(xiàn)了一個(gè)疑問(wèn),原先的配置只有把 jar 放在 Project 內(nèi)的 libs 之下,在 Project 之外的 jar 要如何設(shè)定 Dependency?
面對(duì)這一個(gè)問(wèn)題,其實(shí)解決的方法也很簡(jiǎn)單。之前 build.gradle 的例子中,dir: 'libs' 代表的是相對(duì)于 Project 的位置,也就是在 Project 之下的 libs 路徑。當(dāng) jar 在 Project 之外時(shí),只要調(diào)整內(nèi)容為 Project 之上的路徑即可。
dependencies {
// http://m.itdecent.cn/u/fea63707e07f
compile fileTree(include: ['*.jar'], dir: ‘../../shared’)
}
以上面的例子來(lái)說(shuō),是假定所有的共用 jar 都被放在與 Project 平行的 shared 路徑之下,以下是目錄結(jié)構(gòu)的示意:
+ Project A
+ app
+ libs
+ src
+ androidTest
+ main
+ test
+ Project B
+ app
+ libs
+ src
+ androidTest
+ main
+ test
+ shared
- *.jar
透過(guò)以上的方式,就可以達(dá)成類似 Repository 的效果,當(dāng) shared 內(nèi)的 jar 被更新后,Project A 與 Project B 都可以在 Source Code 中使用最新的功能。而當(dāng)這二個(gè) Project 所使用的 jar 有版本不一致的情況時(shí),只要分別把對(duì)應(yīng)版本的 jar 放到所屬 Project 的 libs 路徑下即可。
更多深入的文章請(qǐng)參閱簡(jiǎn)書 http://m.itdecent.cn/u/fea63707e07f 或 wznote.blogspot.com