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 应用设置代码签名。 对于所有三种方法,首先需要转到生成配置并启用代码签名:
- 转到 App Center 中的应用。
- 转到 “生成”。
- 通过从列表中选择要配置的分支,转到该分支。
- 使用右上角的“设置”菜单,或者如果你的分支尚未配置为生成,请选择“ 配置 ”。
- 启用 签名生成。
- 选择 “保存” 。
然后,根据你的方案,使用下面部分的三个选项中最合适的选项。 第一个选项涉及将凭据签入到存储库,而其他两个选项则改用 App Center 来处理凭据。
从 Android 11 开始,如果使用 API 级别 30) 则必须使用 APK 签名者 (,因为它将设置一些额外的方案“现在需要 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 中设置 生成配置 ,如下所示:
- “禁用 我的 Gradle”设置完全设置为自动处理签名。
- 将密钥存储文件上传到 密钥存储文件 上传文件删除。 可以将文件拖到框中,或单击它并浏览文件。 密钥存储文件的扩展名
.keystore
为 或.jks
。 - 在相应的字段中输入密钥存储密码、密钥别名和密钥密码。 这些值与签署生成时在 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 保护值,请执行以下操作:
- 转到 生成配置。
- 确保名为 “我的 Gradle 设置”的复选框完全设置为自动处理未 选中的签名。
- 在相应的字段中输入密钥存储密码、密钥别名和密钥密码。 这些值与签署生成时在 Android Studio 中输入的值相同。
如果使用产品风格,则可能需要调整上述代码,以便所有发布配置都使用正确的签名配置。
注意
如果在 signingConfig
(应用级别) 文件的 节中使用 buildTypes
build.gradle
选项,则可能会在 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'
若要解决此问题,必须将用于签名的适当密钥存储推送到存储库,并启用 “我的 Gradle”设置完全设置为 在 App Center 门户中的生成配置中自动处理签名。
如果已将密钥存储上传到 App Center 门户中的生成配置,请注意,如果不从React Native项目模板的默认状态更新选项,则此方法需要从 buildTypes
(应用级别) 文件的 部分build.gradle
删除signingConfig
该选项。