反编译 APK
# d: decode 反编译,-o: output 输出路径
# 两个路径分别是待反编译的 apk 路径和输出路径
apktool d /xxx/app-release.apk -o /xxx/decodeTest
# apk 内含加密 dex 时,添加 -only-main-classes 参数
apktool d path1 -o path2 -only-main-classes
回编译 Smali 生成未签名 APK
# b: build 编译,-o: output 输出路径
# 两个路径分别是 smali 文件路径和输出 apk 路径
apktool b /xxx/decodeTest -o /xxx/1.apk
jarsigner 对 APK 重签名
jarsigner -verbose -keystore /xxx/签名/xxx.keystore \
-signedjar /xxx/signed.apk /xxx/unsigned.apk yourAlias
四个位置参数依次是:签名文件路径、签名后 APK 输出路径、未签名 APK 路径、签名文件别名。
zipalign 压缩对齐
zipalign -v -p 4 signed.apk zipalignsigned.apk
dex 转 jar
把 xxx.apk 改后缀为 .zip 并解压,得到 classes.dex,再用 dex-tools 转换:
sh /xxx/d2j-dex2jar.sh /xxx/classes.dex -o /xxx/decode.jar
参数依次为:d2j-dex2jar.sh 脚本路径、解压出的 dex 文件路径、-o 指定输出路径。
反编译产物中值得关注的几个位置
反编译后的目录里,下面几处是改包名、版本号、图标和显示名称的入口:
| 文件 | 作用 |
|---|---|
AndroidManifest.xml | 含包名信息,修改包名改这里 |
apktool.yml | 含 versionCode、versionName 等 |
res/mipmap-hdpi 等同族目录 | 各分辨率 icon(修改后文件名不能变) |
res/values/strings | 应用显示名称 |