【定制Android系统】Android 7.1 默认的 USB 配置模式,默认的 usb debug 配置

本文介绍如何通过修改源码实现不同版本Android系统中USB连接模式的定制,包括ENG版默认开启ADB及MTP功能,USER版仅启用MTP功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:在 user 版中,插入 usb 连接电脑时,默认只有 mtp (传文件)功能,关闭 adb 功能。在 eng 版中,插入 usb 连接电脑时,默认打开 adb 功能,且兼具 mtp (传文件)功能。
提示:

  • Android 4.4 之后貌似修改了整个 usb 模式配置的 方案,从 DatabaseHelper.java 中配置默认功能是行不通的了。
  • 试图在 SystemServer.java 中,Android 第一次启动时 setSystemProperties 也是行不通的。
  • 注意,尽量不要使用 .mk 的方法添加 PRODUCT_PROPERTIES_OVERRIDES persist.sys.usb.config 的方案来配置,这种适合配置无论 eng 还是 user 均使用同一模式的情况。但是,同样不建议这么做,因为这么做之后,下面我将要说的这个方案就会不起作用了。

解决方案:

一种比较合理的解决方案是,尽量少地改动源码。从 build 目录下进行修改。
首先确认一下,build/core/main.mk 中关于 ro.debuggable 的配置源码没有被芯片供应商改动过。其源码应为:

420 ifeq (true,$(strip $(enable_target_debugging)))
421   # Target is more debuggable and adbd is on by default
422   ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
423   # Enable Dalvik lock contention logging.
424   ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
425   # Include the debugging/testing OTA keys in this build.
426   INCLUDE_TEST_OTA_KEYS := true
427 else # !enable_target_debugging
428   # Target is less debuggable and adbd is off by default
429   ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
430 endif # !enable_target_debugging

其大致意思是, 如果编译的是 eng 版本,那么就把 ro.debuggable 属性置为 1,否则,置为0。

紧接着,在 build/tools/post_process_props.py 中,对相关默认配置进行修改,其源码本为:

28  # Put the modifications that you need to make into the /system/build.prop into this
29  # function. The prop object has get(name) and put(name,value) methods.
30  def mangle_build_prop(prop):
31      pass
32
33  # Put the modifications that you need to make into the /default.prop into this
34  # function. The prop object has get(name) and put(name,value) methods.
35  def mangle_default_prop(prop):
36      # If ro.debuggable is 1, then enable adb on USB by default
37      # (this is for userdebug builds)
38      if prop.get("ro.debuggable") == "1":
39          val = prop.get("persist.sys.usb.config")
40      if "adb" not in val:
41          if val == "":
42              val = "adb"
43          else:
44              val = val + ",adb"
45          prop.put("persist.sys.usb.config", val)
46  # UsbDeviceManager expects a value here.  If it doesn't get it, it will
47  # default to "adb". That might not the right policy there, but it's better
48  # to be explicit.
49  if not prop.get("persist.sys.usb.config"):
50      prop.put("persist.sys.usb.config", "none");

其大致意思是,如果 ro.debuggable == 1,即 eng 版本,那么先获取一下 persist.sys.usb.config 的值,如果 “adb” 不存在于这个值里面,就把 “adb” 加进去。然后再设置一下 persist.sys.usb.config 这个值。如果 ro.debuggable == 0 的话,就不操作,如果无法获取 persist.sys.usb.config 的值,就把它置为 “none”。
因此,如果之前在 .mk 文件中设置过 persist.sys.usb.config 的属性,这里也可以把 “adb” 从原属性中去掉,但是会显得很混乱,因此是不建议从 .mk 文件中配置默认的 USB 连接配置的。
根据本文的需求,可以将上述源码做如下修改:

28  # Put the modifications that you need to make into the /system/build.prop into this
29  # function. The prop object has get(name) and put(name,value) methods.
30  def mangle_build_prop(prop):
31      pass
32
33  # Put the modifications that you need to make into the /default.prop into this
34  # function. The prop object has get(name) and put(name,value) methods.
35  def mangle_default_prop(prop):
36      # If ro.debuggable is 1, then enable adb on USB by default
37      # (this is for userdebug builds)
38      if prop.get("ro.debuggable") == "1":
39          val = prop.get("persist.sys.usb.config")
40      if "adb" not in val:
41          if val == "":
42              val = "mtp,adb"
43          else:
44              val = val + ",adb"
45          prop.put("persist.sys.usb.config", val)
46  # UsbDeviceManager expects a value here.  If it doesn't get it, it will
47  # default to "adb". That might not the right policy there, but it's better
48  # to be explicit.
49  if not prop.get("persist.sys.usb.config"):
50      prop.put("persist.sys.usb.config", "mtp");

如此,即可达到,eng 版默认为 mtp、adb 模式,即 默认打开了 usb debug。而 user 版默认为 mtp 模式。
但是,刚刚在写这篇文章时发现一个问题,如果之前配置过 persist.sys.usb.config 属性,但不是 mtp,则会出现 未知属性 val 和 adb 的模式。
此外,貌似,如果在 device/ 目录下使用 .mk 文件仅对 mtp 进行配置时,即只写入 persist.sys.usb.config=mtp 的话,同样无法满足需求。这种情况我记不清具体的现象了。

<think>好的,我现在需要回答用户关于如何在Android 7.1系统中修改默认分辨率的问题。首先,我得仔细看看用户提供的引用内容,里面有五个引用,都是关于修改分辨率或其他系统设置的。用户的需求很明确,他们想通过定制系统设置来改变默认的分辨率,特别是在HDMI输出方面。 首先,我需要确定用户提到的引用中哪些部分相关。引用1和引用4提到了修改HDMI的默认分辨率,特别是引用1中修改了hdmi_settings.xml文件,将默认值从2改为4。引用2提到在system.prop中添加persist.sys.resolution.aux属性。引用3则是修改ro.sf.lcd_density属性,这可能与屏幕密度有关,但用户的问题是关于分辨率的。引用5是关于音量的修改,可能不相关,但需要确认是否有其他相关内容。 接下来,我需要整合这些信息,找出Android 7.1系统中修改默认分辨率的不同方法。可能涉及的地方包括系统属性设置、配置文件修改(如XML资源文件)、以及内核或驱动层的代码调整。比如,引用1中的XML修改可能是在系统设置应用中调整HDMI分辨率的选项默认值。引用2的系统属性persist.sys.resolution.aux可能是在系统启动时设置的默认分辨率。引用4的代码修改可能涉及到HDMI驱动的初始化部分,直接设置默认的分辨率参数。 然后,我需要将这些方法分步骤说明,确保用户能够理解如何操作。例如,修改系统设置应用的XML文件可能需要找到对应的数组资源,调整默认值的索引。而修改系统属性可能需要编辑build.prop或system.prop文件,或者通过setprop命令。另外,驱动层的代码修改可能涉及内核模块或硬件抽象层的代码,需要重新编译相应的模块。 需要注意的是,不同的设备可能有不同的实现方式,特别是像RK3399这样的硬件平台,可能需要特定的驱动调整。例如,引用4中的代码修改是在HDMI初始化时设置分辨率,这可能涉及到解析EDID或强制指定分辨率。同时,用户提到的焊接HDMI线不稳定,可能需要通过降低分辨率来确保稳定性,这也是引用2中提到的情况。 此外,用户可能还需要了解如何测试修改后的效果,例如通过adb命令检查属性是否生效,或者观察系统启动后的显示设置。还要提醒用户备份原有配置,避免修改导致系统无法启动。 最后,生成相关问题,帮助用户深入理解其他可能相关的方面,比如修改其他显示参数或系统默认设置的方法,或者在不同设备上的适配问题。</think>在Android 7.1系统中修改默认分辨率,需根据显示接口类型(如HDMI、LCD)和硬件平台(如RK3399)选择对应方法。以下是三种主要实现方式: ### 一、修改系统设置应用配置(HDMI场景) 1. 定位到设置应用的XML配置文件: ```xml package/app/settings/res/xml/hdmi_settings.xml ``` 2. 调整分辨率默认值索引: ```xml <ListPreference android:defaultValue="4" <!-- 原值为2,对应分辨率数组索引 --> android:entries="@array/hdmi_resolution_entries" android:entryValues="@array/hdmi_resolution_values"/> ``` 需同步修改`arrays.xml`中定义的分辨率数组顺序[^1] ### 二、通过系统属性强制设置 1. 在`system.prop`文件中添加持久化属性: ```properties persist.sys.resolution.aux=1920x1080p60 # HDMI副屏分辨率 ro.sf.lcd_density=320 # 屏幕密度(与物理分辨率相关)[^3] ``` 2. 通过adb命令临时验证: ```shell adb shell setprop persist.sys.resolution.aux 1280x720 ``` ### 三、驱动层代码修改(RK3399示例) 在HDMI驱动初始化代码中强制指定分辨率: ```c // 修改内核驱动文件 if (edid) { // 覆盖EDID检测结果 dev_dbg(hdmi->dev, "强制设置为3840x2160p@30Hz"); hdmi->mode = 3840x2160p30; } ``` 需重新编译内核并烧录固件[^4]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海Enoch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值