AInfo 是一个基于 Rust 的 Android 设备信息采集 CLI。
它通过 adb 执行系统命令,汇总设备基础信息、系统信息、网络信息、包信息、设置项以及 root 场景下的 /proc、/sys、挂载和存储信息,并输出为统一的 JSON 文件。
当前已支持:
- 自动发现 ADB 设备
- 指定
--serial采集单台设备 - 输出 JSON 到指定文件或默认文件名
- 输出格式化 JSON(
--pretty) - 导出原始命令输出目录(
--raw-dir) - root 模式采集(
--root)
- brand
- manufacturer
- model
- product
- device
- android version
- sdk version
- build fingerprint
- security patch
- abi
dumpsys batterywm sizeip addrgetenforcesettings list systemsettings list securesettings list global
pm list packagespm list packages -f
/proc/cpuinfo/proc/meminfo/proc/mountsdf- 常见
sysfs节点
默认输出为当前目录下的:
{brand}_{model}_{serial_hint}_{timestamp}.json
例如:
Redmi_22041216C_V8TGNJQO_20260417_101530.json
其中:
serial_hint使用 ADB serial 前 8 位timestamp格式为YYYYMMDD_HHMMSS
顶层结构:
{
"meta": {},
"device_basic": {},
"system": {},
"hardware": {},
"memory": {},
"storage": {},
"display": {},
"network": {},
"telephony": {},
"battery": {},
"apps": {},
"settings": {},
"raw": {},
"errors": []
}说明:
meta:采集元数据、命令状态、时间戳device_basic:getprop解析后的基础设备信息system:SELinux、mounts 等系统信息hardware:CPU、sysfs 硬件信息memory:/proc/meminfostorage:dfdisplay:屏幕尺寸network:结构化网络接口与地址battery:结构化电池信息apps:安装包列表与包路径settings:system / secure / global 设置项raw:原始命令输出
cargo run -- collectcargo run -- collect --prettycargo run -- collect --rootcargo run -- collect --serial V8TGNJQOR8WGQOEEcargo run -- collect --output out.json --prettycargo run -- collect --root --pretty --raw-dir raw使用 --raw-dir <dir> 时,会将 raw 节点中的原始命令输出按文件落盘。
例如:
raw/
battery.txt
cpuinfo.txt
df.txt
display.txt
getprop.txt
meminfo.txt
mounts.txt
network.txt
package_paths.txt
packages.txt
selinux.txt
settings_global.txt
settings_secure.txt
settings_system.txt
sysfs.txt
当前已包含单元测试,覆盖:
getprop解析- 默认输出命名
- battery 解析
- display 解析
ip addr解析- package 列表解析
- package path 解析
- settings 解析
- cpuinfo / meminfo 解析
- mounts / df / sysfs 解析
运行:
cargo test当前核心采集能力已经可用,后续如需继续增强,优先考虑以下二级能力:
读取一份已有 JSON 结果,并输出人类可读的摘要信息,适合命令行快速查看。
建议能力:
- 显示设备基础摘要:brand / model / android version / sdk / fingerprint
- 显示采集时间、设备 serial、是否 root 采集
- 显示 battery / display / network / storage / packages 数量等关键摘要
- 显示 settings 中的重要字段摘要
- 显示失败命令、空字段、异常字段
- 支持
--input <file>指定输入文件 - 支持
--section <name>只查看某个分组,如system、apps、network
示例:
ainfo inspect --input out.json
ainfo inspect --input out.json --section network对比两份 JSON 采集结果,输出字段级变化,适合设备升级前后、刷机前后、配置变更前后做差异分析。
建议能力:
- 对比
device_basic、system、hardware、memory、storage、network、apps、settings - 区分新增、删除、修改三类变化
- 对安装包列表做集合差异
- 对 settings 做键值差异
- 对设备指纹、系统版本、安全补丁等关键字段做重点高亮
- 支持
--left <file>与--right <file> - 支持
--section <name>限定对比范围 - 支持
--json输出结构化 diff 结果,便于后续自动化处理
示例:
ainfo diff --left before.json --right after.json
ainfo diff --left before.json --right after.json --section apps对当前 ADB 已连接的多台设备执行批量采集,适合测试机房、设备盘点、批量归档等场景。
建议能力:
- 自动遍历
adb devices中可用设备 - 每台设备分别生成独立 JSON 文件
- 支持统一输出目录,如
--output-dir ./out - 支持同时输出每台设备的 raw 目录
- 支持失败设备单独记录,不影响其他设备继续采集
- 支持汇总结果,例如成功数、失败数、输出文件路径列表
- 支持
--serial白名单或--exclude黑名单 - 后续可考虑并发执行与重试策略
示例:
ainfo batch --output-dir out
ainfo batch --output-dir out --raw-dir raw这些能力都建立在当前 collect 产出的 JSON 结果之上,不影响现有采集主链路。
src/
main.rs
cli/
adb/
collectors/
parsers/
models/
output/
error/