Apktool 教程:把"黑盒"APK 解码成可改的工程,改完再重新打包
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
Apktool 是一款免费的 Android APK 逆向工程命令行工具:它能解码 APK 里的二进制资源和 Dalvik 字节码,变成接近源码形态的可读文件,等你改完之后,又能重新打包成一个新 APK。整个流程只有两条核心命令:apktool decode和apktool build。
从一个具体任务说起:只改应用里的一行文案
假设你想把某个应用里的一句提示语换成自己的文字。常规做法是找开发者要源码——但大多数应用只发布了编译后的 APK。Apktool 的价值就在这里:把封闭的 APK 拆成类似普通开发项目的目录,你直接编辑文件,再让它帮你拼回去。
它不要求你提前搭好 Android 开发环境,解码后的目录结构清晰,配合构建命令可以自动化重复操作。项目基于 Apache 2.0 协议开源,适合本地化翻译、学习研究、兼容性分析和定制 ROM 打包这类场景。
想自己阅读源码或构建的话,克隆仓库即可:git clone https://gitcode.com/GitHub_Trending/ap/Apktool
apktool decode:把 APK 解包成项目目录
在项目目录下执行一次解码:
apktool decode 你的应用.apk结果默认输出到apk.out目录。目录里就是你最关心的东西:AndroidManifest.xml是清单文件,res/下是布局、字符串、图片等资源,smali/下是反编译出的字节码文本,assets/保留原始资源文件。
两个常用的输出控制开关:
- 用
-o 目录名指定解码输出目录,替代默认的apk.out - 如果目标目录已存在会报错,加
-f(即--force)强制覆盖
只关心部分内容时,解码深度可以按需收缩:--no-src跳过 smali 源码,--no-res跳过资源,--only-manifest只解出清单文件。全部开关见命令行入口 Main.java。
最常动的两处:strings.xml 和 smali
当你只想替换一行文案时,打开res/values/strings.xml,找到对应的字符串直接改值,保存即可——这是本地化团队批量改文案最常用的路径。排查界面显示、主题配色问题时,也是从这个目录里的布局和资源文件入手。
想看应用行为时,smali/目录里的字节码可以逐行阅读和修改,逻辑级的改动都在这里完成。但要有预期:Apktool 不是反混淆器,对深度混淆过的应用,smali 的可读性会打折扣,能看懂结构和资源,不一定能流畅读懂业务逻辑。
apktool build:拿回可用的新 APK
改完之后回到命令行重新打包:
apktool build apk.out构建过程会检测哪些文件被改动过、只重建变更部分,产物默认输出在dist/目录下。两个实战参数:
--force:跳过改动检测,全量重建,不确定改了哪些东西时用它--debuggable:把android:debuggable设为true,方便装到设备上调试
有一点要提前知道:重建出来的 APK 还需要签名才能安装到设备,这是 Android 安装机制的要求,不是工具的问题。构建细节和源码在 apktool-lib 里。
框架应用,以及几个值得记住的开关
有些应用依赖系统公共框架,直接解码会失败。Apktool 提供了三条配套命令:apktool if <apk>(install-framework)安装框架、apktool lf(list-frameworks)查看已装框架、apktool cf(clean-frameworks)清理框架,处理依赖公共库的场景更稳妥。
两个容易踩到的点:
- 解码时如果报"Invalid resource config detected. Dropping resources",说明有非法资源配置被丢弃了,此时构建会失败。你可以手动修复,或者解码时加
--keep-broken-res把问题资源也保留下来,留给自己修 - 输出控制:
-v(verbose)看更详细的日志,-q(quiet)压掉正常输出
先划清边界,再开始折腾
项目方在 README 里明确声明:Apktool 不应用于盗版及其他非法用途,建议把它用于本地化、学习和兼容性研究这类合理目的,尊重应用作者。
版本方面:main分支是 Apktool 3.x 主线,另有2.x维护分支保留旧版行为,常规使用选 3.x 即可,需要与旧环境对齐时再关注 2.x。
第一次上手建议选一个你熟悉的简单 APK,先解码、不动任何文件、直接构建,确认整条链路走通之后再开始改东西。改完记得充分自测,资源层面的一个小笔误可能直接让应用起不来。
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考