App Center 中的 Android 代码签名设置
提示
对于 Xamarin Android 用户,此过程略有不同。 有关详细信息,请参阅我们的 Xamarin "代码签名指南 "。
对应用进行签名是一项要求:在开发过程中在实际设备上运行应用程序,或者通过测试版程序或 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"。 从2020年12月17日开始 App Center (,) 在内部使用 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 中设置 生成配置 ,如下所示:
- 禁用 我的 Gradle 设置将被完全设置为自动处理签名。
- 将密钥存储文件 Upload 到 密钥存储文件 上传文件。 您可以将该文件拖到该框上,或单击它并浏览找到该文件。 密钥存储文件的扩展名为
.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 生成过程中可能会遇到代码签名错误。 这尤其适用于 React Native 使用 Android 版本0.60 和更高版本的应用程序:
Execution failed for task ':app:validateSigningRelease'.
Keystore file '.../android/app/debug.keystore' not found for signing config 'debug'
若要解决此问题,必须推送用于签名存储库的适当的密钥存储,并 将 "启用我的 Gradle" 设置完全设置为 在 App Center 门户的生成配置中自动处理签名。
如果你将密钥存储上传到 App Center 门户中的生成配置,请考虑此方法是否需要从 signingConfig (应用) 级别的部分中删除该选项, buildTypes 前提是 build.gradle 你未从 React Native 项目模板的默认状态中进行更新。