如何通过ADB命令快速获取Android设备的制造商信息?在多品牌设备混用的测试环境中,常遇到使用`adb devices`仅显示序列号而无法区分厂商的问题。能否通过shell命令直接读取设备制造商(如华为、小米、三星等)?常见尝试如`adb shell getprop ro.product.manufacturer`是否适用于所有Android版本?部分国产定制ROM是否存在属性名差异或权限限制导致获取失败?如何编写兼容性脚本统一获取制造商信息?
1条回答 默认 最新
扶余城里小老二 2025-11-21 09:15关注如何通过ADB命令快速获取Android设备的制造商信息
在多品牌设备混用的测试环境中,
adb devices命令虽然能列出连接的设备及其序列号,但无法直接显示设备的制造商信息。这给自动化测试、设备管理与故障排查带来了挑战。本文将从基础命令入手,逐步深入分析兼容性问题,并提供可落地的脚本解决方案。1. 基础ADB命令获取制造商信息
最常用的命令是通过读取系统属性来获取制造商名称:
adb shell getprop ro.product.manufacturer该命令返回设备制造商的标准名称,例如:
- 华为:HUAWEI
- 小米:Xiaomi
- 三星:samsung
- OPPO:OPPO
- vivo:vivo
此方法适用于大多数原生Android设备和主流厂商设备,在Android 5.0及以上版本中表现稳定。
2. 深入分析:系统属性的多样性与兼容性问题
尽管
ro.product.manufacturer是标准属性,但在部分国产定制ROM(如EMUI、MIUI、ColorOS)中,存在以下潜在问题:问题类型 说明 影响厂商 属性名差异 某些厂商使用非标准属性名 华为、魅族、一加 权限限制 Shell受限时无法访问getprop 部分低权限模式设备 空值返回 老旧或特殊固件未设置该字段 山寨机、测试样机 因此,单一依赖
ro.product.manufacturer存在风险。3. 多属性备选方案提升兼容性
为应对属性差异,建议构建多级查询策略。以下是常见替代属性:
ro.product.brand ro.product.vendor.manufacturer ro.product.odm.manufacturer ro.product.system.manufacturer ro.build.product其中,
ro.product.brand通常表示品牌名,也常用于识别厂商。例如:adb shell getprop ro.product.brand返回值如 "Huawei" 或 "Redmi",可辅助判断。
4. 编写兼容性脚本统一获取制造商信息
以下是一个 Bash 脚本示例,支持多设备并行识别,具备容错机制:
#!/bin/bash get_manufacturer() { local serial=$1 local output="" # 设置目标设备 export ANDROID_SERIAL=$serial # 定义候选属性列表 props=( "ro.product.manufacturer" "ro.product.brand" "ro.product.vendor.manufacturer" "ro.product.odm.manufacturer" ) for prop in "${props[@]}"; do output=$(adb shell getprop $prop 2>/dev/null | tr -d '\r\n' | xargs) if [ ! -z "$output" ] && [ "$output" != "[null]" ]; then echo "$serial|$output|$prop" return 0 fi done echo "$serial|Unknown|fallback" } # 主逻辑:遍历所有连接设备 devices=$(adb devices | tail -n +2 | grep -v "^$" | awk '{print $1}') for device in $devices; do result=$(get_manufacturer $device) IFS='|' read -r sn mfg source <<< "$result" printf "%-15s %-12s (via %s)\n" "$sn" "$mfg" "$source" done该脚本输出示例如下:
HTYDU1982608765 HUAWEI (via ro.product.manufacturer) ce12345abcde789 Xiaomi (via ro.product.brand) R58R95A7B9C samsung (via ro.product.manufacturer)
5. 高级方案:结合设备型号与映射表精准识别
对于更复杂的场景,可引入设备型号映射机制。流程如下:
graph TD A[获取设备序列号] --> B[执行adb shell getprop] B --> C{获取manufacturer?} C -- 成功 --> D[输出结果] C -- 失败 --> E[获取ro.product.model] E --> F[查本地厂商映射表] F --> G[返回推测厂商] G --> H[记录日志供后续优化]例如,建立一个简单映射文件
vendor_map.txt:POR-1L OnePlus MI 8 Xiaomi ELE-AL00 Huawei SM-G975F Samsung PGN618M OPPO
通过模型匹配进一步提升识别准确率。
6. 实际测试环境中的最佳实践
在CI/CD流水线或大规模测试平台中,推荐以下实践:
- 优先使用
ro.product.manufacturer作为主路径 - 设置超时机制防止卡死(如 adb 响应缓慢)
- 缓存已知设备的识别结果减少重复调用
- 记录未识别设备用于后续规则补充
- 结合 USB VID/PID 信息(通过 lsusb)做硬件层辅助判断
- 对返回值进行标准化处理(如转大写、去空格)
- 支持 JSON 输出格式便于集成
- 定期更新属性优先级列表以适配新机型
- 在Root设备上尝试读取 /system/build.prop 全量解析
- 使用Python封装实现跨平台支持
这些措施显著提升了在异构设备集群中的识别效率与稳定性。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报