On May 28, 2015, Google announced the Android M Developer Preview for devices including Nexus 6. This records that experience; the images below show the home screen and Easter egg.
Obsolete experimental procedure · Technical review (2026-10-13): Changing system properties to expose this switch is retained only as history for Nexus 6 (shamu) and the 2015 Android M preview. Google’s later announcement identifies the initial preview as MPZ44Q, but this article retained no device build-number output to verify its exact image. Modern multi-window development uses the versioned APIs discussed at the end, without these system modifications.
The “Changes” and “Afterword” sections retain their 2015 perspective.


Changes
- The most noticeable change in Android M is the app drawer:

As shown, the apps in the drawer are indexed alphabetically. The top row shows frequently used apps, which currently cannot be customized.
Another significant change is in the animations—both folder animations and app launch animations have been updated. It’s hard to describe in words, so you’ll have to experience it yourself.
The preview’s Developer options Theme menu offered Light, Dark, and Automatic; Light is selected in the screenshot. This does not establish which options survived in later releases.

Multi-Window Mode
The user build in the original experiment did not display this switch. As a source reference from the same Android generation, Android 6.0.0_r1 DevelopmentSettings checks !"user".equals(Build.TYPE), rather than specifically requiring userdebug. Toggling the preference writes persist.sys.debug.multi_window. This release source explains the mechanism; it is not a reproduction of the exact preview binary.
Build.TYPE reads ro.build.type, whereas Build.IS_DEBUGGABLE reads ro.debuggable. Changing the former to userdebug does not rebuild the OS, install debug modules, or automatically set ro.debuggable to 1. A full userdebug build has other build settings.
Flashing a Third-Party Recovery
The historical steps below assume the old shamu partition layout, an already-unlocked bootloader, adb/fastboot on the computer, and backups of the device and data. Bootloader unlocking involves a user-data wipe; it is not a lossless setup step. See the official bootloader guidance.
Changing system can also affect subsequent OTAs, as TWRP’s system read-only explanation describes for block-based updates. Modern partition layouts, verification, and mounting differ; these are not generic commands for current devices.
1. Enter Bootloader Mode
1 | adb reboot bootloader |
2. Flash twrp.img
I used TWRP 2.8.6.0 for shamu. The official download was slow at the time, so I also put a copy on Baidu Netdisk for others. Use the official Nexus 6 device page and version archive, where that historical file is still listed. It is not a current-version recommendation or an image for other devices. After confirming the image and device match, the historical command was:
1 | fastboot flash recovery ~/Downloads/twrp-2.8.6.0-shamu.img |
3. Mount System
After flashing, enter Recovery from the bootloader instead of starting Android first; the old system may restore stock recovery on a normal boot. In TWRP Mount, confirm system is mounted writable as expected by that old image. Checking a label alone does not verify the path or write access.
4. Modify /system/build.prop
On the computer, confirm the Recovery adb connection and copy the original file to a local backup. These paths assume /system/build.prop exists in the historical environment:
1 | adb devices |
Inside the Recovery shell, I used vi with the absolute path. Availability of that editor depends on the Recovery image:
1 | vi /system/build.prop |
Find the line:
1 | ro.build.type=user |
And change it to:
1 | ro.build.type=userdebug |
Preserve the file’s permissions, owner, and security labels when saving. Exit the Recovery shell, then run adb reboot on the computer. After rebooting, I saw the switch below. Other releases may behave differently. Use adb shell getprop ro.build.type to verify the changed string:

In that preview interface, tap Recents and select a task-position icon; modern interfaces may differ:
- The first one places the window in the top half.
- The second one places it in the bottom half.
- The third one sets it to full screen.

And here was the result:

Multi-window development today
Public APIs have replaced the preview switch. The relevant behavior varies by version:
| Version | Relevant change |
|---|---|
| Android 7.0 / API 24 | Public split-screen support, configured through multi-window APIs and manifest settings |
| Android 10 / API 29 | Multi-resume permits multiple visible activities to be RESUMED; onResume alone does not establish exclusive-resource ownership |
| Android 12 / API 31 | Broader multi-window support on large screens; resizeableActivity="false" may lead to compatibility mode rather than universally disabling multi-window |
| Android 16 / API 36, targetSdk 36+ | Orientation, aspect-ratio, and resizability restrictions are ignored by default on displays at least 600dp in smallest width; game and user-setting exceptions require attention |
See the multi-window guide for version and lifecycle behavior, and Android 16 changes for exceptions and the temporary opt-out. The adaptive-app guidance states that targetSdk 37+ removes that temporary opt-out, so it is not a long-term substitute for adaptation.
Check layouts after window resizing, state restoration after activity recreation, and lifecycle behavior when visible without focus. Exclusive resources such as cameras can be reclaimed. Do not mechanically add a long configChanges list to avoid recreation. Test full-screen/split-screen transitions, divider dragging, rotation, and folding on supported devices or emulators.
Afterword
They called it “multi-window,” though at the time it only supported two. Even two windows didn’t make great use of the space; adding more didn’t sound very useful either. We would have to see what Google did with it.
Samsung had already done multi-window, with resizing too. But I didn’t find much use for it then. It felt more like something to show off than something I would use, and needed a few more iterations.
I wrote my posts on Jianshu first, then copied them elsewhere, so I also wanted to recommend it here. The Chinese version is on Jianshu: Nexus6-with-Android-M开启多窗口模式.
About Me && Blog
Below is my personal intro and related links. I look forward to exchanging ideas with fellow professionals. “When three walk together, one can always be my teacher!”
- Blogger Intro
- Blog Content Navigation: A guide for my blog content.
- Curated Excellent Blog Articles - Android Performance Optimization Must-Knows
- Android Performance Optimization Knowledge Planet: The paid community stopped operating in 2026 and no longer accepts new members; this link preserves its history.
One walks faster alone, but a group walks further together.
