我开发了一个开源 APK 信息查看工具:ApkInfoQuick
最近我做了一个小工具,名字叫 ApkInfoQuick。
它是一个面向 Android APK 文件的信息查看与解析工具,支持桌面 GUI,也支持 CLI 命令行。项目已经准备开源放到 GitHub 上,希望能给经常分析 APK、测试包、渠道包、版本包的同学提供一点帮助。
为什么要做这个工具
平时在 Android 开发、测试、渠道分发、逆向分析或者自动化流水线里,经常会遇到这些需求:
- 快速看一个 APK 的包名。
- 确认应用名是不是解析正确。
- 查看 versionCode、versionName。
- 查看 minSdkVersion、targetSdkVersion、compileSdkVersion。
- 看 APK 里声明了哪些权限。
- 看支持哪些 ABI。
- 提取应用图标。
- 判断渠道信息有没有写进去。
- 批量解析多个 APK。
- 把解析结果复制成文本或 JSON。
这些需求看起来都很简单,但真正用起来,经常需要在多个工具之间切换。
有些老工具界面比较旧,有些工具解析图标和应用名不稳定,有些只支持 GUI,不方便脚本自动化;而命令行工具虽然强大,但对日常查看又不够直观。
所以我做了 ApkInfoQuick:目标就是让 APK 信息查看这件事变得更快、更直观,也更适合自动化。
项目地址
GitHub 地址:
text
https://github.com/TheDarkXian/ApkInfoQuick.git
这里先放一个占位地址,等仓库公开后替换成真实链接即可。
主要功能
ApkInfoQuick 当前支持:
- 拖拽 APK 到窗口自动解析。
- 多文件标签页工作区。
- 多 APK 按顺序自动解析。
- APK 图标预览。
- 图标导出。
- 包名、应用名、版本、SDK 信息展示。
- 权限列表展示。
- ABI 列表展示。
- 渠道信息展示。
- 签名信息尽力解析。
- warnings 诊断信息展示。
- 当前标签内容复制为纯文本。
- 当前标签内容复制为 JSON。
- CLI 命令行解析。
- 批量目录解析。
- CLI 导出 icon。
目前 AAB 文件暂时是占位标签,还没有做真实解析。后续计划会补上。
桌面端效果
桌面端基于 React + Material UI + Tauri 实现。
核心交互很简单:
- 打开应用。
- 把 APK 拖进去。
- 自动解析。
- 在标签页里查看结果。
- 需要的话复制文本、复制 JSON 或导出 icon。
我比较关注这个工具的信息密度,所以界面不是那种展示型大留白 UI,而是偏工具型布局。目标是尽量在首屏看到更多有用信息。
CLI 用法
除了 GUI,ApkInfoQuick 也提供 CLI。
进入后端目录后可以运行:
powershell
cd backend
cargo run -- parse path\to\app.apk
输出的是统一的 JSON Envelope:
json
{
"success": true,
"data": {
"packageName": "com.example.app",
"appName": "Example",
"iconUrl": "file:///...",
"minSdkVersion": 23,
"targetSdkVersion": 35,
"compileSdkVersion": 35,
"versionCode": 1,
"versionName": "1.0.0",
"permissions": [],
"signers": [],
"abis": [],
"channel": "unknown"
},
"errorCode": null,
"errorMessage": null,
"warnings": []
}
常用命令示例:
powershell
# 紧凑 JSON
cargo run -- parse path\to\app.apk --compact
# 纯文本输出
cargo run -- parse path\to\app.apk --text
# 解析并导出 icon
cargo run -- parse path\to\app.apk --export-icon .\icons
# 递归批量解析目录
cargo run -- parse .\samples --recursive --out result.json
# 检查工具链
cargo run -- doctor
CLI 和 GUI 复用同一套 Rust 解析引擎,所以结果是一致的。
技术栈
项目主要技术栈:
- 前端:React、TypeScript、Vite、Material UI。
- 桌面壳:Tauri 2。
- 后端解析:Rust。
- APK 解析辅助:aapt。
- 压缩包读取:zip。
- XML 处理:quick-xml。
- CLI 参数解析:clap。
- 序列化:serde、serde_json。
整体结构大概是:
text
.
|-- backend/ Rust 解析引擎和 CLI
|-- frontend/ React UI 和 Tauri 桌面端
|-- tools/android/ 内置 Android 辅助工具
`-- README.md
APK 解析方案
ApkInfoQuick 当前采用的是混合解析策略。
第一层优先使用 aapt:
aapt dump badgingaapt dump resourcesaapt dump xmltree
这些能力对应用名、图标、资源引用等信息比较稳定。
第二层是 Rust 自研兜底解析:
- 读取 APK zip。
- 解析 AndroidManifest.xml。
- 解析部分 resources.arsc 场景。
- 扫描 res 下的 icon 资源。
- 推断 ABI。
- 解析渠道信息。
- 尽力解析签名信息。
一开始我尝试过只靠 Rust 自研解析,但真实 APK 的情况很多,特别是图标和应用名解析会遇到不少边界情况。
后来又尝试过完全导向 aapt,但也发现部分原本 Rust 能命中的 icon 反而丢失。
所以最后采用了混合方案:aapt 做主解析,Rust 做字段级兜底和增强。
这个方案目前效果比较稳定,尤其是应用图标解析已经覆盖了不少真实 APK 场景。
图标解析做了哪些处理
APK icon 解析其实比想象中复杂。
常见情况包括:
- manifest 里直接写
@mipmap/ic_launcher。 - manifest 里写
@drawable/icon。 - 带包名前缀的资源引用。
- 资源 ID 引用,比如
@0x7f...。 - roundIcon。
- adaptive icon XML。
- foreground / background 分层。
- png、webp、9.png 等不同格式。
- 不同 density 目录,比如 mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi。
ApkInfoQuick 目前会综合多个策略选择最合适的图标,并在界面里显示图标来源,方便排查。
比如可能显示:
- aapt badging
- aapt xmltree
- resources.arsc 反查
- adaptive xml
- heuristic fallback
为什么做成开源
这个工具本身是为了解决我自己的日常需求,但 APK 信息查看其实是很多 Android 开发者、测试同学、工具开发者都会遇到的问题。
开源之后,希望它可以:
- 给需要的人直接使用。
- 给想做 APK 工具的人提供参考。
- 接收更多真实 APK 样本反馈。
- 一起补齐更多边界情况。
尤其是 APK 的资源格式、签名格式、渠道信息写法非常多,靠一个人很难覆盖全部场景。开源以后,如果大家遇到解析失败的 APK,也可以提 issue 或 PR。
当前状态
目前比较稳定的能力:
- APK 基础信息解析。
- 应用名解析。
- 图标解析与导出。
- 权限、ABI、渠道展示。
- 多文件标签页。
- CLI 单文件和批量解析。
- JSON / 文本复制。
仍然需要继续完善的地方:
- AAB 真实解析。
- 更完整的签名证书解析。
- 更多导出格式。
- 更完善的安装包发布流程。
- macOS / Linux 的打包验证。
本地开发
前端开发:
powershell
cd frontend
npm install
npm run tauri:dev
前端测试:
powershell
cd frontend
npm run test -- --run
后端测试:
powershell
cd backend
cargo test
构建桌面安装包:
powershell
cd frontend
npm run tauri:build
构建 CLI:
powershell
cd backend
cargo build --release
写在最后
ApkInfoQuick 不是一个很复杂的大项目,但它解决的是一个非常具体、非常高频的小问题。
我一直觉得工具类项目最有意思的地方在于:它不一定宏大,但只要能让某个重复动作少几步、让某个排查过程快几分钟,就已经有价值。
如果你经常需要查看 APK 信息、分析测试包、检查渠道包,欢迎试试这个工具。
如果你有更复杂的 APK 样本,也欢迎提 issue,一起把它打磨得更好。
GitHub:
text
https://github.com/TheDarkXian/ApkInfoQuick.git