厂商分屏与大屏定制:与 AOSP 基线的差异
2026/8/9大约 3 分钟大屏/折叠屏/自由窗口Android 14分屏厂商定制AOSP
厂商分屏与大屏定制:与 AOSP 基线的差异
上一章看了折叠屏。这一章回答:厂商的分屏、自由窗口与桌面模式在 AOSP 基础上扩展 了什么,定制边界在哪,适配兼容怎么处理?
先区分 AOSP 基线与厂商扩展
| 常见误解 | 正确理解 |
|---|---|
| 所有厂商分屏都一样 | 厂商在 AOSP 基础上各有扩展,交互与窗口策略不同 |
| 厂商功能一定兼容所有应用 | 扩展功能可能依赖特定窗口模式,应用需验证 |
| AOSP 没有多窗口 | AOSP 有分屏/自由窗口基线,厂商在其上增强 |
核心结论
- AOSP 提供分屏、Freeform、PiP 与窗口组织基线。
- 厂商扩展常见于:桌面模式、手势、任务栏、自由窗口策略。
- 扩展可能引入非标准窗口模式或交互,应用需实测。
- 适配兼容原则:按 AOSP 标准适配,再按目标厂商验证。
- 排障先确认“基线问题还是厂商扩展问题”。
基线 vs 扩展
逐步解释:
- 基线:分屏、Freeform、PiP 来自 AOSP。
- 扩展:厂商在基线上加桌面、手势与策略。
- 关系:扩展基于基线,但行为可能不一致。
常见厂商扩展点
| 扩展 | 常见形态 | 兼容注意 |
|---|---|---|
| 桌面模式 | 外接显示器窗口化 | 可调整大小、输入适配 |
| 手势导航 | 分屏/窗口手势 | 触控区域与焦点 |
| 任务栏 | 常驻任务入口 | 布局避让 |
| 自由窗口策略 | 任意窗口化 | 最小尺寸、模式变化 |
适配按 AOSP 标准做,再用目标设备回归。
源码证据
阅读目标:确认 AOSP 多窗口入口。
正文指针:WindowManagerService.java 的窗口模式处理;WindowOrganizer.java 的任务组织。
// WindowConfiguration.java(伪代码,行号以 r75 为准)
WINDOWING_MODE_SPLIT_SCREEN_PRIMARY = 3;
WINDOWING_MODE_FREEFORM = 5;这段代码证明: 分屏与 Freeform 是 AOSP 定义的窗口模式;厂商扩展围绕这些模式 做交互增强,而非另起一套。
验证与排障
环境:目标厂商设备或支持多窗口的模拟器。
adb shell dumpsys activity activities | grep -iE "windowingMode"
adb shell dumpsys window windows | grep -iE "bounds|Window #"
adb shell settings put global overlay_display_devices 1920,1080先确认窗口模式与 bounds 是否正常,再对比 AOSP 模拟器与厂商设备的行为差异。 “只有某厂商设备出问题”通常指向厂商扩展层。
常见误区
- “厂商功能是标准功能”:可能只在特定设备存在。
- “AOSP 没有多窗口”:基线已有分屏/Freeform。
- “按 AOSP 适配就不用测厂商”:扩展层仍需回归。
- “差异都是应用问题”:先确认基线行为。
延伸问题
- 如何区分厂商扩展与 AOSP 行为的差异?
- 厂商桌面模式的窗口策略如何影响应用?
- 多窗口兼容测试矩阵如何设计?
- 厂商补丁与 AOSP 升级的兼容风险是什么?
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
WindowConfiguration.java | 窗口模式 | 形态定义 |
WindowOrganizer.java | 任务组织 | 窗口管理 |
WindowManagerService.java | 模式处理 | 窗口行为 |
dumpsys activity | windowingMode | 排障 |
公共路径:frameworks/base/core/java/android/app/ 与 frameworks/base/services/core/java/com/android/server/wm/。行号以 r75 检索为准。
需要区分应用适配与系统行为时,见 大屏问题排查。