
apktool.yml 里那 7 个字段到底管什么从反编译到重打包的完整解读【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool您运行apktool d xxx.apk之后输出目录最显眼的一个文件不是 smali 或 res而是一份短短的apktool.yml。很多人直接忽略它直到b命令重打包时报错、或者资源 ID 对不上才回头查。这个文件由 Apktool 生成并持久化它就是 Apktool 保存 APK 元数据的方式记录了反编译时发现的框架依赖、SDK 版本、资源包信息和压缩策略重打包时工具会重新读入它来决定怎么重建 APK。本文把这份文件从头到尾拆开讲每个字段什么含义、哪些值能动、哪些绝对别碰。apktool.yml 是怎么生成的这一节回答文件从哪来、什么时候会被再读。反编译阶段ApkDecoder解析 APK 后把结果填进 ApkInfo.java 这个类然后调用它的save()方法写成 YAML重打包时ApkBuilder则调用ApkInfo.load(反编译目录)读回。整个过程您不需要手动参与但要知道一点这个文件是单向依赖的——删掉它再重打包工具只能按默认值猜结果往往不符合预期。七个顶层字段逐一对照这是全文核心。下表把apktool.yml的全部顶层键整理出来按改动风险从高到低排序字段含义示例值能不能改version生成该文件的 Apktool 版本2.8.1不建议改版本不匹配时解析行为可能变化apkFileName原始 APK 文件名standard.apk可改纯记录性质usesFramework框架依赖ids是框架 ID 列表tag是系统应用标签ids: [1]改 ID 前必须确认本机有对应框架否则打包失败usesLibrary第三方共享库列表常见为空为空时不写出按需增删sdkInfominSdkVersion/targetSdkVersion/maxSdkVersion三项25 / 30可以改但需与 manifest 保持一致versionInfoversionCode与versionName取自 manifest-1 / null读不到时建议同步修改 manifest 中的同名属性resourcesInfo资源包packageId通常 127、包名、sparseEntries标志127packageId 改动极易引发资源引用失效doNotCompress打包时不压缩的扩展名或文件列表arsc、png可安全增删其中两个子对象值得多看一眼。sdkInfo的字段在 SdkInfo.java 中定义除了纯数字还支持M、N、Q这类代号写法构建时会统一换算成 API 等级另外当 min、max、target 三者矛盾时重打包用的是被夹在 min/max 中间的那个 target 值。usesFramework的tag非 null 时说明这是一个系统应用overlay 或系统扩展重打包需要对应的框架环境。一份真实文件长什么样下面是仓库测试资源里的两个真实样例。左边是最简形态——很多字段为空时干脆不出现在文件里这也是新手常见的困惑为什么我的 yml 里连sdkInfo都没有因为原 APK 的 manifest 里就没写。右边字段齐全可以看到列表项用 4 空格缩进的写法同样合法# 最简样例src/test/resources/meta/standard.yml apkFileName: standard.apk doNotCompress: - arsc resourcesInfo: packageId: 127 packageName: null sparseEntries: false sdkInfo: minSdkVersion: 25 targetSdkVersion: 30 usesFramework: ids: - 1 tag: null version: 2.8.1 versionInfo: versionCode: -1 versionName: null您想改字段时最容易踩的四个坑这一节只讲改坏了会怎样。packageId动了资源全乱。resourcesInfo.packageId是 smali 里0x7f...常量与资源表之间的桥梁改成非 127 且不同步修改资源表时运行期找不到资源是常规结局。doNotCompress漏了arsc。把resources.arsc压缩进 zip部分机型读取资源会失败。反编译时若原包以 stored 方式存放 arsc这里必有arsc手动删掉等于自找问题。versionCode改成 0 或负数。升级安装场景下 versionCode 必须大于旧版本-1是原 manifest 读不到的占位值直接带着它打包等于没设置。version字段改成别的版本号。它记录的是写出这份文件的 Apktool 版本不是 APK 的版本。改成与本机 apktool 不一致的值不会报错但跨版本序列化时新增字段可能被忽略。重打包前必查的三项动手执行apktool b之前花十秒核对这三点能避免绝大多数诡异报错usesFramework.ids与本机1框架一致apktool ifp可查看框架安装情况sdkInfo三个值满足 min ≤ target ≤ max且与修改后的 AndroidManifest.xml 一致doNotCompress包含arsc以及您新加入的不压缩文件类型。核对无误后再打包若仍失败错误日志里通常会点名是哪个阶段出问题回到本文的字段表对照定位即可。小结apktool.yml是 Apktool 在反编译与重打包之间传递 APK 元数据的唯一载体七个顶层字段分别管版本、文件名、框架、库、SDK、应用版本和资源包信息。它不该被删除改动前先用本文的字段表确认风险重打包前过一遍上面三项检查这份小小的 YAML 就不会再给您添堵。【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考