Android 15 Behavior Changes: All Apps

Android 15 introduces several changes that impact how apps function, regardless of the target SDK version.

Changes to package stopped state

Android 15 introduces an update to align with the original intent of the FLAG_STOPPED state. This state, accessible by long-pressing an app icon and selecting 'Force Stop' in AOSP builds, will now persist until the user actively engages with the app, either directly (launching the app) or indirectly (interacting via sharesheet, widget, or live wallpaper). The stopped state triggers cancellation of pending intents. Upon exit from stopped state, the app receives ACTION_BOOT_COMPLETED broadcast, enabling re-registration of intents. Use the ApplicationStartInfo.wasForceStopped() method to check if your app was force-stopped.

Support for 16 KB page sizes

Android 15 introduces support for devices with 16 KB memory page sizes, optimizing performance for devices with larger RAM. If your app uses NDK libraries, you'll need to rebuild it to work on 16 KB devices. This ensures compatibility and unlocks performance benefits.

Benefits

  • Lower app launch times (3.16% average reduction)
  • Reduced power draw during app launch (4.56% reduction)
  • Faster camera launch (4.48% faster hot starts, 6.60% faster cold starts)
  • Improved system boot time (8% reduction, approximately 950 ms)

Action required

  • Check if your app uses native code via APK Analyzer.
  • Rebuild your app with 16 KB support if necessary.
  • Test your app in a 16 KB environment using Android 15 emulators.

Supporting Private Space Feature

Android 15 introduces Private Space, allowing users to separate sensitive apps with additional authentication. Some apps require changes to interact with apps in Private Space.

Required Changes for:

All Apps
Apps in Private Space use separate user profiles. Update your app's logic to avoid assuming non-main profile installs are work profiles.

Medical Apps
Private Space locking disables foreground/background activities, including notifications, for apps within. Medical apps relying on critical notifications should assess impact and inform users to avoid installing in Private Space.

Launcher apps
If you develop a launcher app, you must do the following before apps in the private space will be visible:

  • Assign default launcher role (ROLE_HOME).
  • Declare ACCESS_HIDDEN_PROFILES permission in your app's manifest file.
  • Handle Private Space use cases:
  • Separate launcher container.
  • Determine user profile type (getLauncherUserInfo).
  • Hide/show Private Space container.
  • Lock/unlock Private Space container (requestQuietModeEnabled).
  • Register for ACTION_PROFILE_AVAILABLE/UNAVAILABLE broadcasts.
  • Update UI based on locked/unlocked state.

App store apps
To receive the 'Install Apps' intent from Private Space, declare an with CATEGORY_APP_MARKET in your app's manifest file.

PNG-based emoji font removed

Android removes legacy PNG-based emoji font (NotoColorEmojiLegacy.ttf). Update your app to use vector-based font or platform APIs for text rendering. To determine if your app will be impacted, search your code for references to NotoColorEmojiLegacy.ttf. You can choose to adapt your app in a number of ways:

  • Use Platform APIs: Leverage platform text rendering APIs for seamless integration.
  • Render Text to Bitmap: Use a Canvas to render text and obtain a raw image when needed.
  • Add COLRv1 Font Support: Integrate FreeType library (version 2.13.0+) for COLRv1 compatibility.
  • Bundle Legacy Emoji Font (Last Resort): Include NotoColorEmoji.ttf in your APK, but note that your app will miss out on latest emoji updates.

Increased minimum target SDK version from 23 to 24

Android 15 builds upon the security foundation established in Android 14, further strengthening protections for users. In Android 15, apps with a targetSdkVersion lower than 24 can no longer be installed. Android 15 requires apps to target API level 24 or higher to ensure:

  • Modern security and privacy standards
  • Protection against malware exploiting older API levels
  • Alignment with best practices for app development

Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat: INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

Camera and media Improved Audio Resource Management Prior to Android 15, apps would fail to open a new AudioTrack when resource limits were reached during direct or offload audio playback. In Android 15, when resource limits are reached, the system will now invalidate existing open AudioTrack objects to accommodate new direct or offload playback requests. Direct and offload audio tracks are used for:

  • Compressed audio playback (e.g., streaming encoded audio over HDMI to TV)
  • Hardware DSP acceleration on mobile devices

Key Benefits:

  • Improved audio resource allocation
  • Reduced playback failures due to resource constraints
  • Enhanced overall audio performance

Developer Impact:

  • Apps requesting direct or offload playback may experience AudioTrack invalidation when resource limits are reached
  • Ensure your app handles AudioTrack invalidation and re-creation gracefully

User experience and system UI

Enhanced Predictive Back Animations
Starting with Android 15, predictive back animations are now enabled by default for apps that have opted into the predictive back gesture, either fully or at the activity level. This change eliminates the need for the developer option, and system animations such as back-to-home, cross-task, and cross-activity will now be visible for these apps.
Ensure seamless integration with predictive back navigation:

  • Verify that your app has been properly migrated to use the predictive back gesture.
  • Ensure that fragment transitions are compatible with predictive back navigation.
  • Replace framework transitions with:
    • Animator
    • AndroidX transitions
  • Update your app's navigation architecture by migrating away from unknown back stacks and instead utilizing back stacks managed by FragmentManager or the Navigation component.

Force-Stopping Apps Now Affects Widgets
Starting with Android 15, force-stopping an app temporarily disables its widgets. When a user force-stops an app, the system:

  • Grays out all app widgets
  • Prevents user interaction with widgets
  • Cancels all pending intents
    When the user launches the app again, the system re-enables the widgets, restoring full functionality.

Enhanced User Privacy
Media Projection Status Bar Chip Android 15 introduces a prominent status bar chip to alert users to ongoing screen sharing, casting, or recording, addressing potential privacy risks. Users can tap the chip to stop their screen from being shared, cast, or recorded. For added convenience and security, screen projection now automatically suspends when your device screen locks.
Check if your app is impacted By default, your app includes the new status bar chip and automatically suspends screen projection when the lock screen activates. Ensure seamless functionality by implementing the MediaProjection.Callback onStop() method and verifying your app's response to:

  • User-tapped status bar chip
  • Lock screen activation