C# 开发者必看:Visual Studio如何远程真机调试
2026/4/28 11:52:31
——从
getprop/setprop到客制化配置的完整解析
作者:Qwen
发布于:2025年4月
适用读者:Android 系统工程师、ROM 定制开发者、OEM 厂商、嵌入式设备调试人员
你是否遇到过这些情况?
在 Android 系统定制(尤其是面向企业、工业、IoT 设备)中,USB ADB 调试的默认状态是一个高频需求。而实现它,核心就藏在下面这三行代码里:
getprop persist.sys.usbAdbEn # 查看当前值 setprop persist.sys.usbAdbEn true # 手动开启(临时) # -- USB ADB模式默认状态(设置-其他设置-USB ADB) --# if [ "$ENABLE_DEFAULT_USB_ADB" = "Y" ]; then echo "persist.sys.usbAdbEn=true \\" >> $CUS_MK_PATH else echo "persist.sys.usbAdbEn=false \\" >> $CUS_MK_PATH fi别小看这几行,它背后涉及系统属性、持久化存储、客制化构建三大关键技术。下面我们一层层拆解。
persist.sys.usbAdbEn是什么?persist.开头的属性,会被 Android 写入/data/property/目录下的文件中。setprop设置的属性会重置)。true:设备插入 USB 后,自动允许 ADB 调试(无需手动确认)。false:即使开启了“开发者选项”,仍需手动点击“允许调试”。💡 注意:此属性通常由系统服务(如
UsbDeviceManager)读取,并影响ro.adb.secure行为。
你可以通过 ADB 快速验证:
# 查看当前状态 adb shell getprop persist.sys.usbAdbEn # 临时开启(重启后失效) adb shell setprop persist.sys.usbAdbEn true # 永久生效?不行!因为 /data 分区在恢复出厂时会被清空。所以,要让设置“永久生效且出厂即用”,不能靠运行时命令,而要在系统构建阶段就写入配置。
这就是你看到的那段脚本的真正用途!
.cus或CUS_MK_PATH?customer.cus或cust.mk)来管理客户专属设置。$CUS_MK_PATH就是指向这个配置文件的路径,例如:out/target/product/rk3568/cust.mkif [ "$ENABLE_DEFAULT_USB_ADB" = "Y" ]; then echo "persist.sys.usbAdbEn=true \\" >> $CUS_MK_PATH else echo "persist.sys.usbAdbEn=false \\" >> $CUS_MK_PATH fi$ENABLE_DEFAULT_USB_ADB:一个构建参数,通常来自:export ENABLE_DEFAULT_USB_ADB=Y)customer_abc.cfg)>> $CUS_MK_PATH:将配置追加到客制化文件末尾。\\:用于 Makefile 多行续行(因cust.mk本质是 Makefile 片段)。构建系统在打包system.img或vendor.img时,会读取cust.mk,并将persist.sys.usbAdbEn=true写入系统属性初始化脚本(如default.prop或build.prop的扩展机制)。
设备首次启动时,该属性即被加载,ADB 默认开启!
| 场景 | 配置方式 | 用户体验 |
|---|---|---|
| 消费级手机(如小米、华为) | 默认false,强制用户手动开启 | 安全,防恶意调试 |
| 工业平板 / POS 机 | 默认true(通过.cus配置) | 方便远程维护、批量调试 |
| 教育设备 / 儿童手表 | 默认false,且隐藏开发者选项 | 防止误操作 |
| 内部测试固件 | 构建时传ENABLE_DEFAULT_USB_ADB=Y | 提升测试效率 |
虽然方便,但默认开启 ADB 可能带来安全隐患:
✅最佳实践建议:
false)true),并通过不同.cus文件区分版本ro.adb.secure=1和persist.sys.usb.config=mtp,adb精细控制刷入固件后执行:
adb shell getprop persist.sys.usbAdbEn # 应输出 true 或 false检查属性文件:
adb shell cat /data/property/persist.sys.usbAdbEn查看构建产物:
cat out/target/product/xxx/cust.mk | grep usbAdbEnpersist.sys.usbAdbEn是控制 USB ADB 默认状态的关键系统属性。setprop只是临时方案,真正“出厂即用”需在构建阶段写入客制化配置(如cust.mk)。if [ "$ENABLE..." = "Y" ]脚本,可灵活支持多客户、多版本的差异化需求。