综述:
根据项目的需求,需要给我们开发的app添加上系统签名。首先声明由于Android系统的碎片化,各个厂商的签名不尽一致,我所做的是给我们客户定制的Android系统或者Genymotion模拟器上的app进行签名。
本文只是各位小伙伴一个尽可能简单的描述,原文已经找不见了 =。= 只能靠自己的记忆,简单的总结一下
问题描述:
在开发系统应用的时候,需要给我们的开发的app添加上系统签名。
执行命令:
方法一:Java com.Android.signapk.SignApk platform.x509.pem platform.pk8 input.apk output.apk
方法二:Java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk
命令描述:
方法一需要两个密钥文件,和使用Android几个G的全量的代码编译出SignApk,再做操作,如果你有你想用的系统的全量代码,切不在乎Android系统编译的几个小时,可以采用这种方法。
方法二需要两个密钥文件,和对应系统的signapk.jar文件。signapk.jar如果是Genymotion的模拟器,可以直接在网上下载,如果是定制的系统,则需要自己编译。
材料准备:
- 在
<Android_Source_Path>/build/target/product/security
目录下找到platform.pk8
和platform.x509.pem
。模拟器的可以去这里下载对应版本的密钥。 - 在Android系统的编译目录
<Android_Source_Path>/build/tools/signapk
找到signapk.apk
或者在out/host/Linux-x86/framework/signapk.jar
找到signapk.jar
,或者在这里下载,已测试在5.1系统上可用。 - 然后根据你的材料执行上述方法一或者方法二即可。
PS:
印象中,原文作者有提到platform.pk8
和platform.x509.pem
两个密钥在命令中的顺序不可变。
关于android:sharedUserId="android.uid.system"
要不要添加,我也不太确定。我记得之前看大牛博客,有提到如果不添加会报错,但是我有一次忘记了加,也没有出现任何错误。个人建议,还是加上,毕竟你做的是系统应用,放到系统进程还是比较好一点。