21、系统设置修改:adb shell settings put(修改系统设置)、adb shell wm(窗口管理)、实战:修改屏幕密度
说实话,系统设置修改这块,是我在ADB里用得最频繁的功能之一。你想想看,做Android开发或者测试的时候,经常需要调一些系统参数,比如屏幕密度、动画速度、字体大小。要是每次都去设置里翻半天,那效率也太低了。用ADB命令,一行代码搞定,这才是工程师该有的样子。
21.1 系统设置的三层体系
Android的系统设置,其实分三个层级。我刚开始接触时也搞混过,后来踩了坑才明白。
| 层级 | 命名空间 | 典型用途 | 是否需要root |
|---|---|---|---|
| 全局设置 | global | 飞行模式、屏幕超时、默认输入法 | 否(部分需系统权限) |
| 系统设置 | system | 屏幕亮度、音量、字体大小 | 否 |
| 安全设置 | secure | 锁屏方式、USB调试、安装未知来源 | 否(部分需系统权限) |
简单来说:global 是所有用户共享的,system 是每个用户自己的偏好,secure 是跟安全相关的敏感设置。我个人习惯,能不用secure就不用,因为改错了可能锁屏都进不去。
21.2 核心命令:settings put / get
命令格式其实很简单,就一句话:
adb shell settings [get|put] [global|system|secure] key [value]
举个例子,我想把屏幕超时改成5分钟:
adb shell settings put global screen_off_timeout 300000
注意单位是毫秒,300000毫秒就是5分钟。我之前有个同事,直接写了个300,结果屏幕3秒就灭了,他还以为是手机坏了。
再比如,查看当前屏幕亮度:
adb shell settings get system screen_brightness
返回的是一个0-255之间的整数。嗯,这里要注意,有些手机厂商会魔改这个范围,不一定准。
adb shell settings list global 列出所有global下的设置项。我经常用这招来找那些藏在系统深处的参数。
21.3 窗口管理:adb shell wm
wm命令,全称是Window Manager。它主要负责跟窗口、屏幕显示相关的操作。说白了,就是控制你的手机屏幕怎么展示内容。
常用的wm子命令:
- wm size:查看或修改屏幕分辨率
- wm density:查看或修改屏幕密度(DPI)
- wm overscan:调整屏幕显示区域边距
- wm density:这个我们马上要实战
查看当前分辨率:
adb shell wm size
输出类似:Physical size: 1080x2400
强行修改分辨率(需要系统权限):
adb shell wm size 720x1600
恢复默认:
adb shell wm size reset
我曾经在测试一款平板应用时,需要模拟不同屏幕尺寸。用wm size命令,几秒钟就能切换分辨率,比换设备快多了。
21.4 实战:修改屏幕密度
屏幕密度,也就是DPI(Dots Per Inch),决定了UI元素在屏幕上显示的大小。DPI越高,文字和图标越小,显示的内容越多。反之,DPI越低,元素越大,适合视力不太好的人。
为什么要改这个?我遇到过一种情况:某个应用在手机上显示正常,但在平板上字体大得离谱。这时候调一下DPI,问题就解决了。
查看当前DPI
adb shell wm density
输出:Physical density: 480
修改DPI
adb shell wm density 320
改完之后,屏幕会闪一下,然后UI立刻按新密度重新布局。不需要重启手机,这点很方便。
恢复默认DPI
adb shell wm density reset
结合settings命令持久化
注意,wm density 修改的是运行时参数,重启手机后会恢复。如果你想永久生效,可以用settings命令:
adb shell settings put global display_density_forced 320
这样即使重启,DPI也不会变。想恢复的话:
adb shell settings delete global display_density_forced
21.5 知识体系图
下面这张图,帮你理清本章的核心逻辑:
21.6 避坑指南
最后,分享几个我踩过的坑:
- 改DPI前先记下原始值。我建议你用
adb shell wm density查看后,截图或者记在备忘录里。万一改崩了,还能恢复。 - 不要同时改分辨率和DPI。这两个参数互相影响,一起改容易出问题。先改一个,看看效果,再改另一个。
- 部分厂商的ROM会限制修改。比如华为、小米的一些机型,改了DPI后系统UI会闪退。遇到这种情况,先查一下你的机型是否支持。
- settings put 的 key 名要写对。大小写敏感,多一个空格都不行。我习惯先
settings list global把key名复制出来,再粘贴到命令里。
好了,这一章的内容就这些。记住,系统设置修改是ADB里非常实用的技能,但也要小心使用。改之前想清楚,改之后验证一下,基本不会出大问题。