
如何用 Apktool 解包并重建 APK从解码到签名的实用实操教程【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/ApktoolApktool 是一款逆向 Android APK 的命令行工具它能把 APK 里的代码和资源解码成你能直接阅读和修改的形态再重新打包成可安装的新 APK。本文带你在一条完整流程上走完「解码 → 修改 → 重建 → 签名」。它解决什么问题想改一个 App 的某句文案或者查看它到底申请了哪些权限时会卡在两道坎上。其一APK 是个密封的二进制包里面的 AndroidManifest.xml 是二进制格式文本编辑器打开就是一堆乱码程序逻辑则以 .dex 字节码形式存在人眼读不动。其二就算你改到了文件手工把它重新装回一个可安装的 APK资源重编译、打包、签名、对齐很容易漏步骤最后往往装不上。Apktool 把这两件事一次解决它负责解码也负责重建你只需要改中间那些文本。五分钟上手Mac 用户用 Homebrew 直接装其他系统克隆源码构建需要 JDK 17 及以上brew install apktool这条命令从 Homebrew 源安装 apktool装完终端里就能直接调用。git clone https://gitcode.com/GitHub_Trending/ap/Apktool cd Apktool ./gradlew build shadowJar第一条把仓库克隆到本地第二条进入项目目录第三条构建出一个包含全部依赖的单 jar产物在 brut.apktool/apktool-cli/build/libs/apktool-cli-all.jar。你可以用java -jar运行它也可以把 scripts/linux/apktool 这个启动脚本拷到 jar 旁边之后直接敲apktool即可。最后验证环境并解码第一个 APKapktool v apktool d sample.apk -o sample_out第一条打印已安装的版本号确认环境没问题第二条把 sample.apk 解码到 sample_out 目录从此里面都是能直接打开的文本文件。核心工作流第一步如何解包 APKapktool d解码是每次任务的第一步基本形态apktool d apk文件路径 -o 输出目录 # 示例 apktool d /path/to/app-release.apk -o app_decoded这条命令把 apk 里的资源和代码反编译回磁盘不指定输出目录时默认在与 apk 同名去掉 .apk 后缀的目录下生成。常用参数参数什么时候用-s只想看资源不解码代码更快-r不解码资源只要 Smali 代码--only-manifest只解包清单文件速度最快-f输出目录已存在强制清空后重新解码表里的 Smali 是 Android 的文本化字节码类似 Java 字节码但人可以直接阅读和编辑apktool 把 .dex 还原成 .sm 文件用的就是它。第二步读懂解码出来的目录解码后目录结构是固定的记住一次就够用AndroidManifest.xmlApp 的「户口本」权限、组件、版本都写在这里。res/布局、图片、字符串等资源全部文本化。smali/还可能有 smali_classes2/ 等Smali 代码一个 dex 对应一个目录。apktool.yml解码记录写着包 ID、密度等信息重建时必需别删。第三步改哪里文案、权限、Smali按需挑一处修改改文案打开 res/values/strings.xml搜到对应字符串直接改。改权限打开 AndroidManifest.xml删掉或修改对应的uses-permission行。改逻辑打开 smali/ 下目标类的 .sm 文件。Smali 偏汇编级需要先定位到具体类和方法配合下文提到的工具定位会快很多。解码目录和原始 APK 是两回事改坏也不影响原始包删掉重来即可。第四步如何完成重建apktool bapktool b 解码目录 -o 输出.apk # 示例 apktool b app_decoded -o app_rebuilt.apk这条命令重新编译资源、把 Smali 装配回 .dex再打包成新 APK。它默认按 apktool.yml 做增量构建只重建你改动的文件想强制全量重建就加 -fapktool b app_decoded -o app_rebuilt.apk -f此时 APK 还是「裸包」没有签名不能直接安装。第五步如何完成签名打包apksignerAndroid 只认带签名的 APK。先生成一个 keystore可以理解为存着「私章」的文件再用 apksigner 签名keytool -genkeypair -v -keystore my.keystore -alias mykey -keyalg RSA -validity 10000 apksigner sign --ks my.keystore --ks-key-alias mykey app_rebuilt.apk adb install app_rebuilt.apk第一条生成 keystore中途会让你设密码第二条为 APK 签名第三条把它装到已连接的手机上。注意重建包与原应用签名不同需要先卸载原应用否则安装会报签名冲突。典型场景实战场景一本地化或修正应用文案场景描述你想改 App 里的某句提示语或把部分文案翻译成另一种语言官方又没提供入口。具体做法解码后在 res/values/strings.xml其他语言在对应 values-xx 目录里搜到目标句子改掉再重建签名apktool d app.apk -o app_l10n apktool b app_l10n -o app_l10n.apk实际效果App 内文案变成你的版本不用等官方发版想回滚就删掉解码目录重新解码一次。场景二调整应用权限场景描述App 申请了一个你不想要的权限比如读取电话状态你希望去掉它。具体做法解码后打开 AndroidManifest.xml删除或修改目标uses-permission android:name.../行再重建签名。实际效果系统权限弹窗里不再出现该权限。但要注意如果 App 功能依赖这个权限对应功能可能不可用所以建议先备份解码目录再动手。场景三排查 Smali 代码场景描述App 在某个场景崩溃或你想在某处注入调试输出需要定位到问题类。具体做法先用能生成 Java 视图的反编译工具找到「哪个类哪个方法」再打开 smali/ 下对应的 .sm 文件做细改。想上真机调试的话重建时加 --debuggableapktool b app_decoded -o app_debug.apk --debuggable这条命令会在清单里写入 android:debuggabletrue让应用可以被调试器连接。实际效果不需要原始源码也能逐步阅读和修改程序逻辑代价是 Smali 语法接近汇编改动要格外小心。避坑与最佳实践 几条来自真实踩坑的经验改之前备份原始 APK 和解码目录用独立工作目录存放别和原包混在一起。别手工删改 apktool.yml重建靠它找回原始资源 ID动它等于给重建埋雷。加了壳、加密的应用别硬解加固过的包可能直接解码失败或重建后装上是白屏。改完资源重建后没生效先试 -f 强制全量重建增量构建默认只重编它认为有变化的文件。3.x 版本不支持 32 位系统装 64 位 JDK 再构建。配套工具与延伸阅读apksigner随 Android SDK 提供Apktool 只管重建签名这最后一棒交给它支持 v2/v3 签名方案。jadx能把 .dex 读成 Java 层视图先用它定位要改哪个类再回到 Smali 细看效率会高很多。zipalign同在 build-tools 里给重建后的 APK 做对齐部分系统上能改善内存映射效率。想看全部参数说明随时在终端敲 apktool h所有命令行参数都定义在源码 brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java 里遇到不认识的参数翻这个文件最直接。【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考