遭遇INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION

近期分析一個(gè)app,需要patch掉.so中的反調(diào)試功能。具體分析后,將bne(機(jī)器碼是D1)指令改成beq(機(jī)器碼是D0),然后用APK上上簽給apk簽名。安裝時(shí)出現(xiàn)了錯(cuò)誤:INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION

之前用APK上上簽從未出現(xiàn)過問題。打開DDMS,發(fā)現(xiàn)消息提示指向簽名未通過驗(yàn)證,只好以手工輸入指令的方式對apk簽名。

1、用JDK中的標(biāo)準(zhǔn)工具keytool生成私鑰

keytool.exe-genkey -v -keystore my-key.keystore -alias my_alias -keyalg RSA -keysize 2048-validity 10000

上述示例將提示輸入密鑰庫和密鑰的密碼,為密鑰提供DN。然后,它會(huì)將密鑰庫生成為名為my-key.keystore的文件,別名為my_alias。密鑰庫包含一個(gè)密鑰,有效期為10000天,別名將在給apk簽名時(shí)使用到。

2、apksigner用私鑰給apk簽名,此時(shí)需要輸入密鑰的密碼。

apksignersign --ks my-key.keystore --ks-key-alias my_alias --in catchme.apk --outcatchme-signed.apk

3、驗(yàn)證apk是否已簽名

apksignerverify -v --print-certs catchme-signed.apk

4、使用zipalign對齊apk

zipalign.exe-v 4 catchme-signed.apk catchme-aligned.apk

zipalign 確保所有未壓縮的數(shù)據(jù)以相對于文件開頭的特定字節(jié)對齊方式開始,從而減少應(yīng)用程序消耗的 RAM 量。

5、此時(shí)安裝apk就不會(huì)出現(xiàn)INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION錯(cuò)誤了。

:keytool是jdk的標(biāo)準(zhǔn)工具,一般存放在JDK安裝路徑的bin目錄下。apksigner、zipalign是安卓SDK的工具,存放在SDK的build-tools目錄下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容