EN

Nexus6 with Android M 开启多窗口模式

字数统计: 1.9k阅读时长: 6 min
2015/05/29
loading

2015 年 5 月 28 日,Google 在 I/O 发布了 Android M Developer Preview,支持 Nexus 6 等设备。这篇记录的是当时的体验,下面是桌面和彩蛋界面。

已过期的实验流程 · 技术复核(2026-10-13):修改系统属性打开隐藏多窗口开关,仅作为 Nexus 6(shamu)与 2015 年 Android M 预览版的历史记录。Google 后续公告把首轮预览版标为 MPZ44Q;本文没有保留设备构建号输出,不能把它当成本机镜像的核验结果。今日的正式多窗口适配见文末版本说明,不需要这套改系统流程。

下面“变化”和“后记”中的体验与评价保留在 2015 年语境中。

主界面

彩蛋

变化

  1. Android M给人最大的不一样就是其抽屉的变化:

抽屉

从图中可以看出,抽屉中的APP是使用字母进行索引的.最上面一排是最常用的的APP,目前是不可以定制的.

  1. 另外一个感觉变化比较大的地方就是动画,文件夹动画和应用启动动画都变了,这个不好描述,大家回头可以自己去感受.

  2. 当时开发者选项中的 Theme 菜单提供了 Light、Dark、Automatic 三项,截图里选中的是 Light。这是预览版中的设置界面,不能当作后来正式版功能保留情况的证明。

模式选择

多窗口

当时的 user 固件没有显示这个实验开关。作为同代源码参考,Android 6.0.0_r1 DevelopmentSettings 的条件是 !"user".equals(Build.TYPE),因此不是“只有 userdebug 才能出现”;切换开关写的是 persist.sys.debug.multi_window。这份正式版源码有助于解释机制,不等于重现了原预览版二进制。

Build.TYPE 读取 ro.build.type,而 Build.IS_DEBUGGABLE 读取 ro.debuggable。把前者改成 userdebug,不会重新构建系统、补齐调试模块,也不会自动把 ro.debuggable 改为 1;完整 userdebug 构建还有其他构建配置。

刷入第三方Recovery

以下保留旧步骤,并补齐前提:仅针对当年的 shamu 分区布局,bootloader 已解锁,电脑已安装 adb/fastboot,设备和数据已有备份。解锁 bootloader 涉及清除用户数据,不应把它当一个无损的准备步骤。官方锁定/解锁说明

修改 system 也可能影响后续 OTA;TWRP 的系统只读说明解释了 block OTA 对系统分区修改的检查。当前设备的分区布局、校验与挂载方式可能不同,不能直接套用这些旧命令。

1. 进入bootloader模式

1
adb reboot bootloader

2. 刷入twrp.img

当时用的是 TWRP 2.8.6.0 for shamu。官网下得有点慢,我还放了一份到百度网盘方便大家下载。下载入口使用 TWRP Nexus 6 官方设备页及版本归档,该历史文件仍在列表中;它不是当前版本推荐,也不能用于其他机型。确认镜像与设备匹配后,当年的命令是:

1
fastboot flash recovery ~/Downloads/twrp-2.8.6.0-shamu.img

3. Mount System

刷入后从 bootloader 进入 Recovery,而不是先启动 Android。旧系统首次正常启动可能恢复原厂 Recovery。进入 TWRP 的 Mount,确认 system 已按该旧镜像的方式可写挂载;仅勾选一个名称不等于已经验证路径和写入权限。

4. 修改/system/build.prop

电脑端先确认 Recovery 的 adb 连接,再把原文件保存到电脑备份;以下路径以旧环境实际存在 /system/build.prop 为前提:

1
2
3
adb devices
adb pull /system/build.prop ./nexus6-build.prop.backup
adb shell

进入 Recovery shell 后,当时使用 vi 编辑绝对路径。Recovery 是否包含这个编辑器取决于所用镜像:

1
vi /system/build.prop

找到

1
ro.build.type=user

将其修改为:

1
ro.build.type=userdebug

保存时保持原文件的权限、所有者及安全标签,退出 Recovery shell 后在电脑执行 adb reboot。我当时重启后,就看到了下面这个开关;其他系统版本不一定适用。可以用 adb shell getprop ro.build.type 核对字符串是否已改变:

选择开启多窗口

在当时的预览版界面中,点击多任务按钮,再选择任务上的位置图标:上半屏、下半屏或全屏。现代系统入口不一定相同。

多窗口位置选择

然后就能看到当时的效果了:

多窗口效果

今天如何适配多窗口

正式 API 已经替代这个预览期开关,适配时要分版本看:

版本 与本文相关的变化
Android 7.0 / API 24 正式提供分屏支持,应用通过多窗口 API 与清单配置适配
Android 10 / API 29 支持 multi-resume,多个可见 Activity 可以同时处于 RESUMED;独占资源不能只凭 onResume 判断所有权
Android 12 / API 31 大屏上的多窗口支持更普遍;resizeableActivity="false" 可能进入兼容模式,不再是所有设备上的绝对禁用开关
Android 16 / API 36,targetSdk 36+ 在最小宽度至少 600dp 的显示屏上,方向、宽高比、可调整尺寸限制默认被忽略;有游戏、用户设置等例外,需看对应规则

版本与生命周期见多窗口文档;Android 16 的例外和临时退出见行为变更。官方适配说明也明确指出,targetSdk 37+ 不再支持这项临时退出,不宜依赖它长期规避适配。

具体要验证的是窗口尺寸变化后的布局、Activity 重建后的状态恢复,以及失去焦点但仍可见时的生命周期。相机等独占资源还要处理资源被收回;不能为了避免重建而机械添加一长串 configChanges。在支持的设备或模拟器上测试全屏/分屏切换、拖动边界、旋转和折叠变化,才是今天这篇主题对应的工作。

后记

说是多窗口,其实目前只支持双窗口。不过双窗口的窗口利用率其实并不高,多窗口就更加呵呵呵了。这个就看Google之后如何发挥这个了。

其实多窗口三星早就实现了。而且每个窗口还可以动态调整大小,不过这并没有什么卵用。测评中提到的也不多。可见多窗口现在其实还只是一个炫技的功能。至于使用的话,可能还得要多迭代几次才可以。

另外这篇文章的简书地址在此:Nexus6-with-Android-M开启多窗口模式 . 因为我写东西都是在简书上完成,然后才Copy到其他的地方,所以这里也给大家推荐一下简书吧。

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. 变化
  • 多窗口
    1. 1. 刷入第三方Recovery
      1. 1.1. 1. 进入bootloader模式
      2. 1.2. 2. 刷入twrp.img
      3. 1.3. 3. Mount System
      4. 1.4. 4. 修改/system/build.prop
  • 今天如何适配多窗口
  • 后记
  • 关于我 && 博客