当前位置: 首页 > news >正文

[特殊字符] 一文看懂:Android 系统中如何“默认开启/关闭 USB 调试”?

——从getprop/setprop到客制化配置的完整解析

作者:Qwen
发布于:2025年4月
适用读者:Android 系统工程师、ROM 定制开发者、OEM 厂商、嵌入式设备调试人员


🔍 场景引入:为什么需要“默认开启 USB 调试”?

你是否遇到过这些情况?

  • 出厂的设备无法通过 USB 连接 ADB,必须手动进“开发者选项”打开?
  • 测试部门抱怨每台新机都要点十几次才能调试?
  • 客户要求“开发版固件默认开启 ADB,量产版默认关闭”?

在 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是什么?

✅ 它是一个持久化系统属性(Persistent System Property)

  • persist.开头的属性,会被 Android 写入/data/property/目录下的文件中。
  • 即使重启设备,值也不会丢失(普通setprop设置的属性会重置)。
  • 类似 Windows 的注册表项或 Linux 的配置文件。

✅ 它控制USB ADB 调试的默认开关

  • 当值为true:设备插入 USB 后,自动允许 ADB 调试(无需手动确认)。
  • 当值为false:即使开启了“开发者选项”,仍需手动点击“允许调试”。

💡 注意:此属性通常由系统服务(如UsbDeviceManager)读取,并影响ro.adb.secure行为。


🛠️ 第二步:手动测试(开发阶段)

你可以通过 ADB 快速验证:

# 查看当前状态 adb shell getprop persist.sys.usbAdbEn # 临时开启(重启后失效) adb shell setprop persist.sys.usbAdbEn true # 永久生效?不行!因为 /data 分区在恢复出厂时会被清空。

所以,要让设置“永久生效且出厂即用”,不能靠运行时命令,而要在系统构建阶段就写入配置。


🏭 第三步:客制化构建 —— 把配置“烧”进系统

这就是你看到的那段脚本的真正用途!

📁 背景:什么是.cusCUS_MK_PATH

  • 在 Rockchip、全志等国产平台中,厂商常使用客制化配置文件(如customer.cuscust.mk)来管理客户专属设置。
  • $CUS_MK_PATH就是指向这个配置文件的路径,例如:
    out/target/product/rk3568/cust.mk

📜 脚本逻辑详解

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
  • $ENABLE_DEFAULT_USB_ADB:一个构建参数,通常来自:
    • 环境变量(如export ENABLE_DEFAULT_USB_ADB=Y
    • 客户配置文件(如customer_abc.cfg
    • CI/CD 流水线传参
  • >> $CUS_MK_PATH:将配置追加到客制化文件末尾。
  • \\:用于 Makefile 多行续行(因cust.mk本质是 Makefile 片段)。

✅ 最终效果

构建系统在打包system.imgvendor.img时,会读取cust.mk,并将persist.sys.usbAdbEn=true写入系统属性初始化脚本(如default.propbuild.prop的扩展机制)。

设备首次启动时,该属性即被加载,ADB 默认开启


🌐 实际应用场景对比

场景配置方式用户体验
消费级手机(如小米、华为)默认false,强制用户手动开启安全,防恶意调试
工业平板 / POS 机默认true(通过.cus配置)方便远程维护、批量调试
教育设备 / 儿童手表默认false,且隐藏开发者选项防止误操作
内部测试固件构建时传ENABLE_DEFAULT_USB_ADB=Y提升测试效率

🔒 安全提醒:默认开启 ADB 有风险!

虽然方便,但默认开启 ADB 可能带来安全隐患

  • 攻击者插入 USB 线即可获取 root shell(若已 root)
  • 泄露敏感日志、应用数据
  • 绕过锁屏(某些旧版本 Android)

最佳实践建议

  • 量产设备:默认关闭false
  • 开发/测试固件:默认开启true),并通过不同.cus文件区分版本
  • 结合ro.adb.secure=1persist.sys.usb.config=mtp,adb精细控制

🧪 附:如何验证配置是否生效?

  1. 刷入固件后执行

    adb shell getprop persist.sys.usbAdbEn # 应输出 true 或 false
  2. 检查属性文件

    adb shell cat /data/property/persist.sys.usbAdbEn
  3. 查看构建产物

    cat out/target/product/xxx/cust.mk | grep usbAdbEn

✅ 总结:三句话掌握核心

  1. persist.sys.usbAdbEn是控制 USB ADB 默认状态的关键系统属性。
  2. 运行时setprop只是临时方案,真正“出厂即用”需在构建阶段写入客制化配置(如cust.mk)。
  3. 通过if [ "$ENABLE..." = "Y" ]脚本,可灵活支持多客户、多版本的差异化需求。
http://www.gsyq.cn/news/153813.html

相关文章:

  • 基于Uniapp的派出所业务管理系统微信小程序(程序+文档+讲解)
  • 医疗自动标注漏医生隐写症状 后来补NLP规则引擎才救回诊断准确率
  • Windows系统文件Vb5stkit.dll丢失损坏 下载修复
  • 揭秘Android定制:标签如何通过脚本操控系统
  • FX5U Active Socket TCP通讯FB 功能块 有几个通道,就拖几个FB,FB里...
  • Windows系统文件url.dll丢失损坏 下载修复
  • 第六十六篇
  • [模式识别-从入门到入土] 组合分类器
  • 装配制造业 - 风机核心产品
  • 12-22 关于顺FENG在数字化转型方向上的思考
  • 2025 MBA必备!10个降AI率工具测评榜单
  • 禅道创建成品
  • 从化房地产开发公司选哪家:官方排名与深度解析 - 品牌测评家
  • 流量洪峰下的交通指挥家:详解负载均衡与限流实战
  • 【场景篇】这家头部家纺品牌的AI能力底座王牌是AI系统工程
  • Java毕设选题推荐:基于springboot的物流管理系统基于Springboot+Vue智能物流管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 别再自己飞无人机了!这4个网站,高清航拍素材直接免费用!
  • 探寻辉昂印刷厂:研发、排版与团队实力揭秘
  • Unity Collider 技术文档
  • Vue.js 中 Axios 的使用学习感悟与实践总结
  • 从ProfiNet转DeviceNet:看工业智能网关如何让伺服贴标机“即插即用”
  • DeviceNet转ProfiNet工业网关助力风机振动在线诊断
  • # 面试官冷笑:连GET和POST的区别都答不全?!(附避坑清单+实战案例)
  • 2025造景石厂家推荐排行榜:从产能到质量全方位对比 - 爱采购寻源宝典
  • 学长亲荐10个AI论文工具,继续教育论文写作必备!
  • 城市仿真软件:CityEngine_(1).CityEngine概述
  • Vue.js前端框架技术
  • 2025截止阀厂家推荐排行榜:从产能到质量权威解析 - 爱采购寻源宝典
  • 2025年最强AI写论文神器!8款工具10分钟万字文献搞定!
  • nodeJs安装