华为和荣耀应用市场如何关闭「平行视界」
1 背景
在华为平板或者折叠屏设备上,系统会为 TOP 级别且默认仅支持竖屏的 App 自动打开 平行视界(App Multiplier) 功能。该功能通过系统侧分屏把同一个 Activity 渲染到左右两侧,理论上可以提升大屏可用性。但如果你的应用:
- 只针对竖屏做了 UI 适配;
- 两侧窗口抢占资源导致逻辑/渲染混乱;
- 业务场景就是单屏显示(例如短视频、游戏、在线课堂)
那么,被 “强开” 平行视界不仅不会改善体验,反而会带来 UI 错位、资源浪费甚至 Crash。
- 问题:怎样优雅地告诉华为系统 "别给我分屏" ?
2 方案概览
官方公开文档只描述了如何启用 “平行视界”,而没有一句话告诉你 “关闭” 怎么做。经过实际踩坑与和 HUAWEI AppGallery 运营侧沟通,总结出两条可行路径:
路径 | 是否修改代码 | 生效粒度 | 建议场景 |
---|---|---|---|
A. 运营商白名单下架 | 否 | 整个应用 | 极少数:和商务/运营对接即可,但周期不可控 |
B. 在 APK 内显示声明排除设备 | 是 | 代码内可控 | 开发者最常用、可随版本迭代 |
本文只聚焦 B 方案——在 easygo.json
里加入一行配置,即可让平板 & 折叠屏默认 不开启 平行视界。
3 什么是 easygo.json
easygo.json
是华为 MagicWindow 组件(平行视界的实现载体)的 声明式配置文件。系统解析该 JSON 后决定:
- 是否对 App 打开分屏;
- 分屏模式(购物 / 导航 / 自定义);
- 活动对 (activityPairs) 规则;
- UX 补偿参数(拖拽、旋转兼容、分屏比例等)。
更详细的字段含义,可以去查阅官网示例等文档说明。
4 核心配置:excludeDevice
经过实际测试及社区交流,MagicWindow 在 body 节点里支持一个 内部字段:
{
"logicEntities": [{
"body": {
"excludeDevice": "PAD|FOLD"
}
}]
}
含义一目了然:
- PAD:华为 & 荣耀所有平板设备
- FOLD:Mate X、Pocket S 等折叠屏设备
只要命中这两个类型,系统就视同「该设备不支持 MagicWindow」,即使 App 属于 TOP 级别也不会再被分屏。
⚠ Tips:
- 1)该字段目前只在内部邮件和运营伙伴 FAQ 里出现,公开文档暂时缺失;未来 SDK 或文档可能补齐;
- 2)如果后续华为或荣耀将该字段改名/下线,可以改用运营白名单方案兜底。
5 完整实现步骤
5.1 Manifest 保持原样或添加 EasyGoClient
如果你之前为了适配平行视界加过:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="cn.xxx.xxxxx">
<application
android:name=".XxxApplication"
...
>
...
<meta-data
android:name="EasyGoClient"
android:value="true" />
...
</application>
</manifest>
- 注意:若从未加过,添加即可;若已加过,保持现状即可。
5.2 在 assets 根目录创建/修改 easygo.json
路径:app/src/main/assets/easygo.json 一个最小化、只做 "排除设备" 声明的模板如下(其余字段按需增删即可):
{
"easyGoVersion": "1.0",
"client": "com.huawei.demo",
"logicEntities": [{
"head": {
"function": "magicwindow",
"required": "true"
},
"body": {
"mode": "1",
"excludeDevice": "PAD|FOLD",
"activityPairs": [],
"transActivities": [],
"Activities": [],
"UX": {
"supportRotationUxCompat": "true",
"isDraggable": "true"
}
}
}]
}
注意:
- 1)easyGoVersion、head.function、head.required 为 MagicWindow 固定占位字段,照抄即可;
- 2)mode 设置成 1(或其他任意值)并不会阻止系统去解析 MagicWindow;真正起决定作用的是 excludeDevice;
- 3)excludeDevice 可单独写 "PAD",如果仅想屏蔽大屏平板、继续允许折叠屏分屏;
- 4)JSON 语法必须绝对正确,系统解析失败就会退回默认策略。
5.3 打包 & 自测
- 1)安装到平板/折叠屏:首次启动应为 单屏;
- 2)打开 设置 > 显示与亮度 > 平行视界,App 不会再出现在可开启列表内;
- 3)用 adb shell dumpsys window 确认 Activity 没有带 hw-magic-windows 标记。
6 常见问题 & 排坑
问题 | 解决方案 |
---|---|
App 在某些 Pad 还是被分屏 | 检测是否有历史版本没有携带 easygo.json,升级流程里市场可能读取了旧缓存,全量更新后再试 |
线上老版本需要同时关闭 | 无法 retre patch,需上架一个 minSDK/VersionName 小变的版本,让所有用户都拉新 |
7 结语
- 只要一行 excludeDevice,就能让华为平板和折叠屏 彻底 “忘记” 你的应用还能分屏。这样既保住了竖屏专注体验,又避免了额外的 UI/逻辑适配成本。
- 注意:如果你打算后续针对大屏做完整双列 / 三列布局,也可以随时把 excludeDevice 去掉,再切换到 mode=0/1 按需分屏;配置同一个文件即可轻松版本控制。
- 解题思路:可以参考华为应用市场 TOP 级别的应用,将这些 .apk 下载下来,然后改成 .zip 文件后解压缩,然后查看其
assets/easygo.json
作为参考。