如何拆开、修改并重新打包一个 Android APK:Apktool 解码工具实战介绍
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
Apktool 是一款用于逆向 Android APK 的开源命令行工具。本文围绕一条真实使用流程,集中回答大家最常问的四件事:怎么解码 APK、改动去哪儿写、怎么重新打包回去、以及过程中有哪些坑。
如何解码一个 APK:一条命令展开工程
先说场景:不少第三方应用只发布编译好的 APK,没有源码工程。想改一句文案、想确认某项权限的申请逻辑,普通编辑器无从下手。Apktool 的解码命令就是为此准备的:
apktool d app.apk- 解码结果默认输出到
apk.out目录,用-o可以指定其他位置;目标目录已存在并想直接覆盖时,追加-f强制删除重建。 - 解码深度可调:
-s跳过源码解码、-r跳过资源解码、--only-manifest只还原清单文件,不用每次都等完整流程。 - 想读源码或自行构建,可以克隆仓库
git clone https://gitcode.com/GitHub_Trending/ap/Apktool,核心库在 brut.apktool/apktool-lib/,各平台的启动脚本在 scripts/ 下。
改动去哪儿写:资源与 smali 的目录组织
解码完成后,输出目录的组织方式接近常规开发工程:
- 文案、布局、图片等资源文件位于
res/下,AndroidManifest.xml在顶层,都可以直接编辑。 - Dalvik 字节码被转成
smali_*/目录中的 smali 文本,可以逐行阅读和修改逻辑;解码器实现可参考 brut/androlib/smali 源码。 original/与unknown/目录存放未识别或无法解码的文件,构建时会被自动还原,一般无需理会。- 顶层的
apktool.yml记录了 SDK 版本等应用信息,构建流程依赖它,不要删改。
第一次使用建议选一个熟悉的 APK,不改动任何内容直接走一遍构建,确认流程能跑通再动手改东西。
如何用 build 重新打包
修改完成后执行:
apktool b apk.out新生成的 APK 默认放在dist/目录,文件名与原应用一致,-o可修改输出路径。
- 构建时工具会自动检测被改动的文件,未变更的不重复编译;需要强制全量构建时追加
-f跳过变更检测。 - 进阶参数
--debuggable会在清单中写入android:debuggable=true,适合临时开启调试模式。 - 应用若依赖系统框架(如定制 ROM 上的应用),先执行
apktool if 框架.apk安装框架,lf查看已装列表,cf负责清理。
重打包后还需要做什么
- 构建产物是未签名的 APK,Android 无法直接安装,需用 apksigner 等工具完成签名后再推送到设备。
- 如果安装后出现资源缺失或启动崩溃,先核对是否有漏装的框架依赖(用
apktool lf对照检查)。 - 改动过资源文件的话,建议至少在对应语言和界面上真机验证一遍,解码还原并非绝对无损。
使用 Apktool 常见的几个坑
- 非法资源会被丢弃:解码遇到非法资源配置时,对应资源会被直接丢掉。想原样保留并自行修复,解码时加
--keep-broken-res,但构建前必须手动修好。 - 它不是反混淆器:对深度混淆过的应用,smali 的可读性同样会下降;Apktool 解决的是结构与资源层面的还原,不消除混淆。
- 分支与协议:
main分支对应 3.x 主线,2.x是维护分支,日常使用选主线即可;项目采用 Apache 2.0 协议开源。 - 用途要正当:项目方声明过该工具不应用于盗版等非法目的。把它用于本地化、功能补充、兼容性研究等合理场景,并尊重原作者的劳动成果。
挑一个手边熟悉的小 APK,花十分钟走完"解码—查看—构建",你会对 Android 应用的内部结构有更具体的认识。
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考