Android签名工具Keytool

Android签名

签名是通过算法将自己release版本apk包,变得唯一,等于签上自己的名字.

签名工具

Android签名工具在sdk中的keytool,命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ keytool
密钥和证书管理工具

命令:

-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法

签名的参数如下:

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
$ keytool -genkey -help
keytool -genkeypair [OPTION]...

生成密钥对

选项:

-alias <alias> 要处理的条目的别名
-keyalg <keyalg> 密钥算法名称
-keysize <keysize> 密钥位大小
-sigalg <sigalg> 签名算法名称
-destalias <destalias> 目标别名
-dname <dname> 唯一判别名
-startdate <startdate> 证书有效期开始日期/时间
-ext <value> X.509 扩展
-validity <valDays> 有效天数
-keypass <arg> 密钥口令
-keystore <keystore> 密钥库名称
-storepass <arg> 密钥库口令
-storetype <storetype> 密钥库类型
-providername <providername> 提供方名称
-providerclass <providerclass> 提供方类名
-providerarg <arg> 提供方参数
-providerpath <pathlist> 提供方类路径
-v 详细输出
-protected 通过受保护的机制的口令

使用 "keytool -help" 获取所有可用命令

签名

命令:

1
$ keytool -genkey -alias gylibrary -keyalg RSA -validity 20000 -keystore gylibrary.jks

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ keytool -genkey -alias gylibrary -keyalg RSA -validity 20000 -keystore gylibrary.jks
输入密钥库口令: 123456
再次输入新口令: 123456
您的名字与姓氏是什么?
[Unknown]: xieyang
您的组织单位名称是什么?
[Unknown]: foretree
您的组织名称是什么?
[Unknown]: foretree
您所在的城市或区域名称是什么?
[Unknown]: guiyang
您所在的省/市/自治区名称是什么?
[Unknown]: guizhou
该单位的双字母国家/地区代码是什么?
[Unknown]: 86
CN=xieyang, OU=foretree, O=foretree, L=guiyang, ST=guizhou,C=86是否正确?
[否]: y

输入 <gylibrary> 的密钥口令
(如果和密钥库口令相同, 按回车): 520123
再次输入新口令: 520123

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

这是就在此文件夹下生成签名文件.

查看签名文件

命令:

1
keytool -list -v -keystore /d/Workplace/Dart/flutter_gylibrary/android/gylibrary.jks

输入密码如下:

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
35
36
37
38
39
40
41
42
43
$ keytool -list -v -keystore /d/Workplace/Dart/flutter_gylibrary/android/gylibrary.jks
输入密钥库口令: 520123
密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: gylibrary
创建日期: 2019-1-2
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=xieyang, OU=foretree, O=foretree, L=guiyang, ST=guizhou, C=86
发布者: CN=xieyang, OU=foretree, O=foretree, L=guiyang, ST=guizhou, C=86
序列号: 40bd544d
有效期为 Wed Jan 02 21:44:49 CST 2019 至 Thu Oct 05 21:44:49 CST 2073
证书指纹:
MD5: 1F:B6:83:9D:A2:78:7B:9A:68:93:FD:02:56:4A:AD:AD
SHA1: C2:53:97:F4:37:7C:DC:EE:8B:0F:F3:AF:4A:EE:74:E3:E3:2C:D1:A8
SHA256: 43:49:C2:D8:83:85:9B:FB:86:6D:CA:D5:38:DE:5B:57:7D:6D:E0:21:91:0C:EC:B5:4B:46:02:44:D8:71:C8:AE
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 11 BA C7 0B 4B 0E B2 E3 37 94 41 1C D7 DA 26 EC ....K...7.A...&.
0010: B3 E1 B1 46 ...F
]
]



*******************************************
*******************************************



Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore D:/Workplace/Dart/flutter_gylibrary/android/gylibrary.jks -destkeystore D:/Workplace/Dart/flutter_gylibrary/android/gylibrary.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

Android配置

在Android更目录下的app中的build.gradle配置

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
android {
compileSdkVersion 27

lintOptions {
disable 'InvalidPackage'
}

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.xyxj.gylibrary"
minSdkVersion 16
targetSdkVersion 27
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
abiFilters "armeabi-v7a", "armeabi", "arm64-v8a"
}
}

signingConfigs {
debug {
keyAlias 'gylibrary'
keyPassword '123456'
storePassword '123456'
storeFile file('../gylibrary.jks')
}

release {
keyAlias 'gylibrary'
keyPassword '123456'
storePassword '123456'
storeFile file('../gylibrary.jks')
}
}

buildTypes {
debug {
debuggable true
minifyEnabled false
shrinkResources false
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}
release {
debuggable false
minifyEnabled false
zipAlignEnabled true
shrinkResources false
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

PS

flutter打包命令

1
flutter build apk --release

Donate comment here