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之间的整数。嗯,这里要注意,有些手机厂商会魔改这个范围,不一定准。

小技巧: 如果你不确定某个key叫什么名字,可以用 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
警告: 不要设置过低的DPI(比如低于200),否则系统UI可能会错乱,甚至无法操作。我曾经手贱设了个160,结果桌面图标全挤在一起,解锁都费劲。最后只能进Recovery模式用ADB改回来。

21.5 知识体系图

下面这张图,帮你理清本章的核心逻辑:

系统设置修改知识体系 adb shell 系统设置 settings put / get wm 窗口管理 global 全局 system 系统 secure 安全 wm size 分辨率 wm density DPI wm overscan 实战:修改屏幕密度 wm density 临时修改 settings put 持久化

21.6 避坑指南

最后,分享几个我踩过的坑:

  • 改DPI前先记下原始值。我建议你用 adb shell wm density 查看后,截图或者记在备忘录里。万一改崩了,还能恢复。
  • 不要同时改分辨率和DPI。这两个参数互相影响,一起改容易出问题。先改一个,看看效果,再改另一个。
  • 部分厂商的ROM会限制修改。比如华为、小米的一些机型,改了DPI后系统UI会闪退。遇到这种情况,先查一下你的机型是否支持。
  • settings put 的 key 名要写对。大小写敏感,多一个空格都不行。我习惯先 settings list global 把key名复制出来,再粘贴到命令里。

好了,这一章的内容就这些。记住,系统设置修改是ADB里非常实用的技能,但也要小心使用。改之前想清楚,改之后验证一下,基本不会出大问题。

公众号:蓝海资料掘金营,微信deep3321