Android 的代码符号
在本文中,您将了解如何进行 Android 代码签名 (APK)。 如果您在创建和构建整合项目时选择了 Android 作为平台之一,您需要为 Android 应用签名。
重要
如果您希望签署 AAB 应用以进行 Google Play 分发,请参阅签署您的应用。
准备您的 PC
您需要以下信息才能开始:
- 安装 Android Studio
- 安装 OpenSSL
生成密钥
我们将使用 keytool.exe(安装 Android Studio 后可用,从文件夹位置“Drive:\Program Files\Android\Android Studio\jre\bin\keytool.exe”)创建证书来签署应用程序包。 Keytool 用于管理加密密钥、X.509 证书链和可信证书的密钥库(数据库)。
要生成密钥,打开命令提示符,运行以下命令:
keytool -genkey -alias SIGNATURE_ALIAS -keyalg RSA -keystore PATH_TO_KEYSTORE -keysize 2048 -validity 10000
参数:
- genkey - 生成密钥的命令。
- alias - 指示要在将来使用的别名引用包含将要生成的密钥的密钥库条目。
- keyalg - 密钥算法名称。
- keystore - 您正在使用的密钥库的名称。
- keysize - 要生成的每个密钥的大小。
- validity - 密钥的有效期,以天数计。
示例:
如果正在准备密钥保管库,PATH_TO_KEYSTORE 应该有 .pfx 扩展名。
keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.pfx -keysize 2048 -validity 10000
如果您在准备进行手动签名,PATH_TO_KEYSTORE 应该有 .jks 扩展名。
keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.jks -keysize 2048 -validity 10000
生成签名哈希
生成密钥后,将使用 keytool 中的 exportcert 命令导出密钥库证书。
keytool -exportcert -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE | openssl sha1 -binary | openssl base64
参数:
- exportcert - 从密钥库中读取与别名关联的证书并将其存储在 cert_file 文件中。 未指定文件时,证书输出到 stdout。
- alias - 早期生成密钥时使用的别名。
- keystore - 您正在使用的密钥库的名称。
- openssl - 为 Android 生成 SHA1 密钥。
在注册应用时将生成的签名哈希添加到重定向 URI 中。
手动将 SHA1 十六进制转换为 Base64 编码的签名哈希
如果您的签名哈希在 Azure 门户中未正确编码或不可接受,您可能会看到以下错误:
“签名哈希必须是 base64 编码的 SHA1。”
出现此错误时,请尝试使用以下步骤生成签名哈希:
- 运行
keytool -list -v -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE
以详细模式列出证书信息。 - 从输出中复制证书指纹部分的 SHA1 值。 确保只复制十六进制值。
例如:EF:11:45:3D:F1:72:D9:8C:43:32:CD:0A:49:C2:E4:75:2D:B3:2D:9F
- 使用任何可用的“十六进制到 Base64”转换器将复制的证书指纹十六进制值转换为 Base64 编码值。
Base64 编码值的示例:8CPPeLaz9etdqQyaQubcqsy2Tw=
- 注册应用时,复制生成的 Base64 编码值作为 Azure 门户中的签名哈希。
签署 APK 包
要签署 APK 包,我们使用 apksigner 工具。 此工具允许您签署 APK 并确保 APK 包签名将在 APK 支持的所有 Android 平台上成功验证。
查找您的 apksigner
检查 Android Studio 中的 Android SDK 路径。
选择工具 > SDK 管理器 > Android SDK 位置。
如果使用 iOS,检查 buildTools 版本目录中的 apksigner 文件:
转到 SDK 目录 > build-tools > buildToolsVersion > lib,检查 apksigner.jar 文件
使用 apksigner 文件
运行以下命令来使用 apksigner 并对包进行签名:
apksigner.bat sign --ks PATH_TO_KEYSTORE --ks-key-alias KEY_ALIAS PATH_TO_APK
参数:
- ks - 密钥库的路径。
- ks-key-alias - APK 文件的密钥别名路径。
出现提示时,输入密码。
详细信息:Android Studio 命令行工具:apksigner
分发应用
您可以在 App Center 等分发服务上托管包。 要使用 Microsoft Intune 进行分发,请参阅将 Android 业务线应用添加到 Microsoft Intune。 若要了解有关向 Intune 应用保护服务提供应用访问权限的信息,请参阅向 Intune 应用保护服务提供应用访问权限。