1.內部流通:
Android studio中的Gradle有着自身臨時存儲的倉庫,但是非常不易於管理,這種情形下引入Maven倉庫。
1.1 Maven基礎:
官網的Maven倉庫。
Android studio使用Gradle引用的第三發庫來自兩種網絡倉庫,一種時MavenCenter,另一種是JCenter。
兩個倉庫都具有相同的使命:提供Java或Android library服務。上傳到哪個取決於開發着。
Android studio選擇Maven Center作爲默認倉庫,如使用老版本Android studio創建一個新項目。mavenCentral()會自動定義在build.gradle中。使用新版的Android studio創建新項目,jcenter()自動被定義,而不是mavenCentral()。
buildscript {
repositories {
google()
jcenter() //構建腳本引入jcenter
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter() //全部工程引入jcenter
}
本地緩存:
Maven倉庫將經常使用的第三方庫緩存到本地,不用再每次使用時重新下載。同樣,Gradle也會對引用的第三庫進行緩存,使用Android studio的過程中就會存在Maven和Gradle兩種倉庫緩存。
使用本地Maven緩存,首先要了解Android studio默認的Maven倉庫的緩存地址。Mac的默認地址爲:/Users/用戶名/.m2/repository,window是:C:/Users/用戶名/.m2/repository。
buildscript {
repositories {
google()
mavenLocal()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenLocal()
}
}
當引用第三方庫時,如再引用的倉庫地址中找到這個庫,則不會下面的地址倉庫中查詢是否存在這個庫。使用本地倉庫時將mavenLocal填寫爲引用的第一個倉庫,保證先從本地的Maven倉庫中獲取引用庫。
然後在Library module的build.gradle中添加一下代碼段,使用publishing命令:
apply plugin: 'maven-publish'
publishing{
publication{
maven(MavenPublication) {
artifact "${buildDir}/outputs/aar/core-debug.aar"
group "com.wangyongyao.core"
artifactId "modulebus"
version "4.4.1"
}
}
}
本地緩存的優勢在於通過倉庫緩存,緩存了需要依賴使用的底層模塊,能極大降低編譯的耗時。
1.2 遠程倉庫:
使用遠程倉庫可以讓不同的電腦終端都能獲取項目的組件或者業務模塊資源,能夠保證給開發者提供穩定和安全的第三方資源。
搭建私有倉庫有助於多人協作開發項目,可以提高集成的穩定性和庫引用版本的可控性,也減少繁瑣的第三方庫的發佈工作。
2. 組件化SDK:
在Android開發中,一般都會引用第三方庫,這些庫通常是一些常見的SDK工具。在組件化開發中,因爲Android studio的限制,無法通過正常的方式編譯生成SDK。
Gradle的依賴引入機制引入的就是Android的SDK。第三方庫時Android的一些開發工具,還包括JNI使用so庫/Gradle的插件/Android studio運行開發的腳本工具/Java源碼的jar工具等。
aar文件的製作。
Library module編譯完成,最終生成的aar文件。但其生成的aar文件並不能包含complie引用的Library module的源碼和資源。
兩種實現方案:
- 通過腳本,將全部相關的資源合理地拼接,然後裝到一個Library module中,最後運行生成aar文件。
- 調整Gradle編譯任務,將引用的資源同時打包到aar中。Github開源了fat-aar.gradle文件,通過嵌入如Gradle編譯流程的方式,複製或改寫資源包流程中,以達到全部資源整合到aar文件的目的。
3. JCenter共享:
當SDK工具庫生成後,可以將直接以aar包形式提供外界使用,也可以上傳到公用的倉庫作爲第三方庫。