Fact-checked by Grok 2 weeks ago

Android Marshmallow

Android Marshmallow, also known as Android 6.0, is the sixth major release of the developed by , featuring API level 23 and introducing significant enhancements in , , and user assistance. It was first previewed as "Android M" at the conference on May 28, 2015, with developer previews made available that day for testing on select devices. Officially named Android Marshmallow on August 17, 2015, alongside the release of the final SDK, it became available to the public starting October 5, 2015, via over-the-air updates for devices and pre-installed on the new and 6P smartphones. This version emphasized battery efficiency through innovative features like Doze and App Standby, which automatically optimize idle devices and underused apps to extend battery life by up to 30% on average during standby. Runtime permissions allowed users to grant or revoke app access to sensitive features like the camera or location at the point of use, rather than during , enhancing control. Now on Tap, a contextual assistance tool powered by the new Assist API, enabled quick access to relevant services—such as search, calendar events, or app shortcuts—directly from within other apps by long-pressing the home button. Additional notable improvements included native support for fingerprint authentication, allowing secure device unlocking, app access, and payments via Android Pay without passwords. Direct Share streamlined sharing content to specific contacts or apps, while Chrome Custom Tabs improved web viewing within apps by integrating a customized experience. Android Marshmallow also introduced adoptable storage, enabling users to expand internal storage using microSD cards formatted as internal partitions, and enhanced Android for Work profiles for better separation of personal and professional data. Overall, these updates focused on making Android more intuitive, efficient, and secure, paving the way for its successor, Android 7.0 Nougat, in 2016.

Development and Release

Announcement and Preview

Android Marshmallow, internally codenamed Android M during development, was first publicly announced on May 28, 2015, during the opening keynote at the Google I/O developer conference. The announcement highlighted the upcoming major version of the Android operating system, focusing on enhancements to user experience, security, and performance, with a planned stable release later that year. Google emphasized that Android M would introduce significant API changes aimed at improving app integration and device efficiency, setting the stage for broader ecosystem adoption. Alongside the announcement, immediately released the M Developer Preview 1, making it available for download on the same day for select devices including the , , , and Nexus Player. This early preview build allowed developers to access and test the platform ahead of the final release, providing factory images and over-the-air updates for compatible hardware. The primary goals of the preview were to collect developer feedback on emerging features and , enabling iterative improvements based on real-world testing and checks. Key elements teased in the preview included runtime permissions, which allow users to grant app permissions at runtime rather than during installation, and Doze mode, a optimization feature that restricts activity when the device is idle. Developers were encouraged to experiment with these to ensure app compatibility, with committing to multiple preview updates throughout the summer to refine the platform. Additionally, the announcement included demonstrations of potential multi-window support for multitasking, though this feature was ultimately not included in the final release, and enhancements to notifications such as direct replies from lock screens. These previews marked a shift toward more collaborative development, with developers quickly participating in the program.

Beta Testing

The beta testing phase for Android Marshmallow was conducted via Google's Developer Preview program, which allowed developers and enthusiasts to test early builds on supported devices. The second Developer Preview, released on July 9, 2015, provided updated platform code, near-final APIs, and refinements to system images for , , , and Nexus Player, enabling broader testing and feedback collection. Public access to the previews was available through manual flashing or over-the-air () updates for eligible devices, with the program expanding participation following the initial May 2015 release at . A total of three previews were issued, allowing iterative testing leading up to the final version, with enrollment open to any owner of compatible . Key areas of feedback included reports related to the permissions , Doze mode for battery optimization, and App Standby functionality for managing background app activity. Developers and testers reported issues with permission granting flows and battery drain scenarios under Doze, prompting to iterate on these features across previews. In response to community input, refined the permissions for improved clarity and user control, enhanced Doze's battery savings by addressing edge cases in idle detection, and adjusted App Standby to better balance app restrictions with usability. Additional changes incorporated tester feedback on Now on Tap integration, optimizing its contextual search activation within apps, and fingerprint authentication , which saw updates for better handling and reliability.

Official Launch

The name Android Marshmallow and version 6.0 were officially announced on August 17, 2015, alongside Developer Preview 3 and the final SDK. A press event on September 29, 2015, revealed new hardware pre-installed with Marshmallow and confirmed the upcoming stable release, emphasizing Marshmallow's performance improvements and integration with features like Now on Tap. The stable version launched on October 5, 2015, as 6.0 with level 23, marking a significant update from Android 5.1 . Over-the-air (OTA) updates began rolling out immediately to select Nexus devices, including the , , , , and Nexus Player, while the newly released and shipped pre-installed with Marshmallow. Sony also announced on October 6, 2015, that its Xperia Z3 and Z4 series would receive the update, positioning them among the first non-Nexus devices in the initial rollout phase. Google prioritized OTA updates for its Nexus lineup to ensure rapid adoption among developers and early users, with the full source code released to the Android Open Source Project (AOSP) shortly thereafter on October 6, 2015, under the tag android-6.0.0_r1. This AOSP availability enabled the swift development of custom ROMs and adaptations by the open-source community, broadening Marshmallow's reach beyond stock devices.

Core Features

User Interface Improvements

Android Marshmallow brought several enhancements to the , focusing on greater and contextual interaction to streamline daily use. A major update was to the notification panel, where users gained the ability to customize quick settings tiles for the first time. This allowed rearrangement of tiles via a simple edit mode, enabling prioritization of essential toggles such as , , location, or screen rotation, while hiding less-used ones to reduce clutter. The system also supported more interactive notifications on the , permitting users to expand and reply directly to messages from supported apps without unlocking the device, leveraging the for seamless responses. Google Now on Tap marked a significant step in contextual assistance, accessible by long-pressing the home button. This feature scanned the current screen—whether an , webpage, or media—and surfaced relevant information, shortcuts, or actions from Google services, such as nearby directions from a mention in a text or music details from a video. It respected user privacy by requiring explicit screen context sharing and worked across apps to minimize context switching. Limited multi-window functionality was introduced in split-screen mode, primarily for larger devices like the , where compatible apps could run side-by-side after activation via recent apps overview. This experimental support enhanced productivity on tablets by allowing simultaneous use of two apps, though it required developer opt-in and was not universally available across all devices or apps. The emoji library saw an expansion with the addition of over 180 new characters in Android 6.0.1, incorporating 8.0 symbols like the gesture, , and face to broaden expressive options in communications. These updates aligned with global standards for richer visual messaging without altering core rendering mechanics.

Battery and Performance Enhancements

Android Marshmallow introduced significant battery-saving mechanisms to extend device longevity during idle periods. The primary feature, Doze mode, activates when the device is unplugged, stationary, and the screen is off for an extended time, entering a low-power state that restricts apps' access to the network, defers CPU-intensive tasks and syncing, and ignores most wake locks while allowing periodic maintenance windows for priority activities. This results in up to 30% longer standby battery life on average, as demonstrated in tests on and devices. Doze prioritizes essential notifications and alarms, ensuring critical functionality remains available without fully compromising usability. Complementing Doze, App Standby identifies infrequently used apps based on user interaction patterns and places them into a restricted state, limiting their background usage, job scheduling, and access until the user actively engages with them again. This optimization shifts resources toward frequently used applications, further conserving power by preventing unnecessary drain from dormant apps. Together, Doze and App Standby represent proactive system-level interventions that adapt to user behavior, significantly improving overall efficiency on idle devices. On the runtime side, enhancements to the (ART) compiler in Android 6.0 improved app execution by properly enforcing access rules for methods like newInstance(), enabling more reliable and efficient code handling that contributes to smoother performance and faster app launches overall.

Security and Privacy Updates

Android Marshmallow introduced a significant overhaul to the permissions model with runtime permissions, shifting from the previous install-time granting to requests for sensitive data access. Apps targeting level 23 must request "dangerous" permissions—such as access to the camera, contacts, , or —only when they are needed during usage, allowing users to make informed decisions in context. Users can subsequently revoke these permissions at any time through the device settings without uninstalling the app, enhancing by limiting unnecessary data exposure and reducing the risk of over-privileged applications. This feature applies to both new and updated apps, with legacy apps receiving a one-time prompt on first use after upgrade. A key addition for authentication was the public API supporting fingerprint-based security, integrated with the Keystore system for hardware-backed operations. Developers can utilize the FingerprintManager class to initiate authentication via the authenticate() method, which securely verifies a user's enrolled fingerprint against the data without exposing raw biometric information. This supports multiple enrolled fingerprints per user, enabling flexible and convenient secure logins for apps like banking or payment services, while ensuring cryptographic keys remain protected in the (TEE). Devices must declare the USE_FINGERPRINT permission and hardware capability for compatibility. To bolster boot-time integrity, Android Marshmallow implemented Verified Boot, a cryptographic verification mechanism that checks the authenticity and integrity of the operating system partitions before loading. Using a hardware root of trust, the verifies the boot chain from the initial key to the with algorithms like SHA-256 for hashing and RSA-2048 for signatures, preventing the execution of modified or malicious . Compatible devices must declare the android.software.verified_boot feature in their definition, ensuring users boot into a trusted and mitigating risks from tampered system partitions. This was particularly emphasized for new devices shipping with Marshmallow, providing a verifiable good boot state. As a precursor to Google Play Protect, enhanced detection through improved app verification in , scanning downloads for known threats before installation to protect against harmful software. This built on existing Play Store safeguards with tighter integration of machine learning-based analysis, contributing to broader device security by blocking potentially malicious apps proactively.

Storage and Connectivity

Adoptable Storage

Adoptable storage, introduced in Android 6.0 , enables users to designate devices, such as microSD cards, as an extension of the device's internal . This feature formats and encrypts the external media to integrate it seamlessly with the internal partition, allowing applications and user data to be stored and installed directly on the adopted without distinguishing it from internal memory in everyday use. The primary goal is to address limitations on lower-end devices by dynamically allocating space across both internal and adopted based on availability, with the system preferring faster internal for performance-critical operations. To adopt an external storage device, users access the settings menu under , where the system prompts for confirmation before proceeding. The adoption process wipes all existing data on the card, formats it using a filesystem like or the recommended for flash media, and encrypts it with device-specific keys—either full-disk encryption (FDE) or file-based encryption (FBE) tied to the adopting device. Once adopted, the storage appears as a single unified pool, and users have the option to migrate existing files from the portable /sdcard directory to free up internal space. This integration supports dynamic file path adjustments in APIs, ensuring apps can access data without hardcoded paths, though developers must use runtime checks for compatibility. Despite its benefits, adoptable storage has notable limitations that impact its practicality. Not all devices support the feature, as it requires kernel-level modifications and stable media slots, excluding many budget handsets without manufacturer implementation. Performance is generally slower than internal eMMC or UFS due to the external medium's lower read/write speeds, prompting the system to issue warnings for sluggish cards and potentially relocating apps to internal if issues arise. Additionally, the encryption binds the storage exclusively to the adopting device, rendering it unusable or inaccessible if removed, which poses risks of for like SD cards. USB OTG drives can be adopted in limited stable configurations, such as on devices, but this is not viable for typical mobile scenarios. For , adoptable respects the android:installLocation attribute in manifests, allowing legacy applications targeting pre-6.0 to of on adopted if set to internal-only. Developers of older may need to incorporate level checks to handle dynamic paths, but no mandatory code changes are required for basic functionality. This design was particularly aimed at alleviating constraints on entry-level devices, enabling larger installations without frequent user intervention.

USB and Hardware Support

Android Marshmallow introduced native support for USB Type-C connectors, enabling reversible plugging and simplifying user interaction with compatible devices. This implementation allowed for faster charging capabilities through USB Power Delivery (USB-PD) standards and supported alternate modes such as over USB-C for video output, as demonstrated on the and 6P smartphones, which could connect to external displays via adapters. Android continued support for USB audio peripherals, introduced in Android 5.0, permitting audio playback from external USB devices like DACs, though high-resolution formats often required third-party apps for full compatibility. This feature leveraged the Android Open Accessory protocol to ensure low-latency audio streaming and compatibility with a broader range of USB audio peripherals. Android Marshmallow included optimizations for low-latency rendering and to support experiences compatible with and similar low-cost headsets, allowing developers to create and interactive VR content using standard like gyroscopes and accelerometers. Sensor handling saw enhancements in APIs, enabling more accurate step counting and detection through improved processing of data from existing accelerometers and other motion s, without necessitating new . This built on prior sensor batching to reduce power consumption while providing real-time fitness tracking insights. hardware integration was also supported natively, allowing secure on devices equipped with compatible s.

Developer Platform

API Changes

Android 6.0 Marshmallow introduced API level 23, which brought significant updates to the and framework to enhance developer capabilities in handling permissions, , and . A key change was the shift to runtime permissions, allowing apps to request dangerous permissions at runtime rather than install time. Developers can use new utility classes in the support library, such as ContextCompat.checkSelfPermission() to verify if an app has a specific permission and ActivityCompat.requestPermissions() to prompt the user for granting it. These APIs enable more granular control, with permissions categorized as normal or dangerous, where dangerous ones require explicit user approval. Additionally, device and profile owners can manage permission policies via DevicePolicyManager.setPermissionPolicy(). To optimize for battery life, API level 23 introduced Doze mode and App Standby, which restrict background activity on idle devices and unused apps. Developers must make their apps Doze-aware by using APIs like JobScheduler for scheduling jobs that respect these restrictions, ensuring tasks such as syncing defer until the device is active. The AlarmManager was updated to support inexact alarms via setAndAllowWhileIdle(), allowing alarms to fire even in Doze but with relaxed timing precision. These changes require apps to handle partial wake locks and network access limitations during maintenance windows. Biometric authentication saw the addition of the FingerprintManager class, enabling apps to authenticate users using sensors. This requires the USE_FINGERPRINT permission and provides methods like authenticate() to initiate the process, returning results via a callback. It supports integration with KeyStore for secure key generation tied to the user's , enhancing for sensitive operations without storing credentials. Apps targeting level 23 can leverage this for features like secure payments or app locking. Older storage access methods were deprecated, pushing developers toward modern alternatives like the Storage Access Framework introduced in earlier versions but refined here for API level 23 compliance. Apps must now use internal storage or scoped to avoid security risks from external storage reads. Build tools received updates with the release of SDK Tools Revision 24.3 alongside 1.3, improving integration for targeting level 23. This included enhanced support for multi-APK publishing via build variants in the plugin, allowing developers to generate APKs optimized for different device configurations like screen densities or ABIs without a single monolithic build.

App Compatibility

Android Marshmallow introduced permissions, significantly impacting app compatibility by shifting from install-time grants to user-controlled access for dangerous permissions such as camera, , and . Apps targeting level 23 or higher must explicitly request these permissions at using methods like checkSelfPermission() and requestPermissions(), with users able to grant or revoke them individually without reinstalling the app. For apps targeting levels below 23, permissions are granted automatically at install time on Android 6.0 devices, maintaining without prompts during initial installation or OS upgrades. However, upon upgrading such an app to target 23, developers must implement permission handling, as previously granted dangerous permissions may require user re-approval if not already confirmed. Storage access underwent changes through the runtime permission model, requiring explicit user consent for READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE in apps targeting API 23. This prevents unauthorized full filesystem reads or writes to , limiting to only granted directories and files unless the user approves broader scope. Legacy apps targeting pre-23 continue to receive full at install time, but developers are encouraged to test and migrate to runtime checks to avoid future breakage on updated devices. Background behavior changes in Marshmallow, particularly Doze and App Standby modes, impose stricter restrictions on apps to optimize battery life, affecting for those relying on continuous execution. When the device is (screen off, stationary, and unplugged), Doze defers background jobs, alarms, and network activity, with brief maintenance windows for syncing; App Standby further buckets infrequently used apps, suspending their sync adapters and jobs when the device is . Apps facing these restrictions can adapt by using the JobScheduler API for deferred, power-aware task scheduling, ensuring reliable execution during allowed windows without violating power-saving policies. Vendor fragmentation posed challenges for app on non-Nexus devices, as original equipment manufacturers (OEMs) often delayed updates or introduced custom modifications. The 6.0 Definition Document (CDD) mandated that compatible devices implement all core without alteration, support the Test Suite (CTS) for verification, and provide mechanisms for over-the-air () updates to address issues, including accurate reporting of hardware features via PackageManager. OEMs were required to base implementations on the Project to minimize inconsistencies, though delays in rolling out updates—sometimes months or years after the official launch—left many devices vulnerable to unpatched gaps until certified.

References

  1. [1]
    Android 6.0 Marshmallow | Android Developers
    runtime permissions, Doze and App Standby power-saving features, new ...
  2. [2]
    Android M Developer Preview & Tools
    May 28, 2015 · By Jamal Eason, Product Manager, Android. Today at Google I/O, we announced a developer preview of the next version of Android, the M release.<|control11|><|separator|>
  3. [3]
    Develop a sweet spot for Marshmallow: Official Android 6.0 SDK ...
    Aug 17, 2015 · We're introducing the official Android 6.0 SDK and opening Google Play for publishing your apps that target the new API level 23 in Android Marshmallow.Missing: announced | Show results with:announced
  4. [4]
    Get ready for the sweet taste of Android 6.0 Marshmallow
    Oct 5, 2015 · Android Marshmallow gives you the ability to customize and control which capabilities you give apps. With the new app permissions model, you ...
  5. [5]
    Android 6.0 Changes - Android Developers
    May 20, 2024 · This release introduces new power-saving optimizations for idle devices and apps. These features affect all apps so make sure to test your apps ...
  6. [6]
    Request runtime permissions | Privacy - Android Developers
    You can declare a runtime permission and set up a permission request that provides this access. These steps are part of the workflow for using permissions.Workflow for requesting... · Request permissions · Handle permission denial
  7. [7]
    Optimizing Contextual Content for the Assistant - Android Developers
    May 20, 2024 · Android 6.0 Marshmallow introduces a new way for users to engage with apps through assistant apps, such as the Google Assistant.Source App · Share Additional Information... · Describing Content<|control11|><|separator|>
  8. [8]
    Android 6.0 APIs
    May 20, 2024 · Android 6.0 (M) offers new features for users and app developers. This document provides an introduction to the most notable APIs.
  9. [9]
    Android Releases | Platform - Android Developers
    runtime permissions, Doze and App Standby power ...Marshmallow · Android 16 · Android 15 · Android 14
  10. [10]
    Android M developer preview available today on Nexus devices
    May 28, 2015 · Google's new version of Android will be available to developers starting today, when they'll be able to install it on the Nexus 5, 6, 9, and ...Missing: download | Show results with:download
  11. [11]
    The 12 most important announcements from Google I/O 2015
    May 28, 2015 · Android M · App permissions get less intimidating · Chrome in all your apps · Better battery life and USB-C · Google Now on Tap · A new Google Photos ...Android M · Offline Maps And Chrome For... · Android EverywhereMissing: Marshmallow | Show results with:Marshmallow
  12. [12]
    M Developer Preview Gets Its First Update - Android Developers Blog
    Jul 9, 2015 · Earlier this summer at Google I/O, we launched the M Developer Preview. The developer preview is an early access opportunity to test and ...Missing: 1 June 25
  13. [13]
    S'more to love across all your screens - The Keyword
    We're introducing a few new things that do just that: two Nexus phones, a tablet for work and play, updates to Chromecast and features for some of your ...
  14. [14]
    Google Releases Android 6.0 Source Code and Factory Images for ...
    Oct 6, 2015 · Google has pushed Android 6.0 source code to AOSP (Android Open Source Project), and released factory images (MRA58K) for Nexus 6 & Nexus 5.<|control11|><|separator|>
  15. [15]
    Codenames, tags, and build numbers - Android Open Source Project
    Starting March 27, 2025, we recommend using android-latest-release instead of aosp-main to build and contribute to AOSP. For more information, see Changes to ...
  16. [16]
    Now on Tap update: Text Select and Image Search - Google Blog
    Jun 1, 2016 · When we introduced Now on Tap in Android Marshmallow last year, our goal was to make your phone a little bit smarter and help you get things ...Missing: M | Show results with:M
  17. [17]
    How to Enable Multi-Window in Android 6.0 Marshmallow - Wccftech
    Oct 9, 2015 · Multi-window in Android 6 Marshmallow lets you view multiple apps together in split view. However, this feature is reportedly only available for ...<|control11|><|separator|>
  18. [18]
    Android 6.0.1 Emoji Changelog - Emojipedia Blog
    Dec 7, 2015 · All hand gestures are no longer pink, and now use the default-yellow skin tone matching the human and smiley characters. Above: Pink hand ...
  19. [19]
    Android 6.0 Compatibility Definition
    Starting March 27, 2025, we recommend using android-latest-release instead of aosp-main to build and contribute to AOSP. For more information, see Changes to ...<|control11|><|separator|>
  20. [20]
    [PDF] Android Security 2015 Year In Review
    In 2015, there was one major new release for Android: version 6.0, named. Marshmallow. ... source code in 2015 are available in AOSP. Android Security 2015 ...
  21. [21]
    Android Security 2015 Annual Report
    Apr 19, 2016 · We protected users from malware ... Last year, we launched Android 6.0 Marshmallow, introducing a variety of new security protections and controls ...
  22. [22]
    Adoptable storage | Android Open Source Project
    Aug 26, 2024 · Android 6.0 introduced the ability to adopt external storage media to act like internal storage. Caution: On devices running Android 7.0-8.1 ...
  23. [23]
    Optimize for Doze and App Standby | App quality - Android Developers
    Jul 28, 2024 · Doze reduces battery consumption by deferring background CPU and network activity for apps when the device is unused for long periods of time.
  24. [24]
    Handling Android runtime permissions in UI tests | by Joe Birch
    Jan 7, 2016 · You'll now be able to both grant and deny permissions in your tests on 6.0+ devices where your application requires them to test that the UI responds ...