遭遇INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION

近期分析一个app,需要patch掉.so中的反调试功能。具体分析后,将bne(机器码是D1)指令改成beq(机器码是D0),然后用APK上上签给apk签名。安装时出现了错误:INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION

之前用APK上上签从未出现过问题。打开DDMS,发现消息提示指向签名未通过验证,只好以手工输入指令的方式对apk签名。

1、用JDK中的标准工具keytool生成私钥

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

上述示例将提示输入密钥库和密钥的密码,为密钥提供DN。然后,它会将密钥库生成为名为my-key.keystore的文件,别名为my_alias。密钥库包含一个密钥,有效期为10000天,别名将在给apk签名时使用到。

2、apksigner用私钥给apk签名,此时需要输入密钥的密码。

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

3、验证apk是否已签名

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

4、使用zipalign对齐apk

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

zipalign 确保所有未压缩的数据以相对于文件开头的特定字节对齐方式开始,从而减少应用程序消耗的 RAM 量。

5、此时安装apk就不会出现INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION错误了。

:keytool是jdk的标准工具,一般存放在JDK安装路径的bin目录下。apksigner、zipalign是安卓SDK的工具,存放在SDK的build-tools目录下。

你可能感兴趣的:(遭遇INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION)