上傳程式庫

您必須先選擇存放區,才能授予程式庫存取權。本頁內容會說明選擇存放區類型的相關考量,並示範如何使用 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 底下。