Skip to content

zapata-ok/AInfo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AInfo

AInfo 是一个基于 Rust 的 Android 设备信息采集 CLI。

它通过 adb 执行系统命令,汇总设备基础信息、系统信息、网络信息、包信息、设置项以及 root 场景下的 /proc/sys、挂载和存储信息,并输出为统一的 JSON 文件。

Features

当前已支持:

  • 自动发现 ADB 设备
  • 指定 --serial 采集单台设备
  • 输出 JSON 到指定文件或默认文件名
  • 输出格式化 JSON(--pretty
  • 导出原始命令输出目录(--raw-dir
  • root 模式采集(--root

Collected Data

Basic

  • brand
  • manufacturer
  • model
  • product
  • device
  • android version
  • sdk version
  • build fingerprint
  • security patch
  • abi

System

  • dumpsys battery
  • wm size
  • ip addr
  • getenforce
  • settings list system
  • settings list secure
  • settings list global

Packages

  • pm list packages
  • pm list packages -f

Root

  • /proc/cpuinfo
  • /proc/meminfo
  • /proc/mounts
  • df
  • 常见 sysfs 节点

Output

默认输出为当前目录下的:

{brand}_{model}_{serial_hint}_{timestamp}.json

例如:

Redmi_22041216C_V8TGNJQO_20260417_101530.json

其中:

  • serial_hint 使用 ADB serial 前 8 位
  • timestamp 格式为 YYYYMMDD_HHMMSS

JSON Structure

顶层结构:

{
  "meta": {},
  "device_basic": {},
  "system": {},
  "hardware": {},
  "memory": {},
  "storage": {},
  "display": {},
  "network": {},
  "telephony": {},
  "battery": {},
  "apps": {},
  "settings": {},
  "raw": {},
  "errors": []
}

说明:

  • meta:采集元数据、命令状态、时间戳
  • device_basicgetprop 解析后的基础设备信息
  • system:SELinux、mounts 等系统信息
  • hardware:CPU、sysfs 硬件信息
  • memory/proc/meminfo
  • storagedf
  • display:屏幕尺寸
  • network:结构化网络接口与地址
  • battery:结构化电池信息
  • apps:安装包列表与包路径
  • settings:system / secure / global 设置项
  • raw:原始命令输出

Usage

Basic collect

cargo run -- collect

Pretty JSON

cargo run -- collect --pretty

Root collect

cargo run -- collect --root

Specify device

cargo run -- collect --serial V8TGNJQOR8WGQOEE

Specify output file

cargo run -- collect --output out.json --pretty

Export raw outputs

cargo run -- collect --root --pretty --raw-dir raw

Raw Output Directory

使用 --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

Tests

当前已包含单元测试,覆盖:

  • getprop 解析
  • 默认输出命名
  • battery 解析
  • display 解析
  • ip addr 解析
  • package 列表解析
  • package path 解析
  • settings 解析
  • cpuinfo / meminfo 解析
  • mounts / df / sysfs 解析

运行:

cargo test

TODO

当前核心采集能力已经可用,后续如需继续增强,优先考虑以下二级能力:

inspect

读取一份已有 JSON 结果,并输出人类可读的摘要信息,适合命令行快速查看。

建议能力:

  • 显示设备基础摘要:brand / model / android version / sdk / fingerprint
  • 显示采集时间、设备 serial、是否 root 采集
  • 显示 battery / display / network / storage / packages 数量等关键摘要
  • 显示 settings 中的重要字段摘要
  • 显示失败命令、空字段、异常字段
  • 支持 --input <file> 指定输入文件
  • 支持 --section <name> 只查看某个分组,如 systemappsnetwork

示例:

ainfo inspect --input out.json
ainfo inspect --input out.json --section network

diff

对比两份 JSON 采集结果,输出字段级变化,适合设备升级前后、刷机前后、配置变更前后做差异分析。

建议能力:

  • 对比 device_basicsystemhardwarememorystoragenetworkappssettings
  • 区分新增、删除、修改三类变化
  • 对安装包列表做集合差异
  • 对 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

batch

对当前 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 结果之上,不影响现有采集主链路。

Project Structure

src/
  main.rs
  cli/
  adb/
  collectors/
  parsers/
  models/
  output/
  error/

About

Android 设备信息提取

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages