news 2026/8/24 3:54:54

Apktool ApkInfo 完全指南:APK 元数据加载机制全解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apktool ApkInfo 完全指南:APK 元数据加载机制全解

Apktool ApkInfo 完全指南:APK 元数据加载机制全解

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

Apktool 是 Android APK 逆向工具,它的 ApkInfo 类干一件事:把反编译时提取的元数据写进 apktool.yml,让重打包时能按原样还原配置。

核心概念速览

ApkInfo 实现了 YamlSerializable 接口,就是 apktool.yml 的一行行内容到内存字段的映射。

读取靠一个 switch 把 key 对到字段,写入时只写非空字段,所以这个 yml 文件总是很精简。

apktool.yml 里的键ApkInfo 对应字段装了什么
versionmVersion反编译用的 apktool 版本
apkFileNamemApkFileName原始 APK 的文件名
usesFrameworkUsesFramework依赖的框架 ID 列表和 tag
usesLibraryList<String>依赖的第三方库
sdkInfoSdkInfomin/target/maxSdkVersion
versionInfoVersionInfoversionCode 和 versionName
resourcesInfoResourcesInfopackageId、packageName、sparseEntries 等
featureFlagsMap<String, Boolean>传给 aapt2 的功能开关
doNotCompressList<String>重打包时不压缩的文件类型

源码在 apktool-lib 模块的 meta 包下,类名一眼可认:ApkInfo、SdkInfo、UsesFramework、VersionInfo、ResourcesInfo。

动手实操:apktool.yml 怎么读

你反编译完一个 APK,打开输出目录,第一眼看到的就是 apktool.yml。

一个最小可用的样子大概是这样:

version: 2.11.1 apkFileName: demo.apk sdkInfo: minSdkVersion: 24 targetSdkVersion: 33 resourcesInfo: packageId: 127 packageName: com.example.demo

改这个文件是有实际后果的。

比如你把 minSdkVersion 从 24 改成 21,重打包时 AaptInvoker 会拿它拼 aapt2 命令参数,资源编译的资源级别就跟着变了。

而 packageId 建议别动:它参与所有资源引用 ID 的构造,改了之后引用可能对不上号。

数据怎么流转:ApkInfo 的加载机制

按数据流看,整条链路是三段:

产生 → 落盘 → 消费

  • 产生:ApkDecoder 解析 APK 时 new 一个 ApkInfo,顺手填上版本号、从 manifest 里抠出的 minSdkVersion、doNotCompress 列表
  • 落盘:解码完成后调用 save(outDir),序列化成 apktool.yml
  • 消费:重打包时 ApkBuilder 里一行 ApkInfo.load(apkDir) 读回来,AaptInvoker 从里面取 sdkInfo、versionInfo、usesFramework 拼命令,doNotCompress 决定哪些文件以不压缩方式打进 zip

关键调用就这两头:

mApkInfo.save(outDir); // 解码后:对象 → apktool.yml ApkInfo apkInfo = ApkInfo.load(mApkDir); // 重打包前:apktool.yml → 对象

中间那个 yml 文件是唯一的持久化介质,内存对象从不跨进程存活。

踩过的坑

删了 apktool.yml,重打包直接报错

  • 你遇到了什么:觉得 yml 只是记录文件,顺手删掉,一打包就崩
  • 为什么会这样:ApkBuilder 靠 load 恢复版本、框架、SDK 配置,文件不在它没法继续
  • 怎么解决:反编译目录里的 apktool.yml 别动,想备份就整个目录拷走

手改 yml 缩进错乱

  • 你遇到了什么:手工编辑后字段层级变了,apktool 读不了
  • 为什么会这样:它用自家的 YamlReader 逐行解析,靠缩进判层级
  • 怎么解决:同级字段保持对齐缩进;顺带说,未知字段会被跳过不报错,但错缩进会

apkFileName 被拒:Malicious value

  • 你遇到了什么:把 APK 改个怪名字,重打包报 SecurityException
  • 为什么会这样:源码里对 "."、".." 和带路径分隔符的值主动抛异常,这是防路径穿越的防御
  • 怎么解决:apkFileName 保持纯文件名,别塞路径

下一步

apktool.yml 就是重打包的蓝图。想再往下钻,读一下 ApkInfo.java 的 readItem 和 write 两个方法就通了。

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

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

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

人工智能应用安全在版本更新后先测什么

人工智能应用安全在版本更新后先测什么 讨论面向新版本的升级风险评估&#xff0c;关键不是罗列工具&#xff0c;而是回答一个更实际的问题&#xff1a;在 AI 应用安全&#xff1a;Agent 工具调用滥用、数据投毒与模型窃取防护 的当前边界内&#xff0c;什么证据足以支持下一步…

作者头像 李华
网站建设 2026/8/24 3:52:40

智能体框架防遗忘机制:工程部署、资源评估与避坑指南

这次我们来看一个关于智能体框架持续学习的研究方向&#xff1a;防遗忘机制。对于做AI应用开发、模型部署和智能体系统设计的工程师来说&#xff0c;持续学习&#xff08;Continual Learning&#xff09;是个绕不开的难题。模型在一个新任务上学得越好&#xff0c;往往意味着它…

作者头像 李华
网站建设 2026/8/24 3:52:02

Java后端面试突击:两周系统备战高并发与JVM调优

对于 Java 后端开发者来说&#xff0c;每年九、十月份的招聘旺季既是机会也是挑战。企业释放大量岗位&#xff0c;但竞争同样激烈&#xff0c;面试官的问题也从基础语法延伸到高并发、JVM 调优、系统设计等深度场景。如果准备不足&#xff0c;很容易在技术面环节暴露知识盲区。…

作者头像 李华
网站建设 2026/8/24 3:50:21

Windows系统文件wbiosrvc.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华