news 2026/9/5 17:10:42

如何 5 分钟玩转 Apktool:APK 反编译与重打包实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何 5 分钟玩转 Apktool:APK 反编译与重打包实战指南

如何 5 分钟玩转 Apktool:APK 反编译与重打包实战指南

【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool

拿到一个 APK,想知道里面的资源、清单和逻辑长什么样?或者想改几行文案、几个资源引用,再重打包出一个能装回去的版本?Apktool就是干这件事的:它把 APK 反编译成可读的 XML、资源文件和 smali 代码,等你改完后又能重新编译回 APK。下面带你从"手里只有一个 jar 文件"走到"产出可安装的成品包"。


🧩 什么情况下你会用到它

  • 想搞清楚某 App 申请了哪些权限、内置了哪些图标、文案和资源引用;
  • 想改掉字符串、资源或 smali 代码,产出"魔改"版本并重新打包;
  • 需要批量查看或分析资源表与反汇编后的代码结构。

🚀 Apktool 的安装与启动命令

结论:只需一个apktool.jar和一套 JDK,两条路二选一。

路线一:用官方发布的 jar。下载对应平台的apktool_x.x.x.jar,放进任意目录即可,无需安装任何东西。

路线二:自己从源码构建。需要先装 JDK(建议 17+):

git clone https://gitcode.com/GitHub_Trending/ap/Apktool cd Apktool && ./gradlew build

构建完成后,在brut.apktool/apktool-cli模块的build/libs目录里找到 apktool 的 jar 包,之后所有操作都围绕它展开。

最小可运行命令——把任意 APK 反编译一遍:

java -jar apktool.jar d sample.apk

几个启动提示:

  • 程序仅支持 64 位系统,32 位环境下启动会直接告警;
  • java -jar太长?仓库scripts/目录下有 Linux/macOS/Windows 三种包装脚本,本质就是帮你拼好这条 java 命令;
  • 随时执行java -jar apktool.jar v查版本,h查看帮助。

⚙️ 从反编译到重新打包的完整流程

按这四步走,你就完成了一条完整的"拆解—修改—重打包"链路。

  1. d:反编译。运行上面那条命令后,默认在apk.out/目录(可用-o指定)得到一棵项目式的目录:AndroidManifest.xmlres/里的明文资源、smali/里的反汇编代码,外加一个记录元信息的apktool.yml。只想看资源、跳过 dex 解码可以加-s
  2. if:安装框架(按需)。如果反编译或后续打包时报FrameworkNotFoundException,说明缺少系统框架资源,先把对应框架装进来(例如framework-res.apk),这一步告诉 Apktool"系统资源长什么样"。
  3. 改文件。动手前记住边界:res/smali/AndroidManifest.xml随意改;original/目录下的文件(签名、原始清单等)动了就白搭,重打包时会按原样合回。
  4. b:重新打包。回到反编译目录执行:
java -jar apktool.jar if framework-res.apk java -jar apktool.jar b sample.apk/

产物默认落在dist/下的sample.apk(可用-o改名);想跳过变更检测、强制全量编译时加--force

三个最常见的坑:

现象原因与解法
OutDirExistsException或输出目录已存在-f强制覆盖,或换个输出目录
FrameworkNotFoundException先执行if把框架资源装好再反编译/打包
打包时 smali 报错你手改的 smali 语法有问题,按报错定位到具体.smali文件回滚

📄 修改 apktool.yml 的常用项

反编译时生成的apktool.yml记录了这次拆解的全部元信息,重打包时 Apktool 会照着它来。绝大多数时候不用动它,需要时只改下面几项即可(其余如resourcesInfofeatureFlags属于只读记录,改了对打包无意义):

字段作用什么时候改
apkFileName记录源 APK 文件名,决定b的默认产物名想让产物叫别的名字时
sdkInfo原包的 min/target/max SDK 版本一般只读,用于确认兼容范围
usesFramework依赖的系统框架 id 与 tag反编译系统应用时,配合if确认框架已安装
usesLibrary声明的共享库列表处理依赖 shared library 的 App 时
doNotCompress不参与压缩的文件类型列表需要让某些文件在包里保持原样存储时

⚠️ 一个安全细节:apkFileName的值如果包含路径分隔符,Apktool 会直接抛SecurityException拒绝加载——这是它防目录穿越攻击的自检,别绕过。


📚 延伸阅读

  • 项目结构一句话版:多模块 Gradle 工程,核心反编译/打包逻辑在brut.apktool/apktool-lib/ApkDecoderApkBuilder),命令行入口在brut.apktool/apktool-cli/,其余brut.j.*是目录、YAML、IO 等辅助工具模块;
  • 内部设计思路可看 INTERNAL.md,路线图见 ROADMAP.md,项目说明在 README.md。

一句话收尾:d拆开、if补框架、b装回去,配一份基本不用动的apktool.yml——这就是 Apktool 的日常用法。

【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 17:08:04

MLX90640在STM32 HAL下的寄存器级移植与热成像优化

简介:本资源是一套基于STM32 HAL库的MLX90640红外热成像传感器驱动移植方案,面向嵌入式开发初学者与中级工程师,解决非接触式多点温度测量在STM32平台上的快速落地问题。适用于环境监控、设备过热预警、简易热像仪原型开发等场景,…

作者头像 李华
网站建设 2026/9/5 17:06:56

基于51单片机与ADC0832的智能浇花系统:从仿真到实战

简介:本资源是一套面向单片机初学者与课程设计者的完整智能浇花系统仿真方案,基于STC89C52单片机,融合ADC0832模数转换、土壤湿度传感、LCD1602人机交互、继电器驱动抽水电机及蓝牙远程监控功能,解决嵌入式系统中环境感知、阈值控…

作者头像 李华
网站建设 2026/9/5 17:02:59

跨作品战斗力评级怎么看?从信息核验到标准缺失的六步拆解法

把“『VB标准』爱丽丝甘恩高1A(黑暗灵魂黑暗塔)vs 博士1B至暗骑士高1A(神秘博士DC)”这样一串标题放到面前时,我的第一反应不是去查角色战绩,而是先问:这份等级表本身在哪里?如果连“…

作者头像 李华
网站建设 2026/9/5 16:59:03

Android OpenCV二维码识别:从原理到工程实践,打造高性能扫码引擎

简介:本资源是一个面向Android开发者的二维码识别实战项目,聚焦OpenCV在移动端的工程化落地,解决微信等主流平台二维码实时扫描与解码的技术难点,适用于具备Java/Kotlin基础并希望进阶计算机视觉应用的中高级开发者。压缩包共660个…

作者头像 李华
网站建设 2026/9/5 16:54:40

高盛看好贵州茅台背后:直营提价体系与渠道价格秩序解析

高盛看好贵州茅台,直营店提价体系再理顺。如果只看这一行,很容易把它理解成“国际投行唱多白酒,直营店要涨价”。但你把关键词拆开就会意识到,真正值得研究的不是“看好”这种模糊结论,而是“直营店”“提价体系”“再…

作者头像 李华