[转]重新签名Android pre-install APK
本文轉自:http://www.cnblogs.com/whuiscool/archive/2010/11/24/1886476.html
?
題外話:
? 最近在研究Android APK的自動化測試方法,期間遇到了APK簽名問題, 尤其是Android系統pre-install的應用,它們的簽名方式比較特殊,后面會說到,于是在Eclipse里寫好的測試代碼就會由于權限問題,無法測試這些應用。折騰了好幾天,頭疼。好在最后還是搞定了,于是乎就想在這里分享一下我的一點經驗,有感興趣的、或者有類似問題的朋友們,希望能夠給你們一點幫助。
?
什么是pre-installapk:
? 就是Android系統預裝的一些應用,例如Messaging、Contacts、Calendar等等。
?
pre-install apk的簽名方式:
? 給apk簽名的一般方法有兩種,一種是在Eclipse里使用“Android Tools -> Export SignedApplication Package…”這種方式簽名;另一種是用命令行簽名。這里就不詳細描述了。
? 而pre-install apk的簽名比較特殊,使用源碼中的默認簽名。可以查看Android的源代碼得知。
$ signapkpublickey.x509[.pem] privatekey.pk8 input.jar output.jar
其中,*.x509.pem為x509格式公鑰,pk8為私鑰。
?
pre-install apk的簽名方法:
?
特別注意:?
?
總結:
? 本文介紹的方法,除了對Android系統pre-install的應用有效,同時對一般簽名的應用apk也有效(至少我拿我們公司編寫的一些apk應用沒問題)
?
心得體會:
一開始,我試圖找到使用源碼簽名和上述兩種方法的互換方式。但是研究了很久,好像沒辦法互換。再后來,看到一篇資料,介紹了對已簽名的apk重新簽名的方法(注一)。于是在Window環境下試著做。前三步都沒問題,可是到了第四步就進行不下去了。就這樣被卡了三天時間。這三天里,每天上班都滿懷希望的帶著各種嘗試方案,但是每天下班都無奈悻悻的回家。現在回頭想想,凡事就是這樣,你做成了一件事后感覺很簡單,但回頭看看其中的艱辛探索之路是旁人無法體會的。這期間,找到了一個資料,一個自動解包打包的Shell腳本,由于在Window環境下無法執行,也一直沒有嘗試。到了第四天,萬念俱灰的時候,抱著試一試的態度,進行了最后的嘗試。難道凡事也必在走投無路準備放棄的時候,突然一線轉機?!在一系列的搭建環境操作之后,包括安裝虛擬機,安裝linux系統,配置Android開發環境,配置java環境變量,修改、運行腳本,輸入必要的參數,終于。。。。。。OK了!拿到Window下,搗鼓到Android虛擬機里,運行測試代碼,哈哈,跑起來了!
?
注一:
‐‐Un-zip the apk file
‐‐Delete the META--‐INF folder
‐‐Re‐zip the apkfile
‐‐In Dos prompt /Command prompt
>jarsigner -keystore~/.android/debug.keystore -storepass android -keypass android ApplicationToTest.apkandroiddebugkey
> zipalign 4 ApplicationToTest.apkTempApplicationToTest.apk
?
注二:
?
view sourceprint?| 01 | #!/bin/bash |
| 02 | set -e |
| 03 | ORIGINAL_APK="$(readlink --canonicalize $1)" |
| 04 | CLEAN_SIGNED_APK="$(mktemp -t robotium.clean.apk.XXXXXXXXXXXXXX)" |
| 05 | UNPACK_DIRECTORY="$(mktemp --directory -t robotium.unpack.XXXXXXXXXXXXXX)" |
| 06 | ZIPALIGNED_APK="$(readlink --canonicalize $2)" |
| 07 | PWD="$(pwd)" |
| 08 | if [ -e "$ORIGINAL_APK" ]; then |
| 09 | ????if [ "$2" == "" ]; then |
| 10 | ????????echo "Second argument must be the output filename for the signed apk." |
| 11 | ????????exit 2 |
| 12 | ????fi |
| 13 | ????rm "$CLEAN_SIGNED_APK" 2>/dev/null || true |
| 14 | ????rm "$ZIPALIGNED_APK" 2>/dev/null || true |
| 15 | ????cd "$UNPACK_DIRECTORY" |
| 16 | ????jar xf "$ORIGINAL_APK" |
| 17 | ????rm META-INF/CERT.* |
| 18 | ????jar cf "$CLEAN_SIGNED_APK" . |
| 19 | ????jarsigner -keystore 這里是你的debug.keystore存放路徑 -storepass android -keypass android "$CLEAN_SIGNED_APK" androiddebugkey |
| 20 | ????zipalign 4 "$CLEAN_SIGNED_APK" "$ZIPALIGNED_APK" |
| 21 | else |
| 22 | ????echo "First argument must be an apk file." |
| 23 | ????exit 1 |
| 24 | fi |
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的[转]重新签名Android pre-install APK的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AT89C51 单片机在电话远程控制器中
- 下一篇: Vs2008 开发Wap 网站