
各位 Android 爱好者们,大家好。
Android 正在全面推进自适应布局。应用不再只面对一种手机尺寸,开发者也应该让同一套功能在更多设备形态上都能正常使用。
但写布局只是第一步,真正花时间的往往是测试。为了确认应用在每一种形态下都显示正常、功能完好,得在多台设备上反复测试。
屏幕形态也在不断增加。
华为通过鸿蒙系统一直走在硬件形态的前面;其他 Android 厂商也在迅速跟进,这不,小米即将发布的"中"折屏就是一个例子。
以小米即将发布的"中"折屏为例:如果我想发布一款应用,做这个中折屏设备的适配,我总不能真的买一台吧!
等下,先不要急。
当前版本的 Android Studio 自带了 Resizable Emulator,可以手动切换形态来验证布局。
当然,还有一种更加极客的方式:直接在终端里控制设备形态。adb emu 提供了一组控制台命令,让你不用打开控制面板,也能切换屏幕形态。
如果同时跑着多个模拟器,还可以通过序列号指定目标设备:
sh
adb -s <serial> emu <command> <parameter>
这篇文章,我们就看看这几条命令都能做什么。
从折叠说起
要测试折叠屏特有的用户路径和布局配置,可以直接用命令折叠、展开模拟器:
sh
adb emu fold
不过,第一次输入这个命令时,多半会碰到一个问题:设备没有发生任何变化。
那是因为,你要创建正确的 Resizable Emulator。

此处需要创建 Resizable 设备。
创建完毕之后,我们再试一次:
sh
KO: Device is not foldable
emmm,Google 到底行不行!
这里其实还有个小坑:

在创建完设备之后,需要在左上角选择 Foldable 设备。
点击之后,你的设备就会变成:

这样就对了!
现在,我们运行那条命令:
sh
adb emu fold

屏幕会变成类似手机屏幕的尺寸。也就是说,如果折叠屏模拟器当前是展开状态,这条命令会把它折起来,点亮(虚拟的)外屏,进入小屏配置。
展开则反过来:
sh
adb emu unfold

内屏重新点亮。这样一来,你可以立刻验证应用有没有保住状态,以及不同显示尺寸下的布局是不是符合预期,全程不用碰鼠标。
旋转
正确处理旋转,是自适应开发中,绕不开的地方。
sh
adb emu rotate
这条命令会让设备顺时针旋转 90°。配合它,你可以触发配置变更,测试应用对旋转的处理,包括状态恢复。

用传感器模拟姿态
那如果想把模拟器摆成特定的物理姿态,比如桌面模式(tabletop)呢?
先查一下有哪些姿态可用:
sh
adb emu posture
它会返回类似这样的列表:
sh
KO: Usage: "posture <posture_id>" 1: closed 2: half-opened 3: opened 4: flipped 5: tent
想要桌面模式,用 half-opened 对应的 ID 就行:
sh
adb emu posture 2
注意:不是每台虚拟设备都支持全部姿态。
Pixel Fold、Resizable AVD 这类标准模板只支持姿态 1、2、3;在这些模板上设置 4 或 5,会返回错误。
sh
KO: Failed to set posture
Resizable Emulator
Resizable Emulator 可以在不同尺寸之间切换。配合 adb emu,一条命令就能切到指定的预设。
动手之前,先查一下有哪些预设:
sh
adb emu resize-display
返回可用预设列表:
sh
KO usage: "resize-display <index>" 0: phone 1: unfolded 2: tablet
接着传入想要的 ID,模拟器就会变成对应尺寸。
假设现在我想变成 tablet 尺寸:
sh
adb emu resize-display 2

各位需要稍微等下,这个命令执行之后,模拟器变化特别慢,应该是还没有优化好。
现在就开始
把这些 adb 命令加进命令行工作流后,就不用同时开好几台模拟器了,能省下时间和资源,最后省下的还是钱。
那么,开发者们,打开终端,启动模拟器,开始折腾那些各种各样的屏幕吧!
一点想法
这几条命令正好覆盖了自适应测试里最机械的那部分:折叠、旋转、姿态、尺寸。
我之前在 Android CLI 那篇文章里聊过一个趋势:终端正在逐渐成为 Android 开发的一等入口。
adb emu 这些命令也是这个方向的一部分。它们不只方便人操作,也能写进脚本、交给 AI Agent 执行;相比在模拟器窗口里反复点击,这种方式更容易复现。
换句话说,下一次让 AI 帮你验证折叠屏布局时,不妨直接告诉它:adb emu fold。
哦,对了,别忘了 android cli 本身还可以添加 skill。