您必須先選擇存放區,才能授予程式庫存取權。本頁內容會說明選擇存放區類型的相關考量,並示範如何使用 Maven Publish 外掛程式建立發布項目。
上傳程式庫前,請務必備妥用於發布的程式庫,並設定好所有必要的發布項目變數或測試韌體。
選擇存放區類型
程式庫會以 AAR 檔案形式發布。這些檔案包含經過編譯的程式碼,包括位元碼和原生資料庫、Android 資訊清單以及資源。套件本身不會宣告其他程式庫的任何身分、版本或依附元件。
一般而言,比起直接發布 AAR,透過存放區提供 AAR 是最佳做法。這種做法可幫助使用者進一步瞭解程式庫的來源,不必處理不含版本等重要詳細資訊的 name.aar
檔案。在升級至較新版本的程式庫時,使用存放區可確保系統僅新增新版本所需的依附元件,這樣使用者就不必自行更新依附元件。
使用存放區發布程式庫有多種好處,包括:
- Gradle 可自動將程式庫的依附元件加入依附元件圖表。
- Gradle 可確保依附元件圖表中只存在程式庫的單一版本,這樣就能解決系統多次連帶納入程式庫不同版本所產生的衝突問題。
- 如果程式庫使用 Java 8 以上版本的語言功能,Android Gradle 外掛程式 (AGP) 可執行更有效率的脫糖程序,減少使用者的建構時間。
- 程式庫可使用變數發布及納入測試韌體等功能。
直接發布 AAR 並不會為使用者提供與程式庫身分、版本或依附元件相關的任何資訊。將 AAR 發布到存放區時,系統會透過存放區機制,由當中的獨立檔案處理發布程序。在 Maven 存放區中,這個檔案就是指 POM 檔案。因此,我們強烈建議您使用存放區發布程式庫,而不是手動發布 AAR 檔案。
存放區類型
存放區可分為以下三種類型:
- 免費線上存放區 (例如 Maven Central):可讓任何人上傳及下載程式庫。
- 私人存放區 (透過登入存取):可控管私人程式庫的發布程序。
- 本機資料夾存放區:可透過讓使用者自行下載的方式發布程式庫。
使用本機資料夾存放區發布的做法,與為使用者提供手動下載 AAR 的連結或透過電子郵件傳送 AAR 的做法十分相似。主要差別在於您不只是傳送 AAR,還會傳送身分、版本和依附元件等其他相關資訊。
您發布的是包含 AAR 和中繼資料的資料夾存放區 ZIP 檔案。這樣一來,使用者就能擷取檔案內容,將內容新增至專案,並將 Gradle 指向該檔案。此後,如同程式庫位於線上存放區的情況,使用者可以利用 Maven 座標宣告程式庫的依附元件,並享有先前所述的所有好處。
建立發布項目
使用 Gradle Maven Publish 外掛程式進行發布。Maven Publish 外掛程式可讓您宣告發布項目和存放區,並建立將這些項目發布到存放區的工作。這些發布項目使用的 SoftwareComponent
例項是由驅動建構程序的外掛程式所建立,可以是 AGP 或 java-library
外掛程式。
請注意,如果搭配 AGP 執行 Maven Publish 外掛程式,就不會在套用外掛程式時直接建立軟體元件,而是在 afterEvaluate()
回呼步驟中建立。因此,選取該軟體元件的發布項目也必須在 afterEvaluate()
步驟中設定。
下列模組層級 build.gradle
檔案的程式碼片段可為透過 singleVariant()
或 multipleVariants()
建立的指定變數建立發布項目:
Groovy
publishing { publications { release(MavenPublication) { groupId = 'com.my-company' artifactId = 'my-library' version = '1.0' afterEvaluate { from components.release } } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { groupId = "com.my-company" artifactId = "my-library" version = "1.0" afterEvaluate { from(components["release"]) } } } }
在上述範例中,元件的名稱 (components.release
) 會根據 singleVariant()
或 multipleVariants()
的指定名稱命名。
當您宣告發布項目後,就必須建立目標存放區。
發布至本機存放區
發布至本機存放區的方式與發布至遠端存放區十分類似,差別在於是否宣告存放區。請參閱上一節,瞭解如何發布至遠端存放區,建立發布一或多個所需變數的發布項目。接著建立本機存放區:
Groovy
publishing { publications { release(MavenPublication) { ... } } repositories { maven { name = 'myrepo' url = "${project.buildDir}/repo" } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { ... } } repositories { maven { name = "myrepo" url = uri("${project.buildDir}/repo") } } }
這會建立名為「publishReleaseToMyRepoRepository
」的工作,該名稱由發布項目名稱和存放區名稱組成。執行這項工作即可在指定位置產生存放區。在這個範例中,存放區會產生在專案建構資料夾的 repo
目錄中。
如要讓系統自動產生存放區的 ZIP 檔案,請使用下列程式碼:
Groovy
tasks.register('generateRepo', Zip) { def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository') from publishTask.map { it.getRepository().getUrl() } into 'mylibrary' archiveFileName.set('mylibrary.zip') }
Kotlin
tasks.register<Zip>("generateRepo") { val publishTask = tasks.named( "publishReleasePublicationToMyrepoRepository", PublishToMavenRepository::class.java) from(publishTask.map { it.repository.url }) into("mylibrary") archiveFileName.set("mylibrary.zip") }
以上程式碼會建立名為「generateRepo
」的 Zip
工作。該工作會使用及壓縮發布工作的內容,同時確保壓縮項目位於名為「mylibrary
」的頂層資料夾中。輸出檔案位於 build/distributions
底下。