apktool.yml 里的关键字段:改完再重打包,APK 才能正常装 📅 2026/8/22 18:09:17 apktool.yml 里的关键字段改完再重打包APK 才能正常装【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool用 Apktool 反编译一个 APK输出目录里会多出一个 apktool.yml很多人不知道它是干什么的重打包时一删构建就报错。它其实是参数快照反编译时 Apktool 把 APK 的框架依赖、SDK 版本、资源包 ID 等写进这个文件你执行apktool b重新打包时又靠它还原构建参数。把这些字段看明白改 SDK 版本、换框架才心里有数。先看到手的东西apktool.yml 长什么样跑一次apktool d sample.apk -o outout/apktool.yml就和res/、smali/目录并排出现。拿仓库测试数据里的一份真实文件来看字段旁加了注释apkFileName: basic.apk # 原始 APK 的文件名 doNotCompress: - arsc # 重打包时保持不压缩的文件 resourcesInfo: packageId: 127 # 资源包 ID对应 0x7f 前缀 packageName: com.test.basic sparseEntries: true sdkInfo: minSdkVersion: 4 targetSdkVersion: 22 maxSdkVersion: 30 usesFramework: ids: - 1 # 1 代表 Android 框架 version: 2.8.0 # Apktool 工具自身版本注意它不是字段大全每个字段都有空值判断值为空就不写入所以老版本生成的文件可能缺少maxSdkVersion这类键这很正常。怎么写进去、又怎么读出来这是一条对称的流水线。反编译时ApkDecoder 解析AndroidManifest.xml和resources.arsc把 SDK 版本、版本号、框架依赖提取出来填入 ApkInfo 对象最后save()通过 YamlWriter 逐字段序列化成apktool.yml。重打包时反过来走一遍ApkInfo apkInfo ApkInfo.load(apkDir); // 从目录里的 apktool.yml 读回 apkInfo.save(apkDir); // 构建前把对象写回文件读的时候 YamlReader 按行解析readItem按键名分发到各个子对象sdkInfo、usesFramework 等填充。解析器对不认识的键直接跳过所以新字段不会让旧文件加载失败写的时候只输出非空字段这就是文件越改越干净的原因。实现都在 ApkInfo 源码 里不厚可以顺着 load/save 两个方法看。影响重打包的几个字段速查sdkInfomin/target/max 三个 SDK 版本。关键点是重建时 targetSdkVersion 不会照抄而是被 clamp 到[min, max]区间内后面踩坑部分细说。usesFrameworkids: [1]表示依赖 Android 框架本身tag可以指定框架的具体版本重打包时据此加载对应框架资源。改错了框架资源编译直接失败。resourcesInfopackageId一般是 1270x7fsparseEntries记录资源表是否用稀疏条目影响 resources.arsc 的生成方式。其余三个一笔带过doNotCompress是打包时不压缩的文件列表versionInfo是 manifest 里的 versionCode/versionNameversion是 Apktool 自己的版本号和你的 App 无关。改 apktool.yml 容易踩的 4 个坑删了 apktool.yml 再 b构建缺参数。load 时框架、资源包信息全丢了只能靠默认值硬凑产物行为不可预期。把它当项目文件保留别当垃圾清理。改了 targetSdkVersion 却没生效。现象是装到设备上行为还是旧版本级别。原因是重建时getTargetSdkVersionBounded()会把 target 压回[min, max]区间你单独调大 target 会被 maxSdkVersion 截断。想提版本就同步改大maxSdkVersion。动了 packageId应用一启动资源全挂。资源引用0x7fxxxxxx的高位就是包 ID改了这个值smali 和 res 里所有引用对不上。这个字段基本只读。手改 apkFileName 触发 SecurityException。加载代码对这个字段做了路径遍历校验写成..或带/会直接抛异常拒绝加载。想换名字就整个目录一起改别单独改字段。另外提醒一句手动编辑时保持缩进格式和原文件一致缩进错乱的那一行会被当作无效行跳过等于字段静默丢失排查起来很费劲。改完怎么验证字段改完后跑apktool b out -o test.apk能出包就装到目标版本设备上确认行为。元数据这块理清后下一步建议看res/目录下的资源文件怎么改、改完如何保持引用一致。【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考