十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

Apktool ApkInfo 完全指南:APK 元数据加载机制全解 Apktool ApkInfo 完全指南APK 元数据加载机制全解【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/ApktoolApktool 是 Android APK 逆向工具它的 ApkInfo 类干一件事把反编译时提取的元数据写进 apktool.yml让重打包时能按原样还原配置。核心概念速览ApkInfo 实现了 YamlSerializable 接口就是 apktool.yml 的一行行内容到内存字段的映射。读取靠一个 switch 把 key 对到字段写入时只写非空字段所以这个 yml 文件总是很精简。apktool.yml 里的键ApkInfo 对应字段装了什么versionmVersion反编译用的 apktool 版本apkFileNamemApkFileName原始 APK 的文件名usesFrameworkUsesFramework依赖的框架 ID 列表和 tagusesLibraryListString依赖的第三方库sdkInfoSdkInfomin/target/maxSdkVersionversionInfoVersionInfoversionCode 和 versionNameresourcesInfoResourcesInfopackageId、packageName、sparseEntries 等featureFlagsMapString, Boolean传给 aapt2 的功能开关doNotCompressListString重打包时不压缩的文件类型源码在 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),仅供参考
返回列表