news 2026/9/30 1:49:22

apktool.yml 避坑指南:这一份文件决定你重打包会不会崩

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
apktool.yml 避坑指南:这一份文件决定你重打包会不会崩

apktool.yml 避坑指南:这一份文件决定你重打包会不会崩

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

跑完apktool d,输出目录里会多出一个叫 apktool.yml 的文件,很容易被当成副产品。但重打包时,Apktool 会把它逐行读回来驱动 aapt2,改错一行,轻则装不上包,重则资源全加载不出来。这篇带你从一分钟看懂到动手改,再到这份元数据配置的坑点一次摸清。

一分钟速览

apktool.yml 是 Apktool 解码 APK 时自动落盘的"重打包说明书"。它记着原始包名、SDK 上下限、版本号、哪些文件不许压缩。重打包时,这些值会被原样传给 aapt2,resources.arsc 的内容和 zip 压缩方式都由它决定。坏了的表现通常是:构建直接报错、装不上包,或者装上了但资源加载不出来。apktool.yml 与 AndroidManifest.xml 的区别:前者是业务声明,后者才是重打包工具的过程参数单。

apkFileName: myapp.apk sdkInfo: minSdkVersion: 24 targetSdkVersion: 34 versionInfo: versionCode: 3 versionName: 1.2.0

它是怎么干活的:apktool.yml 在解码和重打包之间往返

时间线分两段,中间隔着一个你。

解码段:ApkDecoder 从 manifest 取出 SDK 和版本号,再逐个文件扫描 zip 里哪些是未压缩的,汇总进 ApkInfo 对象后存成 apktool.yml。此时它只是一份快照。

// 解码:存盘 mApkInfo.save(new File(outDir, "apktool.yml")); // 重打包:先读回,再构建 ApkInfo apkInfo = ApkInfo.load(new File(mApkDir, "apktool.yml"));

读写两个入口都在 ApkInfo.java 里,解码调 save,重打包调 load。重打包时由 AaptInvoker.java 把 sdkInfo、versionInfo 这些字段逐个拼成 aapt2 参数,压缩环节也按 doNotCompress 清单决定每个文件压不压。

跟着改:从0到跑通

三条命令走完一个往返:

apktool d sample.apk -o sample apktool b sample -o sample-v2.apk aapt dump badging sample-v2.apk

第一步:【做什么】用第一条命令解码任意一个 APK,想从源码跑就先克隆仓库再用 gradlew 构建。【为什么】手里要有真实的 apktool.yml,后面的改法才谈得上验证。【怎么验证】sample/ 目录下出现 apktool.yml。

第二步:【做什么】打开 sample/apktool.yml,把 sdkInfo、versionInfo、doNotCompress 三处值和原包核对一遍。【为什么】这三组值在重打包时一一映射成 aapt2 参数。【怎么验证】和原包的 badging 输出对照,没有缺失或多出。

第三步:【做什么】把 targetSdkVersion 改小一档,保存,再跑第二条命令重建。【为什么】验证"改 yml 就影响重打包"这条链路。【怎么验证】第三条命令输出的新包 targetSdkVersion 变成了你改的值。

第四步:【做什么】把值改回去,再重建一次。【为什么】确认包能还原,才敢把改法用到正式流程。【怎么验证】构建成功,安装启动正常。

解码出来的样本里还包含下面这类图片资源,压不压缩由 doNotCompress 清单说了算。

最容易炸的4个点 ⚠️:改错就废的重打包操作

下面四个错误,全部按报错现象反推。

1. apkFileName 写成路径

重打包报 "Malicious value for apkFileName",构建直接拒绝。根因是读取时的安全校验:值里带 / 或 \ 会被当成目录穿越处理。这个字段只是记录原包名,保持 myapp.apk 这种纯文件名就行。

2. SDK 版本写成文字

minSdkVersion 写成 "Android 12" 这种,重打包两头都坏:aapt2 收到原文本直接拒绝,内部整数解析还会落到兜底值 10000。这个字段只认纯数字,或者 O、S 这类内置代号。改成 24 这种值最稳。

3. 删掉 usesFramework.ids

依赖自定义框架的包重打包后报资源缺失,或 aapt2 链接失败。根因是 ids 有值时框架 apk 才会以 -I 参数带进构建,删掉它,框架资源就找不到了。这类包的 usesFramework 下 ids 一个都别动。

4. doNotCompress 删掉 arsc

构建能过,新包却装不上或一启动就闪退。打 zip 时这份清单决定哪些文件保持不压缩,arsc 一旦压了,系统就按原方式读不了 resources.arsc。原始条目只增不删。

动手前过一遍清单

  • yml 丢了,用原包重新解码恢复,别凭记忆手写。
  • 要改版本号,只动 yml 里的 versionInfo,versionCode 和 versionName 解码后已不在 manifest 中。
  • 拿不准的值,重新解码一次原 APK,以输出为准。
  • 新增必须不压缩的文件类型,扩展名补进 doNotCompress 再重建验证。
  • yml 和代码一起提交,提交前 diff 新旧版本,字段漂移就停下查。
  • 重建完先在真机安装启动冒烟,再放行。

重打包前,先 diff 一次 yml 🚀

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

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

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

htmx 之外:超媒体驱动应用(HDA)替代方案的完整技术全景

前端 【免费下载链接】htmx htmx - high power tools for HTML 项目地址: https://gitcode.com/GitHub_Trending/ht/htmx 点击查看 免费下载 导读:本文以 htmx 官方博客《Alternatives to htmx》为基础,系统梳理超媒体驱动应用(H…

作者头像 李华
网站建设 2026/9/30 1:49:04

WSL安装与配置全攻略:从零搭建Windows下的Linux开发环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 1:48:18

大麦抢票脚本教程:5分钟跑通的Python自动抢票完整指南

大麦抢票脚本教程:5分钟跑通的Python自动抢票完整指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 开抢的那一秒,网页上的"立即购买"还没…

作者头像 李华
网站建设 2026/9/30 1:48:08

FPGA实战解析:TMDS编码原理与RGB转HDMI/DVI高速显示实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 1:47:25

使用 agent-browser 自动化 Electron 桌面应用:基于 CDP 的完整实战指南

人工智能大模型代码智能体AI Agent桌面应用后端前端CLI 【免费下载链接】ZCode ZCode 是 AI 编程工作台,提供桌面应用、浏览器界面和终端 Agent。本仓库包含客户端、后端服务、共享 UI,以及 Agent CLI 与运行时源码。 项目地址: https://gitc…

作者头像 李华