2015 年 5 月 28 日,Google 在 I/O 发布了 Android M Developer Preview,支持 Nexus 6 等设备。这篇记录的是当时的体验,下面是桌面和彩蛋界面。
已过期的实验流程 · 技术复核(2026-10-13):修改系统属性打开隐藏多窗口开关,仅作为 Nexus 6(shamu)与 2015 年 Android M 预览版的历史记录。Google 后续公告把首轮预览版标为 MPZ44Q;本文没有保留设备构建号输出,不能把它当成本机镜像的核验结果。今日的正式多窗口适配见文末版本说明,不需要这套改系统流程。
下面“变化”和“后记”中的体验与评价保留在 2015 年语境中。


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

从图中可以看出,抽屉中的APP是使用字母进行索引的.最上面一排是最常用的的APP,目前是不可以定制的.
另外一个感觉变化比较大的地方就是动画,文件夹动画和应用启动动画都变了,这个不好描述,大家回头可以自己去感受.
当时开发者选项中的 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 | adb devices |
进入 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到其他的地方,所以这里也给大家推荐一下简书吧。
关于我 && 博客
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 博主个人介绍 :里面有个人的微信和微信群链接。
- 本博客内容导航 :个人博客内容的一个导航。
- 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
- Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。
一个人可以走的更快 , 一群人可以走的更远
