本文将介绍如何手动为 Android (APK) 进行代码签名。 如果您在创建和构建
整合项目
时选择了 Android 作为
平台
之一,您需要为 Android 应用签名。
如果您希望签署 AAB 应用以进行 Google Play 分发,请参阅
签署您的应用
。
准备您的 PC
您需要以下信息才能开始:
设置
Android Studio
设置
OpenSSL
设置
apksigner 工具
用于创建哈希键的应用程序名称。
最新的 APK 文件,以便在过程中进行签名。
如果您在创建
应用注册
时已经生成了密钥和签名哈希,请直接跳到
签署 APK 包
。
我们将使用
keytool.exe
(安装 Android Studio 后可用,从文件夹位置“Drive:\Program Files\Android\Android Studio\jre\bin\keytool.exe”)创建证书来签署应用程序包。 Keytool 用于管理加密密钥、X.509 证书链和可信证书的密钥库(数据库)。
如果没有环境变量,请打开命令提示符并运行以下命令以生成密钥:
下载 Android Studio、openssl
添加 keytool 和 openssl 作为环境变量。 添加 C:\Program Files\Android\Android Studio\jbr\bin 作为 env 变量。 在环境变量(C:\Program Files\OpenSSL-Win64\bin)中添加 openssl.exe 路径
运行以下命令 ---keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.jks -keysize 2048 -validity 10000 生成密钥
在 cmd - keytool -exportcert -alias powerappswrap -keystore powerappswrap.jks | openssl sha1 -binary | openssl base64 Generate Signature Hash 中运行此命令
如果您有环境变量,请打开命令提示符并运行以下命令以生成密钥:
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 \Users\name\Desktop\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 包
如果您尚未使用自动登录功能打包应用,或者正在尝试上传 Play 商店的 AAB 文件,则需要执行这些步骤。 为避免重复此步骤,建议使用自动登录。
要签署 APK 包,我们使用
apksigner 工具
。 此工具允许您签署 APK 并确保 APK 包签名将在 APK 支持的所有 Android 平台上成功验证。
查找您的 apksigner
检查 Android Studio 中的 Android SDK 路径。
选择
工具
>
SDK 管理器
>
Android SDK 位置
。
如果使用 iOS,检查
buildTools 版本
目录中的 apksigner 文件:
转到
SDK
目录 >
构建工具
>
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 应用保护服务提供应用访问权限
。
手动签署 APK - Xamarin
iOS 的手动代码签名
整合常见问题
Power Apps 中整合功能的故障排除问题