Android的反编译,一般需要用到apktool,这里记录下当用到apktool时,基本的用法
Apktool反编译和回编为apk,主要是apktool.jar出力,在mac或linux上一般会有个apktool,来执行apktool.jar。如果没有的话,把如下代码保存为apktool即可
1 |
|
反编译apk
常用命令行为:
1 | $ apktool d app-release.apk |
它的其他语法还有:
1 | $ apktool d foo.jar |
回编译为apk
常用语法为:
1 | apktool b app-release/ -o app-release_unsigned.apk |
它的其他语法还有:
1 | $ apktool b foo.jar.out |
Frameworks
当回编译为apk时,可能会有找不到资源的问题,例如:
1 | /app-release/res/layout-v26/abc_screen_toolbar.xml:5: error: No resource identifier found for attribute 'keyboardNavigationCluster' in package 'android' |
当出现如上问题时,应该为framework-res.apk过期了,换句话说,是这个apk有点老了。
framework-res.apk
可以从最新版本的手机或模拟器中拿到。具体位置在:/system/framework/framework-res.apk
可以通过adb命令取出:
1 | adb pull /system/framework/framework-res.apk |
在得到framework-res.apk后,即可安装到电脑中。
一般为(其中: if 为 install-framework的缩写):
1 | sudo apktool if framework-res.apk |
安装后,即不再报上面找不到资源的问题了。
签名
千万不要忘记最后一步,签名。
如果不签名的话,是安装不到手机的,会报未签名错误,自己签名后即可啦。
如下命令为签名:相关参数自己修改
1 | jarsigner -verbose -keystore /opt/workspace/testkeystore -signedjar app-release_signed.apk app-release_unsigned.apk testkeystore |