這幾日研究了下二次打包,最后的時(shí)候需要對apk進(jìn)行簽名替換滔驾,二次簽名谒麦,然后才能重新安裝。第一次接觸哆致,感覺有點(diǎn)雜绕德,所以寫篇文章捋一下過程,方便理解摊阀。關(guān)于二次打包的實(shí)踐耻蛇,可參考:http://www.reibang.com/p/6bcc42542997
話不多說踪蹬,直接看我們二次簽名的整體流程步驟,本次實(shí)踐還是以二次打包時(shí)的某應(yīng)用為例:
一臣咖、前提準(zhǔn)備
- 1.首先到應(yīng)用市場下載某應(yīng)用的官方apk文件到電腦
- 2.使用JDK自帶的apktool工具生成自己的簽名文件demo.keystore
keytool -genkey -alias androidauto.keystore -keyalg RSA -validity 20000 -keystore android.keystore
二跃捣、具體實(shí)踐步驟
-
1.將下載的某應(yīng)用的apk文件格式進(jìn)行修改為.zip后綴,并進(jìn)行解壓夺蛇,查看目錄疚漆,將其中的META-INF目錄刪除。解釋:META-INF目錄中xx.RSA,xx.SF和MANIFEST.MF三個(gè)文件刁赦,這三個(gè)文件中存放的就是一些關(guān)于簽名的信息娶聘。
- 2.后退工作目錄,將修改過后的解壓目錄重新進(jìn)行壓縮生成新的.zip包文件甚脉,然后修改后綴名為.apk文件丸升。
- 3.使用之前生成好的demo.keystore文件對新的zip包進(jìn)行簽名,具體如下:
jarsigner -keystore demo.keystore -storepass password -signedjar demo.apk demo_signed.apk demo.keystore
有一個(gè)問題牺氨,如果是使用的jdk1.7版本的話狡耻,中間簽名過程可能會因報(bào)一個(gè)警告而失敗,警告信息如下:
當(dāng)初樓主遇到該問題時(shí)還小曲折了一下波闹,將英文警告信息進(jìn)行g(shù)oogle酝豪,只說時(shí)jdk1.7版本會有警告,具體如何解決沒找到精堕。最后是翻譯了之后在csdn上找到的解決方案孵淘,鏈接:http://blog.csdn.net/changcsw/article/details/45643607
修改后的命令如下:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore demo.keystore -storepass password -signedjar demo.apk demo_signed.apk demo.keystore
使用如上命令警告信息問題解決。然后不出意外歹篓,簽名就能成功瘫证,生成經(jīng)過自己二次簽名的新簽名包。
- 4.接下來就是安裝驗(yàn)證庄撮。正確的驗(yàn)證方式是先確保相同包名的應(yīng)用已卸載背捌,然后再安裝,最后安裝官方簽名的發(fā)現(xiàn)簽名沖突洞斯,安裝失敗毡庆,達(dá)到驗(yàn)證效果。即:
//先卸載原來安裝的包
adb uninstall packageName
//安裝使用自己簽名文件簽名的包
adb install packageName
//最后安裝官方簽名包 安裝失敗 驗(yàn)證成功
三烙如、安裝驗(yàn)證的過程可能會出現(xiàn)的問題
- 1.INSTALL_FAILED_INVALID_APK 出現(xiàn)這個(gè)錯(cuò)誤多半是簽名包沒有簽名成功么抗;回去仔細(xì)檢查下簽名過程。
- 2.INSTALL_FAILED_UPDATE_INCOMPATIBLE 出現(xiàn)這個(gè)問題很可能是系統(tǒng)中同包名的應(yīng)用還沒有卸載所導(dǎo)致的亚铁。當(dāng)處我測試實(shí)踐的時(shí)候蝇刀,我自己手動(dòng)刪除/data/data目錄下的包,/data/local/tmp下的包刪掉徘溢,修改了packages.xml文件吞琐。安裝還是報(bào)這個(gè)錯(cuò)誤捆探。最后還是先試用了adb uninstall 命令進(jìn)行卸載,然后重新安裝才成功站粟。
我在測試驗(yàn)證的時(shí)候就遇到了這兩個(gè)問題黍图,如果有其他問題,歡迎大家繼續(xù)補(bǔ)充提出卒蘸,一起討論學(xué)習(xí)進(jìn)步雌隅。