給第三方apk進行系統簽名的幾種方式【轉】

本文轉載自:http://blog.csdn.net/luzhenrong45/article/details/47733053html

 

----------------------------------------------------------------------------linux

 

此文章僅做爲學習交流所用
轉載或引用請務必註明原文地址:
http://blog.csdn.net/luzhenrong45/article/details/47733053
或聯繫做者:luzhenrong45@gmail.com
謝謝!   android

 

 

----------------------------------------------------------------------------windows

 

注:本文假設你已經擁有Android系統源碼,且對Android源碼有必定認識。安全

 

工做中有時會遇到一些apk簽名不一樣,致使沒法安裝的問題。
    場景一:app

    有一個第三方apk(具備系統權限),沒法安裝在咱們本身的Android機器上,提示如下錯誤,致使沒法安裝。工具

    

 

    這是因爲該APK具備系統權限,而系統簽名與咱們的Android設備系統簽名不一致。Android檢測到系統簽名不一致,因爲安全因素考慮,就阻止安裝了。   學習

    解決方法:使用本身的Android簽名工具給apk從新簽名。ui

    (1) Android的簽名文件存放於系統源碼的 build/target/product/security/目錄下

    
    該目錄下有 media.pk八、media.x509.pem、platform.pk八、platform.x509.pem、shared.pk八、shared.x509.pem、testkey.pk八、testkey.x509.pem等簽名文件,不一樣的簽名文件,對應不一樣的權限。Android默認的簽名文件爲testkey.pk八、testkey.x509.pem。

    (2) Android自帶的簽名工具爲 signapk.jar, 能夠在源碼編譯目錄out中找到,具體路徑爲:out/host/linux-x86/framework/signapk.jar    以上APK具備系統權限,從新簽名應該使用platform簽名文件進行簽名。

    簽名方法:將對應權限的簽名文件platform.pk八、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

相關文章
相關標籤/搜索