Apktool 反编译与重打包 APK:新手 3 分钟跑通指南
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
它解决什么问题
拿到一个 APK,想看看里面的界面长什么样、权限怎么申请、smali 代码怎么写的,直接解压只能看到二进制的 AndroidManifest.xml,根本没法读。Apktool 就是干这个的:它能把资源还原成接近源码的 XML,把 dex 还原成 smali 文本,改完再用一条命令打包回新的 APK。
适用于本地化改文案、调试 smali 逻辑、分析权限和组件声明这类场景。注意它不是用来破解的,项目文档里也明确说了这一点(见 LICENSE.md 的用途说明)。
最小可运行示例:一条命令看到反编译结果
先准备工具。用现成的发行版,或者自己构建源码:
git clone https://gitcode.com/GitHub_Trending/ap/Apktool构建产物在brut.apktool/apktool-cli/模块里,构建入口是 Main.java。拿到 apktool 后,先确认版本:
apktool v预期输出类似2.9.3 - a tool for reengineering Android apk files,看到版本号说明工具可用。
然后对任意一个 APK 执行解码:
apktool d example.apk几秒后,你当前目录会多出一个example/文件夹,里面是AndroidManifest.xml、res/和smali/,全是能直接阅读的文件。
实战场景一:改文案后重打包出新 APK
这是最常见的闭环:解码 → 改res/values/strings.xml里的文字 → 重新打包。
apktool b example/预期输出I: Build apk: example.apk,新 APK 就在目录旁边。注意:打包会复用解码时保存的资源表,所以改资源 ID 引用是安全的,但随意删资源文件会直接报错。
实战场景二:只想看清单,跳过资源和代码
有些 APK 几百 MB,你只想知道它申请了什么权限。加两个参数只解码清单:
apktool d --only-manifest example.apk预期输出里只提示解码了清单,产出速度明显更快。目录里只有AndroidManifest.xml,权限、组件一目了然。适合快速排查,不适合改资源后重打包。
实战场景三:反编译输出目录已存在
对同一个 APK 二次解码时,Apktool 不会覆盖已有目录,而是报OutDirExistsException。这是保护你手动修改过的文件。确认可以覆盖时加--force:
apktool d -f example.apk预期输出I: Deleting example.dir后继续正常解码。类似地,重打包阶段也支持-f强制覆盖输出 APK。
进阶技巧与常见坑
- 系统应用解码失败:依赖 framework 的 APK(系统应用、部分 ROM 自带)解码会报资源错误。先用
apktool if base.apk安装框架,或配合-p指定框架目录。 - 输出到指定路径:
--output参数可以让解码或打包写到别处,避免产物散落:apktool b -o out/new.apk example/。 - 版本与帮助:
apktool h打印全部子命令和选项,v打印版本。遇到问题先看这两条的输出,再对照 ROADMAP.md 判断是否是已知问题。
从d到b走通一遍,你手里就是一个可安装验证的定制 APK,下一步可以试着在 smali 里做个小改动再重打包。
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考