
3 分钟拆解 apktool.ymlApktool 靠这一份 YAML 重打 APK【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool你反编译完顺手删了目录里的 apktool.yml再跑apktool b直接报错资源引用也全乱了。这个文件是 Apktool 的元数据档案反编译时把 SDK、框架依赖、版本信息写进 apktool.yml重打包时再读回来重建 APK。打开 apktool.yml它到底记了什么反编译产物目录的根下一定有一份 apktool.yml内容不长先看一份精简版version: 2.8.1 # 写出这份文件的 Apktool 版本 apkFileName: standard.apk # 原始包名重打包产物默认用它命名 doNotCompress: - arsc # 以 stored 方式存放、不压缩的文件列表 sdkInfo: minSdkVersion: 25 targetSdkVersion: 30 # 来自原始包的 AndroidManifest resourcesInfo: packageId: 127 # 资源包 ID0x7f 就是 127 versionInfo: versionCode: 71剩下的字段按需出现缺失不代表出错。下面这张表是字段速览够你快速定位每个键的用途字段作用version生成此文件的 Apktool 版本用于判断格式兼容性apkFileName原始 APK 文件名b重打包时输出产物默认以它命名usesFramework应用依赖的框架 ID 列表1表示标准 Android 框架usesLibrary依赖的系统第三方库如org.apache.http.legacysdkInfo最低 / 目标 / 最高 SDK 版本versionInfo清单里的 versionCode 和 versionNameresourcesInfo资源包 ID、包名、稀疏 / 紧凑条目等标志featureFlags布尔开关如keepRawValuesdoNotCompress不参与压缩的文件后缀或路径列表四个子对象各管一摊UsesFramework存ids和tag两项。普通应用只有ids: [1]系统应用或插件化应用会挂自定义框架。它丢了aapt 不知道要对哪个框架链接资源manifest 里对android:命名空间的引用会解析失败。SdkInfo存 min / target / max 三个版本值可以是数字也可以是代号如T代表 33。构建时用 minSdk 决定 dex 输出等级用 target 决定 aapt 的资源行为。丢了之后构建端只能退回默认值行为可能和原包不一致极端情况下 target 超出 min~max 区间还会被内部钳制。VersionInfo存 versionCode 和 versionName直接来自 AndroidManifest。读不出来时 code 是 -1、name 是 null。它本身不影响构建但你在 manifest 里改了版本号后重打包构建端会用它保持一致不确定的话别碰。ResourcesInfo是四个里最关键的packageId 决定0x7f前缀怎么映射packageName 是资源包名sparseEntries / compactEntries 记录原包 resources.arsc 的条目布局。改 packageId 后所有资源引用都会错位这是改包翻车的重灾区。从反编译到重打包一份元数据的闭环方向是单向回环的d反编译时解码器边读 resources.arsc 和清单边往 ApkInfo 对象里填 packageId、SDK、不压缩列表最后save()成 apktool.ymlb重打包时ApkBuilder 第一步就是ApkInfo.load(目录)把同一份数据喂给 smali 构建和 aapt 调用。加载也支持直接从输入流读解析器会跳过未知字段、容忍缩进异常所以文件里多出来的键不会致命。d: 解析 arsc / 清单 → 填充 ApkInfo → save() 写出 apktool.yml 你: 直接手改 yml比如把 minSdkVersion 调到 24 b: load() → SDK 给 smali、框架给 aapt、doNotCompress 给 zip → 重建也就是说 apktool.yml 既是可以手改的输入也是构建完成后的回写记录。实现都在brut.apktool/apktool-lib/src/main/java/brut/androlib/meta/下四个子对象各一个文件想确认某字段怎么解析直接看源码。这份文件能帮你干三件事分析第三方包不用打开 manifest 和 arsc扫一眼 yml 就知道它的 SDK 范围、是否依赖自定义框架、版本号是多少一批包横向对比时尤其省事。改包重打你只动 smali 和资源文件框架依赖、packageId、压缩策略由 yml 保证不跑偏真要调 SDK直接改sdkInfo两行比改 manifest 再同步更安全。批量自动化在脚本里对每个反编译目录执行 load批量提取 minSdk / versionCode 生成报告或统一上调 SDK 后再逐个b是 CI 里验证一批 APK 的常见做法。相关解析行为有对应测试覆盖见brut.apktool/apktool-lib/src/test/java/brut/androlib/meta/。重打包前自查清单resourcesInfo.packageId仍是原包的值普通应用为 127动过它的确认 smali 里的资源引用同步改过sdkInfo里改过的 target 落在 min 和 max 之间且你的 smali 改动确实兼容该 minSdkusesFramework.ids与原包一致系统应用挂了非 1 的框架 ID打包机上必须有对应框架doNotCompress列表保留了原内容至少包含arsc目录里 apktool.yml 存在且缩进合法原文件用几格缩进就保持几格删掉 apktool.yml 后报错本质是构建端丢失了框架、SDK 和压缩策略这三样输入。它同时是输入也是回写记录看不懂先别动保留原样再改其他文件重打包的成功率会高很多。【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考