一.生成keystore文件
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
# -genkey : 产生密钥
# -alias : 别名
# -keyalg : 使用RSA算法对签名加密
# -validity : 有效期(天)
# -keystore : 最后生成的keysotre
二.签名
1.使用jarsigner签名,工具位于jdk_xx\bin目录下
jarsigner -verbose -keystore android.keystore -signedjar des.apk src.apk android.keystore
# des.apk : 签名后的apk
# src.apk : 签名前的apk
2.使用signapk签名,工具位于 Android源码下./prebuilts/sdk/tools/lib/signapk.jar
a.先把keysotre转换为 pkcs12 格式
keytool -importkeystore -srckeystore android.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
生成 tmp.p12
b.将pkcs12 dump 成 pem, 以文本形式查看
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem 生成 tmp.ras.pem 以文本形式打开
复制 “BEGIN CERTIFICATE“ ”END CERTIFICATE“ 到 (新建个文件) cert.x509.pem
复制 “BEGIN RAS PRIVATE KEY" "END RSA PRIVATE KEY" 到 (新建个文件) private.rsa.pem
c.生成 pk8 格式的私钥
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt 生成private.pk8
cert.x509.pem 与 private.pk8 是最终签名所需要的
d.签名
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk
java -Djava.library.path=out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar build/make/target/product/security/platform.x509.pem build/make/target/product/security/platform.px8 unsigned.apk signed.apk
# signapk.jar 要使用 out/host/linux-x86/framework/ 下的,而不要用 prebuilts/sdk/tools/lib/ 下的
3.优化 apk Android工程 ./prebuilts/sdk/tools/linux/bin/zipalign
zipalign -v 4 signed.apk new.apk # 优化 APK
zipalign -c -v 4 app.apk # 查循 APK 是否优化过
AndroidStudio生成的 apk 默认都是已经签名的
# 查看签名信息
keytool -list -keystore demo.keystore -alias mykey -v # 查看 keystore 的信息
keytool -list -keystore demo.keystore -alias mykey -rfc # 查看 keystore 的公钥证书信息
jarsigner -verify -verbose -certs test.apk # 查看 test.apk 的签名信息