给第三⽅apk进⾏系统签名的⼏种⽅式【转】
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
----------------------------------------------------------------------------
----------------------------------------------------------------------------
注:本⽂假设你已经拥有Android系统源码,且对Android源码有⼀定认识。
⼯作中有时会遇到⼀些apk签名不同,导致⽆法安装的问题。
场景⼀:
有⼀个第三⽅apk(具有系统权限),⽆法安装在我们⾃⼰的Android机器上,提⽰以下错误,导致⽆法安装。
这是由于该APK具有系统权限,⽽系统签名与我们的Android设备系统签名不⼀致。Android检测到系统签名不⼀致,由于安全因素考虑,就阻⽌安装了。
解决⽅法:使⽤⾃⼰的Android签名⼯具给apk重新签名。android获取真正的签名
(1) Android的签名⽂件存放于系统源码的 build/target/product/security/⽬录下
该⽬录下有 media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8、testkey.x509.pem等签名⽂件,不同的签名⽂件,对应不同的权限。Android默认的签名⽂件为testkey.pk8、testkey.x509.pem。
(2) Android⾃带的签名⼯具为 signapk.jar,可以在源码编译⽬录out中到,具体路径为:out/host/linux-x86/framework/signapk.jar    以上APK具有系统权限,重新签名应该使⽤platform签名⽂件进⾏签名。
签名⽅法:将对应权限的签名⽂件platform.pk8、platform.x509.pem,签名⼯具 signapk.jar,以及需要签名的apk(假设 old.apk)放到同⼀⽬录下,打开linux终端(windows cmd也可以),进⼊该⽬录,进⾏重新签名:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
重新⽣成的new.apk就可以安装在我们的Android设备上了。
场景⼆:具有apk源码,同样是具备系统权限的,当我们将apk源码导⼊Eclipse中,使⽤ Run as --> Android application 编译安装APK时, Eclise同样会提⽰场景⼀的错误信息,原因也是⼀样。我们同样
可以将Eclipse⽣成的apk按照场景⼀的⽅法进⾏重新签名,再安装到我们的设备上。但是,有时可能我们会经常修改apk源码进⾏调试验证,如果每次都把apk拿出来进⾏重新签名,再安装,这样确实⿇烦了⼀些。Eclipse是⽀持使⽤⾃⼰的系统签名⼯具进⾏APK打包签名的。使⽤这种⽅法,可以快速⽽⽅便地对APK进⾏系统签名,并将其安装到我们的Android设备上。下⾯说⼀下具体做法:
步骤⼀:同样取源码⽬录build\target\product\security ⽬录下的platform.pk8 platform.x509.pem放到某⼀个⽬录下
步骤⼆:进⼊该⽬录,⽣成shared.priv.pem
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
步骤三:⽣成pkcs12
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
Enter Export Password:
Verifying - Enter Export Password:
这⾥会提⽰输⼊密码,默认密码是android,如是⾃⼰制作的key,输⼊对应的密码。
步骤四:⽣成debug.keystore,Eclipse需要使⽤该keystore.
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
步骤五:在Eclipse的  Windows/Preferences/Android/Build 中设置"Custom debug keystore"为刚才步骤四⽣成的debug.keystore即可直接run安装调试apk.这样的话,就可以不⽤再去⽤signapk.jar,如java -jar signapk.jar platform.x509.pem platform.pk8 *.apk **.apk进⾏签名了。
注:场景⼆其实也可以直接将APK源码放在Android系统源码的环境下⽤make来编译,需要编写Android.mk,加⼊LOCAL_CERTIFICATE := platform,
可以直接使⽤mm编译apk, 编译出来的APK同样可以顺利安装在我们⾃⼰的Android设备上。
⼀个简单的Android.mk(APK源码只包含java⽂件,不含JNI代码)⽂件可以参考以下写法,其中 XXX 修改为你的apk名字。
进⼊该源码⽬录,执⾏mm命令,即可在out/target/product/$PRODUCT_NAME/system/app⽬录下⽣成 xxx.apk

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。