Android 的代码符号

在本文中,您将了解如何进行 Android 代码签名 (APK)。 如果您在创建和构建整合项目时选择了 Android 作为平台之一,您需要为 Android 应用签名。

重要

如果您希望签署 AAB 应用以进行 Google Play 分发,请参阅签署您的应用

准备您的 PC

您需要以下信息才能开始:

生成密钥

备注

如果您在创建应用注册时已经生成了密钥和签名哈希,请直接跳到签署 APK 包

我们将使用 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 命令的屏幕截图。

生成签名哈希

备注

如果您在创建应用注册时已经生成了密钥和签名哈希,请直接跳到签署 APK 包

生成密钥后,将使用 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。”

出现此错误时,请尝试使用以下步骤生成签名哈希:

  1. 运行 keytool -list -v -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE 以详细模式列出证书信息。
  2. 从输出中复制证书指纹部分的 SHA1 值。 确保只复制十六进制值。
    例如:EF:11:45:3D:F1:72:D9:8C:43:32:CD:0A:49:C2:E4:75:2D:B3:2D:9F
  3. 使用任何可用的“十六进制到 Base64”转换器将复制的证书指纹十六进制值转换为 Base64 编码值。
    Base64 编码值的示例:8CPPeLaz9etdqQyaQubcqsy2Tw=
  4. 注册应用时,复制生成的 Base64 编码值作为 Azure 门户中的签名哈希

签署 APK 包

要签署 APK 包,我们使用 apksigner 工具。 此工具允许您签署 APK 并确保 APK 包签名将在 APK 支持的所有 Android 平台上成功验证。

查找您的 apksigner

  1. 检查 Android Studio 中的 Android SDK 路径。

  2. 选择工具 > 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 应用保护服务提供应用访问权限

另请参见