Android user编译版本 默认打开adb及关闭adb设备认证

本文介绍如何在Android的user模式下,默认开启ADB调试功能,通过修改main.mk文件中的配置实现,便于批量设备测试。

Android编译有3种方式:

  1. eng
  2. userdebug
  3. user

 

三种编译方式的不同,这里暂不做具体描述,但可以告诉大家如何去了解这三种编译方式产生的区别:

在source build/envsetup.sh   lunch xx之后,会将变量TARGET_BUILD_VARIANT赋值为eng或者userdebug或者user

然后你就可以在build目录下去grep TARGET_BUILD_VARIANT这个变量的使用情况,从而分析出这三种编译方式的区别

(注:想学习android编译原理的同学,可以仔细学习build目录,鼓励自己学习源代码)

 

 好了,开始正题,我们知道通常正式发布的android产品,如果你想使用adb来连接设备,那么需要进入开发者选项中打开允许adb调试的开关,那么你才能进行adb连接的,那么如果某种特殊的需求出现在你面前,“我们不想提供开发者选项,而且将有大批量的设备需要在user模式下进行测试“,这时你会想到的就是,那我把adb默认打开吧

 

打开方式如下:

打开build/make/core/main.mk文件

1,找到

ifeq($(user_variant),user)

    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1        ===>改成0

endif

 

2,找到

ifeq (true,$(strip $(enable_target_debugging)))

    xxxxxxxxxxxxxx

else

    ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0        ===>改成1

endif

修改上述两处地方后,再编译user版本的image,adb就是默认可以使用的了,也不需要设备验证

 

如果你对上面的两处修改做研究的话,就会发现其实真正影响adb的就是persist.sys.usb.config和ro.adb.secure这两个属性

然后你就可以从源码中这两个属性的使用来学习adb这个东东了,再具体点的我就不多说了,欢迎大家学习源代码后与我一起讨论,加油!

<think> 我们正在处理一个关于在Android user版本中默认打开adb调试的问题。根据用户提供的引用,主要涉及两个修改点: 1. 修改build/core/main.mk文件,将user版本的ro.debuggable属性设置为1。 2. 修改设备特定的device.mk文件(例如device/sprd/scx35/device.mk),设置ro.adb.secure=0关闭授权对话框。 但是,需要注意的是,这些修改是针对Android系统构建时的配置,因此需要重新编译整个系统。此外,不同的设备制造商可能有不同的配置方式,所以设备特定的路径可能有所不同。 下面我将详细说明步骤: ### 步骤1: 设置ro.debuggable=1 在Android的构建系统中,`ro.debuggable`属性决定了设备是否可调试。在user版本中,默认这个属性是0关闭)。我们需要将其设置为1(打开)。 根据引用[1]和[2]的内容,我们需要修改`build/core/main.mk`文件。具体修改如下: 找到以下代码段: ```makefile ifeq (true,$(strip $(enable_target_debugging))) # Target is more debuggable and adbd is on by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 # Include the debugging/testing OTA keys in this build. INCLUDE_TEST_OTA_KEYS := true else # !enable_target_debugging # Target is less debuggable and adbd is off by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 endif # !enable_target_debugging ``` 修改else分支中的`ro.debuggable=0`为`ro.debuggable=1`,这样即使是user版本(enable_target_debugging为false)也会设置ro.debuggable=1。 修改后: ```makefile ifeq (true,$(strip $(enable_target_debugging))) # Target is more debuggable and adbd is on by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 # Include the debugging/testing OTA keys in this build. INCLUDE_TEST_OTA_KEYS := true else # !enable_target_debugging # Target is less debuggable and adbd is off by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 # 修改这里 endif # !enable_target_debugging ``` ### 步骤2: 设置ro.adb.secure=0 为了关闭连接电脑时的授权对话框(即默认信任所有电脑),我们需要设置`ro.adb.secure=0`。这个属性通常在设备特定的makefile中设置,比如`device/<制造商>/<设备>/device.mk`。 如引用[1]中提到的路径:`device/sprd/scx35/device.mk`,我们需要在该文件中添加: ```makefile PRODUCT_PROPERTY_OVERRIDES += ro.adb.secure=0 ``` 或者在已有的`PRODUCT_PROPERTY_OVERRIDES`中添加该属性。 注意:不同设备的路径可能不同,你需要根据你的设备找到正确的device.mk文件。 ### 步骤3: 重新编译系统 完成上述修改后,需要重新编译整个Android系统,并烧录到设备上。使用以下命令编译: ```bash source build/envsetup.sh lunch <你的设备构建目标> make -j8 ``` ### 注意事项 1. **安全性**:这样修改后,任何电脑都可以通过adb连接到设备而不需要授权,存在安全风险。请确保只在开发或测试环境中使用。 2. **设备制造商差异**:不同设备制造商可能对adb默认行为有不同的定制,因此上述修改可能不适用于所有设备。 3. **Android版本差异**:上述修改基于较旧的Android版本(如Android 4.x),对于较新的Android版本,配置方式可能有所不同。例如,在Android 10及更高版本中,adb默认配置可能有变化。 ### 验证方法 烧录新系统后,可以通过以下步骤验证: 1. 使用USB连接设备到电脑。 2. 在电脑上运行`adb devices`,应该可以看到设备,并且没有授权提示。 3. 运行`adb shell`能够进入设备shell。 ### 相关问题 1.Android 10及以上版本中,默认打开adb调试的方法是否相同? 2. 如何在不重新编译整个系统的情况下启用user版本的adb调试? 3. 修改`ro.debuggable`和`ro.adb.secure`属性对系统安全有什么影响? 4. 除了上述方法,还有哪些途径可以开启user版本的adb调试? </think> ### Android User版本默认打开ADB调试的配置方法 在Android user版本中默认开启ADB调试,需要修改系统构建配置和属性设置。以下是完整操作步骤: #### 1. **修改系统构建配置** 在Android源码的`build/core/main.mk`文件中修改调试属性: ```makefile ifneq (true,$(strip $(enable_target_debugging))) # 将默认ro.debuggable设置为1(开启调试) ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 endif ``` **关键参数说明**: - `ro.debuggable=1`:开启系统调试模式(默认值为0) - 此修改使所有构建类型(包括user版本)默认开启ADB调试[^1][^2] #### 2. **关闭ADB授权提示** 在设备配置文件中(如`device/sprd/scx35/device.mk`)添加: ```makefile # 禁用USB连接授权弹窗 PRODUCT_PROPERTY_OVERRIDES += \ ro.adb.secure=0 ``` **属性作用**: - `ro.adb.secure=0`:禁用"信任此电脑"对话框 - 设置为1时将显示授权提示(默认行为)[^1] #### 3. **配置ADB服务** 在`system/core/rootdir/init.rc`中确保ADB服务自启: ```bash # 启动时自动运行adbd service adbd /sbin/adbd --root_seclabel=u:r:su:s0 class core socket adbd stream 660 system system disabled seclabel u:r:adbd:s0 on property:ro.debuggable=1 start adbd # 当debuggable=1时自动启动 ``` #### 4. **硬件调试接口配置(可选)** 通过UART端口抓取调试日志: 1. 硬件飞线连接TX引脚 2. 使用SecureCRT配置: ``` 协议: Serial 端口: COMxx (具体端口号) 波特率: 115200 数据位: 8 奇偶校验: None 停止位: 1 ``` #### 5. **编译与验证** 1. 执行全编译: ```bash make -j8 ``` 2. 刷机后验证: ```bash adb devices # 应显示设备ID无需授权 adb shell getprop ro.debuggable # 返回值应为1 ``` #### 安全警告 - 🔐 **风险提示**:此配置会降低设备安全性 - ️ **生产环境**:仅限工程样机使用,禁止在零售设备开启 - 🔑 **替代方案**:可通过`adb shell setprop persist.adb.enable 1`临时开启(需root) --- ### 相关问题 1. 如何在不重新编译的情况下临时开启user版本的ADB调试? 2. `ro.debuggable`和`ro.adb.secure`属性有何本质区别? 3. Android 13+版本中对ADB调试授权机制做了哪些安全改进? 4. 为什么user版本默认关闭ADB调试?有哪些安全考量? 5. 如何通过SEAndroid策略限制ADB调试的权限范围?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值