App Center 中的 Android 程式代碼簽署設定

重要

Visual Studio App Center 已排定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到它完全淘汰為止,但有數個建議您考慮移轉至的建議替代方案。

深入瞭解支持時程表和替代方案。

提示

對於 Xamarin.Android 使用者,此程式稍有不同。 如需詳細資訊 ,請參閱我們的 Xamarin.Android 程式代碼簽署指南

簽署應用程式是開發程式期間在實際裝置上執行應用程式,或透過 Beta 程式或在 Play Store 中散發應用程式的需求。 如果沒有程式代碼簽署,應用程式只能在模擬器上執行。

當 App Center 建置具有偵錯組建類型的 Android 應用程式時,不需要開發人員的金鑰存放區,但可以上傳。 這些組建會自動以偵錯金鑰簽署程式代碼。 針對將部署的版本組建,請將密鑰存放區上傳至 App Center。

產生金鑰存放區

如果您目前沒有金鑰存放區,您可以在 Android Studio 中產生一個金鑰存放區。 您可以在 Android Studio 的官方使用者指南中找到產生金鑰存放區以簽署 APK 的指示。

設定程式代碼簽署

App Center 支援三種不同的方式來設定 Android 應用程式的程式代碼簽署。 針對這三種方法,您必須先移至組建組態並啟用程式代碼簽署:

  1. 移至 App Center 中的應用程式。
  2. 移至 [建置]。
  3. 從清單中選擇您想要設定的分支。
  4. 使用右上角的 [設定] 功能表, 或選擇 [ 如果您的分支尚未設定為建置],請選擇 [設定]。
  5. 啟用 簽署組建
  6. 選擇 [儲存]。

然後,視您的案例而定,請使用下列各節中最適合的三個選項。 第一個選項涉及簽入您的存放庫認證,而其他兩個選項則使用App Center來改為處理您的認證。

從 Android 11 開始,如果您使用 API 層級 30) ,則必須使用 APK 簽署者 (,因為它會設定一些額外的配置「現在需要 APK 簽章配置 v2」。 App Center 現在 (自 2020 年 12 月 17 日起,) 在內部使用 APK 簽署者簽署 Android 應用程式,而不是先前使用的 JAR 簽署者。 在 App Center 中啟用 APK 登入者的一部分,已實作 Android 簽署工作 V3,而新簽署工作的需求是變更密鑰存放區檔案的儲存方式 - 將密鑰存放區檔案儲存在 AzDO 安全檔案中 (Android 簽署組建和發行工作 - Azure Pipelines |Microsoft Docs) 。

警告

在 2020 年 12 月 17 日之前上傳其密鑰存放區檔案的任何組建組態,仍會使用 APK 簽章配置 v2 簽署方法 (jarsigner) 。 若要使用 APK 簽章配置 v3 簽署流程,使用者只需要 重新上傳密鑰存放區檔案儲存 其分支設定。

注意

不支援使用 Android Gradle 外掛程式 4.1.x 版。 若要使用此版本,您必須在 檔案中 gradle.properties 新增下一個選項設定:

 android.useNewApkCreator = false

A. 將所有項目儲存在 Gradle 設定中

您可以在 (應用程式層級) 檔案中build.gradle指定簽署詳細數據。 簽署詳細數據以及所有認證和金鑰存放區資訊都會顯示在存放庫中。 首先,將您需要的所有專案新增至程序代碼,並將其簽入您的存放庫。 然後在 App Center 的組建組態中,啟用 [我的 Gradle 設定] 完全設定為自動處理簽署

B. 將所有項目上傳至 App Center

您可以上傳金鑰存放區,並透過 App Center 設定簽署認證。 在此情況下,App Center 會先建置 Android 應用程式,然後在成功建置之後執行簽署步驟。

注意

組建只能簽署一次。 請確定您與所選組建變體的 Gradle 組態中的簽署組態沒有任何衝突。 如果 App Center 和 Gradle 檔案中有簽署設定,組建最終可能會簽署兩次,這會導致衝突。

在 App Center 中設定 組建組態 ,如下所示:

  1. 停用 [我的 Gradle 設定] 完全設定為自動處理簽署
  2. 將您的金鑰存放區檔案上傳至 金鑰存放區檔案 上傳檔案卸除。 您可以將檔案拖曳到方塊,或按下該檔案並瀏覽檔案。 金鑰存放區檔案具有 擴充名 .keystore.jks
  3. 在對應的欄位中輸入金鑰存放區密碼、金鑰別名和密鑰密碼。 當您簽署組建時,這些值與您在 Android Studio 中輸入的值相同。

C. 使用環境變數將簽署詳細數據儲存在存放庫中

如果您的存放庫已經包含密鑰存放區,但您不想在該處儲存認證,請使用這個方法。 在建置階段,認證會以 系統屬性 的形式提供給 Gradle 組建。 請參閱下列程式代碼範例,以瞭解如何使用它們:

android {
    signingConfigs {
        releaseSigningConfig {
            storeFile rootProject.file("app/testapp.jks")
            storePassword System.getProperty("APPCENTER_KEYSTORE_PASSWORD")
            keyAlias System.getProperty("APPCENTER_KEY_ALIAS")
            keyPassword System.getProperty("APPCENTER_KEY_PASSWORD")
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.releaseSigningConfig
        }
    }
}

在上述程式代碼中,保護插入至組建的系統屬性背後的值,可保護您的簽署認證安全 – 這些值會加密,而且只能在建置階段供組建代理程式使用。 您可以透過 App Center 提供值。 您也可以將任何值硬式編碼,並將其簽入您的存放庫。 若要使用 App Center 來保護值:

  1. 移至您的 組建組態
  2. 請確定名為 My Gradle 設定的複選框已完全設定為自動處理未 核取的簽署。
  3. 在對應的欄位中輸入金鑰存放區密碼、金鑰別名和密鑰密碼。 當您簽署組建時,這些值與您在 Android Studio 中輸入的值相同。

如果您使用產品類別,您可能需要調整上述程式代碼,讓所有發行組態都使用正確的簽署組態。

注意

如果您在 (應用程式層級) 檔案的 buildTypesbuild.gradle 區段中使用 signingConfig 選項,您可能會在 App Center 組建期間遇到程式代碼簽署錯誤。 這特別適用於針對 Android 0.60.x 版和更新版本使用 React Native 的應用程式:

 Execution failed for task ':app:validateSigningRelease'.
 Keystore file '.../android/app/debug.keystore' not found for signing config 'debug'

若要修正此問題,您必須推送用於簽署至存放庫的適當密鑰存放區,並啟用 My Gradle 設定完全設定為在 App Center 入口網站中自動處理組建組態中的簽署。

如果您已將金鑰存放區上傳至 App Center 入口網站中的組建組態,請考慮到,如果您未從 React Native 項目範本的默認狀態更新,則必須從 buildTypes (應用程式層級 ) 檔案的 build.gradle 區段刪除signingConfig選項。