生成新的密钥库文件
-
-keystore ~/your-release-key.jks
:指定密钥库的路径和名称。 -
-keyalg RSA
:指定密钥算法,这里使用 RSA。 -
-keysize 2048
:指定密钥的大小。 -
-validity 10000
:指定密钥的有效期,以天为单位(10000 天约为 27 年)。 -
-alias your-key-alias
:为你的密钥指定一个别名(需要记住,后面备案查看公钥和md5指纹需要用到
)。 - 命令:
keytool -genkey -v -keystore ~/your-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias your-key-alias
配置gradle构建文件
- 打开
android/app/build.gradle
,进行如下配置: - 将
your-key-alias
替换你的密钥别名 - 将
your-key-password
替换密钥的密码 - 将
/path/to/your-release-key.jks
替换为你的密钥库文件的实际路径。 - 将
your-keystore-password
替换为密钥库的密码。android { ... signingConfigs { release { keyAlias 'your-key-alias' keyPassword 'your-key-password' storeFile file('/path/to/your-release-key.jks') storePassword 'your-keystore-password' } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled false shrinkResources false // 注意:如果需要开启代码混淆,请设置 minifyEnabled 为 true,并配置 proguard-rules.pro // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
验证签名
- 输出
Verified
说明 APK 已正确签名:apksigner verify build/app/outputs/flutter-apk/app-release.apk
注意事项
- 密钥管理:保管你的密钥库文件和密码。如果丢失密钥,将无法更新应用。
- 安全性:不要将密钥库文件和密码直接硬编码到项目中。可以考虑使用环境变量或安全存储工具。
备案相关命令
- 需求信息:
包名bundle ID
公钥
-
证书MD5指纹
:(32长度的16进制数字)
- 查看
公钥
:keytool -exportcert -alias "keys" -keystore "your-release-key.jks" | openssl x509 -inform DER -subject_hash
- 查看密钥库的内容,
(有几个证书,可以在这里看)
keytool -list -v -keystore "your-release-key.jks"
由于 MD5 已经被认为不安全,因此现代工具和方法可能默认不显示 MD5 指纹。如果确实需要查看 MD5 指纹,你可以通过导出证书并使用 openssl 手动计算来实现。这种方法不仅适用于 .jks 文件,还适用于其他证书管理系统
- 使用
openssl
提取MD5指纹
:- 导出
.cer
证书:keytool -exportcert -alias "your-key-alias" -keystore "your-release-key.jks" -file exported_cert.cer
- 或者导出
.crt
证书:keytool -exportcert -alias "your-key-alias" -keystore "your-release-key.jks" -file exported_cert.crt
- 或者导出
.pem
格式(openssl工具可能无法识别上面的证书格式)
:
-rfc
:使用 PEM 格式导出证书(这是文本格式,可以直接查看和使用)。keytool -exportcert -alias "your-key-alias" -keystore "your-release-key.jks" -rfc -file exported_cert.pem
- 读取证书,并计算
MD5指纹
:openssl x509 -in exported_cert.crt -noout -fingerprint -md5
- 导出