Skip to content

签名

https://flutter.cn/docs/deployment/android#sign-the-app

https://developer.android.google.cn/studio/publish/app-signing?hl=zh-cn#app-signing-google-play

Java 密钥库(.jks 或 .keystore)是用作证书和私钥存储库的二进制文件。

公钥证书(.der 或 .pem 文件,也称为数字证书或身份证书)包含公钥/私钥对中的公钥,以及可以标识持有对应私钥的所有者的一些其他元数据(例如名称和位置)。

应用签名密钥:
用于为用户设备上安装的 APK 签名的密钥。作为 Android 安全更新模型的一部分,应用签名密钥在应用的整个生命周期内保持不变。应用签名密钥属于私钥,因此必须保密。不过,您可以与他人共享使用应用签名密钥生成的证书。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
输入密钥库口令: 12345678
再次输入新口令: 12345678
您的名字与姓氏是什么?
  [Unknown]:  cai
您的组织单位名称是什么?
  [Unknown]:  caicai
您的组织名称是什么?
  [Unknown]:  xcai
您所在的城市或区域名称是什么?
  [Unknown]:  ty
您所在的省/市/自治区名称是什么?
  [Unknown]:  ty
该单位的双字母国家/地区代码是什么?
  [Unknown]:  zh
CN=cai, OU=caicai, O=xcai, L=ty, ST=ty, C=zh是否正确?
  []:  y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
     CN=cai, OU=caicai, O=xcai, L=ty, ST=ty, C=zh
输入 <key> 的密钥口令
    (如果和密钥库口令相同, 按回车):
[正在存储/Users/nocilantro/key.jks]

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /Users/nocilantro/key.jks -destkeystore /Users/nocilantro/key.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

keytool -importkeystore -srckeystore /Users/nocilantro/key.jks -destkeystore /Users/nocilantro/key.jks -deststoretype pkcs12
# 输入源密钥库口令:
# 已成功导入别名 key 的条目。
# 已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消

# Warning:
# 已将 "/Users/nocilantro/key.jks" 迁移到 PKCS12。将 JKS 密钥库作为 "/Users/nocilantro/key.jks.old" 进行了备份。

创建一个名为 /android/key.properties 的文件,如下:

1
2
3
4
storePassword=12345678
keyPassword=12345678
keyAlias=key
storeFile=/Users/nocilantro/key.jks

构建应用:

1
2
3
flutter clean
flutter build apk --release 
cp build/app/outputs/flutter-apk/app-release.apk ~/Desktop/test12270907.apk

包名和签名的问题

Android中包名是唯一的
1.包名、签名都相同:会直接覆盖。
2.包名相同,签名不同:安装失败。
3.包名的命名规范:com.公司名.项目名。例如:com.baidu.test。