做系统应用开发的时候,往往将应用的sharedUserId 声明成android.uid.system 来将其作为系统应用。这时侯就需要系统签名文件给应用签名,才能安装到设备上。
将应用签名改成系统签名的方式有两种:
- 1. 使用signapk.jar修改应用应用签名问系统签名
- 2. 将plateform.pk8和plateform.x509.pem 文件装成AS 直接使用的jks签名文件
plateform.pk8与plateform.x509.pem转成jks 文件
将plateform.pk8 与plateform.x509.pem 转成jks 文件需要openssl 工具。openssl Window 版本可以在http://slproweb.com/products/Win32OpenSSL.html下载
转换步骤:
- 1、openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt 将pk8 转成pem 格式文件
- 2、openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name {{KEY_ALIAS}} 生成pk12 文件
- 3、keytool -importkeystore -destkeystore {{STORE_FILE_NAME}}.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass {{KEY_PASSWORD}} -alias {{KEY_ALIAS}} 使用pk12文件输出jks 签名文件
示例:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name android
执行生成pk12 文件时,需要设置alias 别名为android 密码
keytool -importkeystore -destkeystore test.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass 111111 -alias android
这一步先需要在生成pk12 文件时设置的别名密码。
生成jks 文件时会检测文件是否存在:
- 如果设置的jks文件存在,会检测输入的密码是否正确
- 如果jks 文件不存在,生成jks 文件
keytool -list -v -keystore test.jks 查看签名文件指纹信息
参考: https://stackoverflow.com/questions/39657812/how-to-import-x509-pem-pk8-file-into-jks-keystore
番外:使用signapk.jar 修改应用签名系统签名
准备工作
- signapk.jar 路径 prebuild/sdk/tools/lib 目录下
- plateform.pk8与plateform.x509.pem 路径 build/target/product/security
- 将需要签名的apk文件解压,将其中MATE-INF下面的CERT.RSA 与CERT.SF文件删除。重新将文件压缩,并重命名为apk文件
上面的准备工作准备完成后执行
java -jar signapk.jar platform.x509.pem platform.pk8 {{input.apk}} {{output.apk}}
input.apk 需要被签名的apk文件
output.apk 已经签名成系统签名的apk