如何生成apk的签名key文件

1
2
3
4
5
6
7
# 建key方法:
sub='/C=CN/ST=ShangHai/L=ShangHai/O=example/OU=CM/CN=example/emailAddress=test@example.com'
for key in platform shared media testkey;do
./development/tools/make_key $key "$sub"
done


怎么给某个apk重签名

命令如下:

1
java -Xmx2048m -jar signapk.jar xxx.x509.pem  xxx.pk8 unsigned.apk signed.apk

pem和pk8文件 ,对于是userdebug、eng 这些使用的 是代码里面的key文件。可以在build/target/product/security这个路径下面得到。

如何获取签名key的sha1值

解压apk文件得到RSA文件

APK以zip文件方式打开,在\META-INF\目录中存在一个.RSA后缀的文件,一般名为CERT.RSA

使用keytool命令获取证书信息(包括MD5)

运行如下keytool命令即可: keytool -printcert -file CERT.RSA

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
keytool -printcert -file CERT.RSA

Owner: EMAILADDRESS=test@example.com, CN=example, OU=CM, O=example, L=ShangHai, ST=ShangHai, C=CN
Issuer: EMAILADDRESS=test@example.com, CN=example, OU=CM, O=example, L=ShangHai, ST=ShangHai, C=CN
Serial number: f03839c4296d10e2
Valid from: Tue Nov 22 14:21:36 CST 2016 until: Sat Apr 09 14:21:36 CST 2044
Certificate fingerprints:
MD5: B5:A2:01:A5:8D:54:CF:BE:ED:85:20:B6:5D:81:37:B0
SHA1: 44:1C:6D:43:17:06:FC:95:17:6E:B8:39:CF:A7:B7:E7:5E:C4:C1:AC
SHA256: 97:12:E0:92:B0:23:CE:F9:82:E4:92:EA:08:E8:7E:42:D0:90:75:D4:B1:34:FD:41:A3:63:03:DA:AE:EB:74:DA
Signature algorithm name: SHA1withRSA
Version: 3

Extensions:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 08 79 56 A2 9D B2 49 28 36 01 47 E5 1C 6C 3F 9E .yV...I(6.G..l?.
0010: 12 40 9B 38 .@.8
]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 08 79 56 A2 9D B2 49 28 36 01 47 E5 1C 6C 3F 9E .yV...I(6.G..l?.
0010: 12 40 9B 38 .@.8
]
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
openssl x509 -noout -fingerprint -sha1 -inform pem -in releasekey.x509.pem

skywalker_key/media.x509.pem
SHA1 Fingerprint=CA:F2:2F:6D:6D:73:78:88:79:73:53:AC:C7:09:A5:52:2A:E8:72:BB
skywalker_key/platform.x509.pem
SHA1 Fingerprint=10:DA:2B:17:F2:24:11:73:0D:81:8D:30:CC:6B:FA:84:91:14:C5:02

skywalker_key/releasekey.x509.pem
SHA1 Fingerprint=02:E5:16:F0:4C:23:44:48:69:7C:CE:FE:E9:DE:56:B5:52:22:05:FD

skywalker_key/shared.x509.pem
SHA1 Fingerprint=6F:BA:6E:57:7A:6B:27:A7:44:FD:52:6A:49:3B:8F:53:DB:89:3E:C2
skywalker_key/testkey.x509.pem
SHA1 Fingerprint=63:DA:82:5E:54:1D:82:ED:6D:68:7F:64:66:33:C8:A6:48:15:13:6C


你们可以自己解压 ota包的./META-INF/com/android/otacert文件出来 验证看看.
执行命令 keytool --printcert -file ./META-INF/com/android/otacert |grep SHA1

怎么制作ota差分包

ota全包升级方法:

把全包ota的zip文件 adb push 到手机的/sdcard/ 下面 然后改名为update.zip. adb reboot recovery,手机会进入到一个界面,点击升级按钮就可以了。

怎么做差分包

基本命令如下:

1
python Bins/releasetools/ota_from_target_files -v -p Bins/linux-x86 -k  releasekey -i old.zip new.zip  update.zip

-p Bins/linux-x86 这里的-p参数指定了一下imgdiff,bsdiff 工具的路径的,这个没有的话在做差分包时候会报错的。

制作差分包需要很多工具和so文件,这些都可以在android源码编译环境下面获取到,一般在out 下 host 下面有。linux系统就选择 linux-x86那个目录。

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

# 这个是和制作ota差分包相关的一些文件,没有这些文件是无法成功做差分包的

src:build/tools/releasetools/blockimgdiff.py:
src:build/tools/releasetools/build_image.py:
src:build/tools/releasetools/rangelib.py:
src:build/tools/releasetools/sparse_img.py:
src:build/tools/releasetools/ota_from_target_files:
src:build/tools/releasetools/add_img_to_target_files.py:
src:build/tools/releasetools/edify_generator.py:
src:build/tools/releasetools/common.py:
out:../../../host/linux-x86/bin/bsdiff:
out:../../../host/linux-x86/bin/imgdiff:
out:../../../host/linux-x86/bin/simg2img:
out:../../../host/linux-x86/bin/make_ext4fs:
out:../../../host/linux-x86/bin/mkuserimg.sh:
out:../../../host/linux-x86/bin/e2fsck:
out:../../../host/linux-x86/bin/brillo_update_payload:
out:../../../host/linux-x86/bin/delta_generator:
out:../../../host/linux-x86/bin/lib/shflags/shflags:
out:../../../host/linux-x86/framework/signapk.jar:
out:../../../host/linux-x86/lib64/libc++.so:
out:../../../host/linux-x86/lib64/libconscrypt_openjdk_jni.so:
out:../../../host/linux-x86/lib64/libdivsufsort64.so:
out:../../../host/linux-x86/lib64/libdivsufsort.so:
out:../../../host/linux-x86/lib64/libcutils.so:
out:../../../host/linux-x86/lib64/libselinux.so:
out:../../../host/linux-x86/lib64/liblog.so:
out:../../../host/linux-x86/lib64/libext2fs-host.so:
out:../../../host/linux-x86/lib64/libext2_blkid-host.so:
out:../../../host/linux-x86/lib64/libext2_uuid-host.so:
out:../../../host/linux-x86/lib64/libext2_profile-host.so:
out:../../../host/linux-x86/lib64/libext2_quota-host.so:
out:../../../host/linux-x86/lib64/libext2_com_err-host.so:
out:../../../host/linux-x86/lib64/libext2_e2p-host.so:
out:../../../host/linux-x86/lib64/libbase.so:
out:../../../host/linux-x86/lib64/libbrillo.so:
out:../../../host/linux-x86/lib64/libbrillo-stream.so:
out:../../../host/linux-x86/lib64/libchrome.so:
out:../../../host/linux-x86/lib64/libcrypto-host.so:
out:../../../host/linux-x86/lib64/libevent-host.so:
out:../../../host/linux-x86/lib64/libprotobuf-cpp-lite.so:
out:../../../host/linux-x86/lib64/libselinux.so:
out:../../../host/linux-x86/lib64/libsparse-host.so:
out:../../../host/linux-x86/lib64/libssl-host.so:
out:../../../host/linux-x86/lib64/libz-host.so: