1. 安卓应用签名

1.1. 生成密钥

生成密钥需要使用Ubuntu18.04系统,高版本Ubuntu可能openssl版本过高导致生成密钥失败。

1.1.1. 获取平台密钥对

在SDK源码/build/make/target/product/security目录中取2个文件:platform.pk8、platform.x509.pem

  • platform.pk8 私钥文件,用于对应用进行数字签名的核心密钥,签名过程中会用私钥加密应用的哈希值,生成签名信息。

  • platform.x509.pem 公钥证书,包含公钥和证书颁发信息,用于验证应用签名的合法性,系统通过此文件确认应用是否由平台密钥签名。

1.1.2. 生成platform.jks

将platform.pk8、platform.x509.pem存放到同一个目录,然后执行以下命令生成platform.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
#将私钥转换为PEM文本格式
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
#将私钥和公钥证书合并为PKCS#12格式,需指定别名和密码
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:密码 -name 别名名称
#将PKCS#12转换为JKS格式,需指定密码,适配Android Studio等开发工具
keytool -importkeystore -deststorepass 密码 -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 密码

#列如要形成密码和别名:
keyPassword = "temppwd"
keyAlias = "embedfire"
storePassword = "temppwd"

#以上密码和包名对应以下命令
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:temppwd -name embedfire
keytool -importkeystore -deststorepass temppwd -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass temppwd



#生成成功信息输出如下
guest@dev107:~/build$ openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
guest@dev107:~/build$ openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:temppwd -name embedfire
guest@dev107:~/build$ keytool -importkeystore -deststorepass temppwd -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass temppwd
Importing keystore ./platform.p12 to ./platform.jks...
Entry for alias embedfire successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled
guest@dev107:~/build$ ls
platform.jks  platform.p12  platform.pem  platform.pk8  platform.x509.pem

生成的platform.jks就是Android Studio签名需要的文件。

1.2. 应用签名

Android Studio打开自己的应用,在头顶工具栏选择“Build”,在子菜单选择“Generate Signed App Bundle or APK”。

../../_images/app_signature_0.jpg

然后选择“APK”选项,再点击“Next”。

../../_images/app_signature_1.jpg

点击“Choose existing…”选择生成的platform.jks文件,然后填写别名和密码,最后点击“Next”。

../../_images/app_signature_2.jpg

点击“release”选项再点击“Create”构建release版本的apk。

../../_images/app_signature_3.jpg

构建成功后Android Studio会提示生成签名后的apk文件构建成功。

../../_images/app_signature_4.jpg

在自己应用源码/app/release目录下可以找到app-release.apk文件,该文件就是构建生成的签名后的apk文件。

../../_images/app_signature_5.jpg

可以通过adb install安装到板卡。