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 开始,必须使用 APK 签名程序(如果使用 API 级别 30),因为它将设置一些额外的方案“APK 签名方案 v2 现在是必需的”。 App Center 现在(自 2020 年 12 月 17 日以来)在内部使用 APK 签名程序(而不是以前使用的 JAR 签名者)对 Android 应用程序进行签名。 作为在 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. 确保“我的 Gradle 设置”复选框 已完全设置为自动 处理未选中的签名。
  3. 在相应的字段中输入密钥存储密码、密钥别名和密钥密码。 在对生成进行签名时,这些值与在 Android Studio 中输入的值相同。

如果使用产品风格,可能需要调整上述代码,以便所有发布配置都使用正确的签名配置。

注意

如果在 (应用级别) 文件中的节build.gradle中使用buildTypes此选项signingConfig,可能会在 App Center 生成期间遇到代码签名错误。 这尤其适用于使用 React Native for Android 版本 0.60.x 及更高版本的应用:

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

若要解决此问题,必须推送用于对存储库进行签名的正确密钥存储,并启用 “我的 Gradle”设置,以便在 App Center 门户中的生成配置中自动 处理签名。

如果将密钥存储上传到 App Center 门户中的生成配置,请注意,如果不从 React Native 项目模板的默认状态更新该密钥存储,此方法将需要从buildTypes(应用级别)文件的节build.gradle中删除signingConfig该选项。