如何修改Android系统源码中smallest width的初始值
修改Android系统源码定制Smallest Width初始值
要定制smallest width(以下简称sw)的初始值,核心是修改系统中计算或赋值sw的逻辑,而非依赖开发者选项或adb命令。以下是具体实现步骤:
一、定位核心代码文件
smallestWidthDp的初始化逻辑主要在DisplayManagerService中,不同Android版本的文件路径略有差异:
- Android 10及以上:
frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java - 旧版本(如Android 8/9):
frameworks/base/services/core/java/com/android/server/wm/DisplayManagerService.java
二、修改方式(二选一)
方式1:直接硬编码固定值
找到buildDisplayInfoLocked方法中计算smallestWidthDp的代码段,替换为自定义固定值:
// 原计算逻辑(示例) displayInfo.smallestWidthDp = Math.min(displayInfo.logicalWidthDp, displayInfo.logicalHeightDp); // 修改为自定义值,比如600dp displayInfo.smallestWidthDp = 600;
方式2:通过设备配置文件动态配置
如果需要保留机型适配灵活性,可通过设备overlay配置文件自定义:
- 在设备专属overlay目录(如
device/[厂商]/[机型]/overlay/frameworks/base/core/res/res/values/config.xml)添加配置项:
<integer name="config_customSmallestWidthDp">600</integer>
- 回到DisplayManagerService的
buildDisplayInfoLocked方法,读取该配置并替换计算逻辑:
// 读取自定义配置 int customSw = context.getResources().getInteger(com.android.internal.R.integer.config_customSmallestWidthDp); // 优先使用自定义值,无配置则保留原计算逻辑 displayInfo.smallestWidthDp = customSw > 0 ? customSw : Math.min(displayInfo.logicalWidthDp, displayInfo.logicalHeightDp);
三、验证修改效果
- 重新编译系统源码并刷入设备
- 进入「开发者选项」查看「最小宽度」值,或通过命令验证:
adb shell dumpsys display | grep smallestWidthDp
输出结果应显示你设置的初始值。
注意:部分定制ROM可能会有额外的逻辑覆盖sw值,需结合具体厂商的代码调整。
内容的提问来源于stack exchange,提问作者user24483231
相关产品推荐
相关产品推荐

