1. 修改背景
Link8 项目中需要调整系统默认显示密度,将 Android 系统的逻辑 DPI 从 480 修改为 320。
对应修改文件:
mediatek/vendor/mgvi_t_64_wifi_armv82/device.mk
修改内容如下:
-PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=480
+PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=320
2. DPI 是什么意思?
DPI 全称是:
Dots Per Inch
意思是:每英寸显示多少个像素点。
但是在 Android 系统中,ro.sf.lcd_density 配置的 DPI 一般不是屏幕真实物理 DPI,而是系统用于 UI 缩放的逻辑密度。
也就是说:
ro.sf.lcd_density 控制的是 Android 界面显示大小
它会影响:
- 字体大小
- 图标大小
- 状态栏大小
- 导航栏大小
- Launcher 桌面布局
- Settings 设置界面布局
- App 中使用 dp/sp 单位的控件大小
3. ro.sf.lcd_density 的作用
本次修改的是:
PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=320
这个属性最终会写入系统属性:
ro.sf.lcd_density
Android Framework 会根据这个值计算 UI 缩放比例。
Android 中常用的换算公式是:
px = dp × dpi / 160
其中:
| 参数 | 含义 |
|---|---|
| px | 实际显示像素 |
| dp | Android 布局单位 |
| dpi | 系统逻辑密度 |
| 160 | Android 基准密度 mdpi |
4. 480 DPI 和 320 DPI 的区别
原配置:
ro.sf.lcd_density=480
对应:
xxhdpi
缩放倍数 = 480 / 160 = 3.0
修改后:
ro.sf.lcd_density=320
对应:
xhdpi
缩放倍数 = 320 / 160 = 2.0
举例说明:
假设一个按钮宽度是:
100dp
在 480 DPI 下:
100dp × 480 / 160 = 300px
在 320 DPI 下:
100dp × 320 / 160 = 200px
所以从 480 修改为 320 后,同样的控件会变小。
5. 修改后的实际显示效果
将 DPI 从 480 修改为 320 后,系统 UI 会出现以下变化:
1. 字体变小
2. 图标变小
3. 控件变小
4. 页面显示内容变多
5. 整体界面更加紧凑
简单理解:
480 DPI:界面更大,内容显示更少
320 DPI:界面更小,内容显示更多
6. Android 常见 DPI 档位
| DPI | Android 密度档位 | 说明 |
|---|---|---|
| 160 | mdpi | 基准密度 |
| 240 | hdpi | 高密度 |
| 320 | xhdpi | 超高密度 |
| 480 | xxhdpi | 超超高密度 |
| 640 | xxxhdpi | 超超超高密度 |
本次修改:
480 → 320
也就是:
xxhdpi → xhdpi
7. 修改影响范围
7.1 会影响的部分
该修改主要影响 Android 系统显示层面的 UI 缩放,包括:
Launcher
SystemUI
Settings
状态栏
导航栏
桌面图标
字体显示
App 默认布局大小
资源密度选择
部分应用可能会因为 DPI 变化,优先加载 xhdpi 资源,而不是 xxhdpi 资源。
7.2 不会直接影响的部分
该修改不会直接影响以下硬件相关功能:
LCD 屏幕真实分辨率
LCD timing
TP 触摸坐标
TP 驱动
显示屏硬件参数
FrameBuffer 分辨率
也就是说,修改 DPI 不等于修改屏幕分辨率。
屏幕分辨率还是原来的物理分辨率,只是 Android UI 的显示比例发生了变化。
8. 验证方法
烧录新版本后,可以通过 adb 验证属性是否生效。
8.1 查看 ro.sf.lcd_density
adb shell getprop ro.sf.lcd_density
预期结果:
320
8.2 查看当前 wm density
adb shell wm density
可能输出:
Physical density: 320
如果之前有手动设置过 density,也可能会看到类似:
Physical density: 320
Override density: xxx
如果存在 Override density,说明设备上可能被手动修改过显示密度,需要先恢复:
adb shell wm density reset
8.3 查看 display 信息
adb shell dumpsys display | grep -i density
用于确认系统 Display 相关密度信息。
9. 验证重点
修改完成后,需要重点确认以下内容:
1. 开机后系统界面是否正常显示
2. Launcher 图标大小是否符合预期
3. 状态栏、导航栏显示是否正常
4. 设置界面是否存在布局异常
5. 常用 App 是否存在文字过小、按钮过小问题
6. 横竖屏切换是否正常
7. 截图、录屏显示比例是否正常
8. CTS/GMS 相关显示项是否受影响
10. 可能风险
DPI 从 480 降到 320 后,界面会明显变小。
可能出现的问题包括:
1. 字体偏小,影响可读性
2. 图标偏小,影响触控体验
3. 部分第三方 App 布局变紧凑
4. 某些页面可能出现空白区域变多
5. 个别 App 可能根据 density 加载不同资源
如果客户反馈界面过小,可以考虑调整到中间值,例如:
360
400
420
但是否能使用中间 DPI,需要结合项目 UI 效果和客户需求确认。
11. 修改结论
本次修改将 Link8 项目的默认显示密度从 480dpi 调整为 320dpi。
修改前:
PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=480
修改后:
PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=320
该修改的核心作用是:
降低 Android 系统逻辑显示密度,使 UI 元素、字体、图标整体变小,从而提升单屏可显示内容量。