如何手动对apk进行签名?

如下情况会需要手动签名:
 
1.像Phone/Contacts/Dialer/SystemUI 等apk,在其package下面的Android.mk文件中,都有写明LOCAL_CERTIFICATE=platform或者shared的属性,测试过程中有时需做对比验证,但这些Android prebuilt apk是无法从一台手机里pull出来再直接push到手机运行的,需要用自己手机软件对应的key进行签名之后,才可以正常运行。
 

2.来自客户的demo apk或3rd apk带有platform或shared签名时,无法直接安装运行。

[SOLUTION]
platform和shared对应签名文件的key都放在alps/build/target/product/security/common下,签名工具signapk.jar位于/out/host/linux-x86/framework下,由alps/build/tools/signapk/生成。
 
使用方法:
1.明确待签名的apk所使用的签名类型
 =>如果是Android prebuild apk,则直接查看package下面的Android.mk文件的LOCAL_CERTIFICATE栏位值是shared还是platform;
 
=>如果是来自客户的demo apk或3rd apk,则可直接向客户询问签名类型或者用Google提供的apktool反编译出apk的AndroidManifest.xml文件,查看其android:sharedUserId属性的值,是"android.uid.shared"(对应shared签名)还是"android.uid.system"(对应platform签名)
 apktool链接:http://ibotpeaches.github.io/Apktool/
 
 
2.明确待签名的apk需要安装到的手机所对应Android软件版本,如Android 4.4或Android5.0等版本
号,无需详细到手机软件具体的version版本号,只需大的Android软件版本号对应即可
 
3.参考上面签名文件和签名工具在android代码中的存放路径,将对应软件版本的签名文件和签名工
具拷贝到PC或Linux系统某个目录下,与待签名的apk放在同一目录下
 
4.在待签名apk所在目录下执行签名命令java -jar signapk.jar xxx xxx name.apk
name_after_signatured.apk.其中xxx xxx分别是签名文件,name是apk的名字
 
使用方法举例:
 例如:在Android5.0版本上,用platform.x509.pem和platform.pk8来签名Settings.apk,重新签名
之后的apk名字为Settings_1.apk,那么将随意一份Android 5.0 软件代码中的signapk.jar和
platform.x509.pem和platform.pk8等文件拷贝到PC,放在自己指定的路径下,如C盘或桌面,然后
打开PC端cmd命令窗口或linux terminal窗口(确保你的环境有装java),cd到该路径下,执行下面的
命令:
 java -jar signapk.jar platform.x509.pem platform.pk8 Contacts.apk Contacts_1.apk
 例如:用shared.x509.pem和shared.pk8来签名Contacts.apk,重新签名之后的apk名字为
Contacts_2.apk
 java -jar signapk.jar shared.x509.pem shared.pk8 Contacts.apk Contacts_2.apk
 可以使用上述方法,对手头需要验证测试的系统apk做签名后,再push到手机就可以正常运行了。

你可能感兴趣的:(android)