Android 12 默认连接USB为U盘模式,拔掉USB退出U盘模式

— a/alps/device/mediatek/sepolicy/basic/non_plat/adbd.te
+++ b/alps/device/mediatek/sepolicy/basic/non_plat/adbd.te
@@ -7,3 +7,4 @@

Purpose: Allow adbd to read KE DB

allow adbd aee_dumpsys_data_file:file r_file_perms;
allow adbd gpu_device:dir search;
+allow adbd adbd:capability { dac_override dac_read_search };
\ No newline at end of file
diff --git a/alps/device/mediatek/sepolicy/basic/non_plat/init.te b/alps/device/mediatek/sepolicy/basic/non_plat/init.te
old mode 100644
new mode 100755
index 862fd67eed5…51a202a0cd7
— a/alps/device/mediatek/sepolicy/basic/non_plat/init.te
+++ b/alps/device/mediatek/sepolicy/basic/non_plat/init.te
@@ -146,3 +146,5 @@ domain_auto_trans(init, postinstall_file, update_engine)
allow init sysfs_mtk_core_ctl:dir r_dir_perms;
allow init sysfs_mtk_core_ctl:file rw_file_perms;

+# add by ycj
+allow init mmcblk1p1_block_device:blk_file { write };
\ No newline at end of file
diff --git a/alps/device/mediatek/sepolicy/basic/non_plat/kernel.te b/alps/device/mediatek/sepolicy/basic/non_plat/kernel.te
old mode 100644
new mode 100755
index 3ce11ae7cc3…728df61175c
— a/alps/device/mediatek/sepolicy/basic/non_plat/kernel.te
+++ b/alps/device/mediatek/sepolicy/basic/non_plat/kernel.te
@@ -85,3 +85,6 @@ allow kernel mtk_audiohal_data_file:file write;

Date: WK19.03

allow kernel expdb_block_device:blk_file rw_file_perms;
+
+# add ycj ums
+allow kernel mmcblk1p1_block_device:blk_file { read write };
\ No newline at end of file
diff --git a/alps/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/alps/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceMana

<think>我们正在讨论Android系统中如何默认启用USB调试和U模式(即MTP模式)。这些设置通常在系统构建时配置,涉及系统属性(systemproperties)和系统配置文件。注意,这些设置通常需要系统级权限(如root或系统签名)才能修改,并且修改后需要重新构建系统镜像。###1.**默认启用USB调试**USB调试(USBDebugging)是开发者选项中的一个功能。要默认启用它,需要设置系统属性`persist.sys.usb.config`和`sys.usb.config`,以及设置`Settings.Global.ADB_ENABLED`的值为1。####关键步骤:-**修改系统属性**:在系统构建时,通过`system.prop`文件或`init`脚本设置属性。-**修改系统数据库**:在系统首次启动时,将`Settings.Global.ADB_ENABLED`设置为1。####具体方法:**a.通过`system.prop`设置属性(适用于AOSP构建)**在设备特定的`system.prop`文件中(例如`device/<manufacturer>/<device>/system.prop`),添加以下行:```#默认启用adbpersist.sys.usb.config=adbsys.usb.config=adb```**b.通过`init`脚本设置属性**在`init.rc`或设备特定的init脚本中,添加:```onbootsetproppersist.sys.usb.configadbsetpropsys.usb.configadb```**c.修改系统设置数据库(需要系统权限)**在系统启动时,通过一个具有系统权限的应用或脚本修改全局设置。例如,在系统服务中调用:```javaSettings.Global.putInt(getContentResolver(),Settings.Global.ADB_ENABLED,1);```或者,在系统应用(如`SettingsProvider`)的初始化代码中添加。**d.修改`SettingsProvider`的默认值(AOSP源码修改)**在AOSP源码中,修改`SettingsProvider`的默认值。文件路径:`frameworks/base/packages/SettingsProvider/res/values/defaults.xml````xml<!--设置ADB_ENABLED默认值为1--><boolname="def_adb_enabled">true</bool>```###2.**默认启用U模式(MTP模式)**U模式通常指的是MTP(MediaTransferProtocol)模式默认USB连接模式可以通过系统属性`persist.sys.usb.config`和`sys.usb.config`设置。####设置方法:**a.在`system.prop`中设置**在`system.prop`文件中设置:```#默认启用MTP和ADBpersist.sys.usb.config=mtp,adbsys.usb.config=mtp,adb```注意:这里同时启用了MTP和ADB,如果不需要ADB,可以去掉`adb`。**b.通过`init`脚本设置**在init脚本中:```onbootsetproppersist.sys.usb.configmtp,adbsetpropsys.usb.configmtp,adb```###3.**系统构建配置(Android.mk或Android.bp)**如果上述方法不生效,可能需要检查构建配置。确保在构建系统镜像时,这些属性被正确包含。###4.**调试与验证**-**查看当前USB配置**:使用ADB命令(如果ADB已启用):```adbshellgetproppersist.sys.usb.configadbshellgetpropsys.usb.config```-**查看ADB启用状态**:```adbshellsettingsgetglobaladb_enabled```###5.**注意事项**-**安全性**:默认启用USB调试会降低设备安全性,因为任何连接电脑都可以通过ADB访问设备。-**用户数据**:修改这些默认设置通常需要重新构建系统镜像,并刷入设备。-**Android版本差异**:不同Android版本中,设置的位置可能有所不同,请参考对应版本的源码。###6.**代码示例(修改`SettingsProvider`)**在`SettingsProvider`的`loadSettings`方法中(`frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java`),可以添加:```javaif(!Global.getInt(resolver,Global.ADB_ENABLED,0)){Global.putInt(resolver,Global.ADB_ENABLED,1);}```###引用说明以上方法参考了Android源码和开发者文档[^2][^4]。§§相关问题§§1.如何在Android系统构建时默认禁用USB调试?2.如何通过ADB命令临时启用MTP模式?3.Android系统中USB配置属性有哪些可选值?4.如何为特定设备定制默认USB配置?</think>### Android 默认启用 USB 调试 和 U模式 的配置方法 在 Android 系统中,默认启用 USB 调试和 U 模式(MTP/PTP)需要通过系统级配置实现。以下是具体实现方法: #### 1. **默认启用 USB 调试** 需修改系统属性配置文件: ```makefile # device/<manufacturer>/<device>/system.prop persist.sys.usb.config=mtp,adb # 同时启用MTP和ADB sys.usb.config=mtp,adb persist.service.adb.enable=1 # 强制启用ADB ``` **关键代码修改**: ```java // frameworks/base/services/core/java/com/android/server/usb/UsbService.java public void systemReady() { if (SystemProperties.getInt("persist.service.adb.enable", 0) == 1) { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED, 1); // 强制设置ADB为开启状态 } } ``` #### 2. **默认启用 U模式 (MTP/PTP)** 修改 USB 配置属性: ```makefile # device/<manufacturer>/<device>/init.<device>.rc on boot setprop sys.usb.config mtp # 默认MTP模式 setprop sys.usb.state mtp ``` **内核配置支持**: ```dts /* kernel/arch/arm64/boot/dts/<soc>.dtsi */ &usb0 { dr_mode = "peripheral"; // 设备模式 status = "okay"; }; &usb_phy { status = "okay"; }; ``` #### 3. **系统构建配置** 在设备 Makefile 中声明: ```makefile # device/<manufacturer>/<device>/device.mk PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.usb.config=mtp,adb \ sys.usb.config=mtp,adb \ persist.service.adb.enable=1 ``` #### 4. **验证方法** ```shell adb shell getprop | grep usb # 应输出: # [persist.sys.usb.config]: [mtp,adb] # [sys.usb.config]: [mtp,adb] adb shell settings get global adb_enabled # 应输出:1 ``` #### 5. **注意事项** 1. 需要系统签名权限或 root 权限 2. 修改后需重新编译系统镜像 3. 安全性风险:默认开启 ADB 会降低设备安全性 4. U 模式需内核支持对应的 USB gadget 驱动 > **实现原理**:通过 `SystemProperties` 设置持久化属性,在系统启动时由 `init` 进程加载,`UsbService` 读取属性值并应用到系统设置[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值