<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6755709643044947179</atom:id><lastBuildDate>Fri, 03 Apr 2026 20:06:36 +0000</lastBuildDate><category>Featured</category><category>Google Play</category><category>Android</category><category>latest</category><category>android developers</category><category>Develop</category><category>Android Developer</category><category>Android Studio</category><category>Games</category><category>Announcements</category><category>Security</category><category>Jetpack</category><category>Wear OS</category><category>Play Console</category><category>Privacy</category><category>Apps</category><category>Developer Preview</category><category>Jetpack Compose</category><category>archive</category><category>app development</category><category>Game Development</category><category>Compose</category><category>developer stories</category><category>Google Play services</category><category>Kotlin</category><category>Android Wear</category><category>google play developers</category><category>success stories</category><category>#WeArePlay</category><category>Platform_Update</category><category>case study</category><category>Gemini</category><category>Performance</category><category>mobile</category><category>Distribute</category><category>android security</category><category>#11WeeksOfAndroid</category><category>GooglePlay</category><category>NDK</category><category>#GoogleIO</category><category>App</category><category>Google Services</category><category>User Interface</category><category>Design</category><category>Android TV</category><category>Game</category><category>Developer Tools</category><category>Google Play Console</category><category>Android Auto</category><category>Media</category><category>androidstudio</category><category>Android N</category><category>Material Design</category><category>Developer Console</category><category>Google Play Games</category><category>Large Screens</category><category>SDK updates</category><category>Android Developer Challenge</category><category>Explore</category><category>Google Play game services</category><category>Best Practices</category><category>Google I/O 2025</category><category>How-to</category><category>foldables</category><category>#GenerativeAI</category><category>#TheAndroidShow</category><category>AI</category><category>Google I/O</category><category>Android app development</category><category>Google I/O 2023</category><category>Story</category><category>Tablets</category><category>UI</category><category>Android Jetpack</category><category>Web</category><category>developers</category><category>Tools</category><category>form factors</category><category>wear</category><category>Android Development</category><category>Android Market</category><category>Google I/O 2024</category><category>AndroidDevStory</category><category>Beta</category><category>android11</category><category>developer</category><category>#androiddevsummit</category><category>Android Things</category><category>Indie Games</category><category>Location</category><category>machine learning</category><category>Android 1.5</category><category>Android for cars</category><category>App quality</category><category>compatibility</category><category>Android Dev Summit</category><category>Firebase</category><category>Android Design</category><category>Android12</category><category>Authentication</category><category>Camera</category><category>CameraX</category><category>Optimization</category><category>Solve</category><category>android p</category><category>permissions</category><category>#Android</category><category>Android 11</category><category>Android O</category><category>Indie Games Accelerator</category><category>Udacity</category><category>Wear OS 6</category><category>announcement</category><category>media3</category><category>monetization</category><category>#JetpackCompose</category><category>Android Automotive OS</category><category>Google Play Store</category><category>Identity</category><category>Marshmallow</category><category>Support Library</category><category>UX</category><category>Widgets</category><category>androidq</category><category>indie developers</category><category>safety</category><category>#Media</category><category>API</category><category>Android 1.6</category><category>Android Emulator</category><category>Audio</category><category>Gemini Nano</category><category>Google</category><category>Google Analytics</category><category>Open source</category><category>Pixel</category><category>R8</category><category>notifications</category><category>subscriptions</category><category>Europe</category><category>Health Connect</category><category>Learn</category><category>Localization</category><category>London</category><category>ML Kit</category><category>Modern Android Development</category><category>Navigation</category><category>Performance Optimization</category><category>Testing</category><category>adaptive</category><category>beginner</category><category>business</category><category>events</category><category>passkeys</category><category>Android 5.0</category><category>Android UI</category><category>AndroidO</category><category>C++</category><category>ExoPlayer</category><category>Gemini in Android Studio</category><category>Google Cloud Platform</category><category>Graphics</category><category>Health Connect API</category><category>How-To Guide</category><category>IoT</category><category>Kotlin Multiplatform</category><category>Layout</category><category>Play Store</category><category>Project Treble</category><category>WebView</category><category>analytics</category><category>aosp</category><category>appstory</category><category>competition</category><category>engagement</category><category>grow</category><category>prizes</category><category>release</category><category>win</category><category>#MADSkills</category><category>ADS 22</category><category>Ads</category><category>Android Developer Story</category><category>Android Instant Apps</category><category>Android Pie</category><category>Android SDK</category><category>Android Vitals</category><category>Android XR</category><category>AndroidX</category><category>GDC</category><category>Game Developers Conference</category><category>Google Cast</category><category>Google Cloud Messaging</category><category>Google Fit</category><category>Google Play Indie Games Festival</category><category>Google Play Indie games accelerator</category><category>Google Play policy</category><category>Indie Games Festival</category><category>Mobile Games</category><category>News</category><category>Policy</category><category>Quality</category><category>Release Notes</category><category>Renderscript</category><category>UI toolkit</category><category>adaptive layouts</category><category>admob</category><category>android13</category><category>android14</category><category>android16</category><category>battery</category><category>credential manager</category><category>developerstory</category><category>indie</category><category>indies</category><category>showcase</category><category>user experience</category><category>wearos</category><category>‘Google Play</category><category>#AndroidDevJourney</category><category>#camera</category><category>APIs</category><category>Android 15</category><category>Android M</category><category>Android Q</category><category>Android fitness</category><category>Android health</category><category>Androidify</category><category>Background work</category><category>Dev Story</category><category>Developer Inspiration</category><category>Google Assistant</category><category>IO2013</category><category>Policies</category><category>Saatchi</category><category>TensorFlow</category><category>app optimizations</category><category>career inspiration</category><category>careers in tech</category><category>google play protect</category><category>health data</category><category>spotlight week</category><category>users</category><category>watch faces</category><category>#io19</category><category>Android 10</category><category>Android 13</category><category>Android 14</category><category>Android 2.0</category><category>Android 9</category><category>Android Dev Journey</category><category>Android Go</category><category>Android Gradle Plugin</category><category>Android Open Source Project</category><category>Android app developers</category><category>AndroidAI</category><category>AndroidDev</category><category>App Resources</category><category>Bluetooth</category><category>Developer Journey</category><category>Education</category><category>GenAI</category><category>Get Inspired</category><category>Google Drive</category><category>Google Play Devs</category><category>Google Play games services</category><category>HDR</category><category>HTTPS</category><category>In-app Billing</category><category>KMP</category><category>Material 3 Expressive Design</category><category>Media and Camera</category><category>OpenGL ES</category><category>Power series</category><category>Product News</category><category>Requirements</category><category>Samples</category><category>TV</category><category>TensorFlow Lite</category><category>Treble</category><category>VR</category><category>Watch Face Format</category><category>adaptive UI</category><category>android15</category><category>androidn</category><category>appexcellence</category><category>chrome</category><category>community</category><category>contest</category><category>desktop</category><category>developer story</category><category>gamestory</category><category>google tv</category><category>growth</category><category>io15</category><category>library</category><category>material you</category><category>nearby</category><category>rendering</category><category>startup</category><category>update</category><category>watchface</category><category>workmanager</category><category>#AdaptiveApps</category><category>#Android11</category><category>#AndroidDevChallenge</category><category>#Wear</category><category>#passkeys</category><category>ART</category><category>Actions on Google</category><category>Android 4.2</category><category>Android 6.0</category><category>Android Camera</category><category>Android Studio Emulator</category><category>Android Study Jams</category><category>Android for Work</category><category>AndroidWear</category><category>Animation</category><category>App Components</category><category>App Security</category><category>Architecture</category><category>Baseline Profiles</category><category>Code Day</category><category>Connectivity</category><category>Courses</category><category>DAC/Develop</category><category>Developer profiles</category><category>Developing Media Apps</category><category>Development Tools</category><category>FIDO2</category><category>GCM</category><category>GenerativeAI</category><category>Google Developers</category><category>Google Mobile Ads</category><category>IO2014</category><category>Intents</category><category>Jetpack Navigation</category><category>KotlinConf</category><category>Latest news</category><category>Launch</category><category>Launchpad Accelerator</category><category>Licensing</category><category>ML</category><category>Platform</category><category>Platform_Updates</category><category>Resources</category><category>Sample code</category><category>Text-to-Speech</category><category>Tiles</category><category>Unity</category><category>Video</category><category>Virtual Reality</category><category>accessibility</category><category>advertising</category><category>androidp</category><category>app performance</category><category>d8</category><category>event</category><category>features</category><category>iOS</category><category>large_screens</category><category>layouts</category><category>multiplatform apps</category><category>play</category><category>playback</category><category>resizing</category><category>sandbox</category><category>signing</category><category>tutorial</category><category>vulkan</category><category>wifi</category><category>windowing</category><category>#AndroidAI</category><category>#Gemini</category><category>#GoogleforGames</category><category>#Productive</category><category>#featured</category><category>#io17</category><category>#io18</category><category>#transformer</category><category>#watch-face</category><category>#wff</category><category>#widgets</category><category>AGDK</category><category>Activity Recognition</category><category>Android 3.0</category><category>Android 3.2</category><category>Android 4.4</category><category>Android App</category><category>Android Architecture</category><category>Android Basics</category><category>Android Dev</category><category>Android Development Tools</category><category>Android Studio Narwhal</category><category>Android ecosystem</category><category>Android16QPR2</category><category>AndroidGameDev</category><category>AndroidPerformance</category><category>App Bundle</category><category>App Indexing</category><category>Architecture Components</category><category>Biometrics</category><category>Business &amp; Leadership</category><category>Camera X</category><category>Camera2</category><category>Canary</category><category>ChromeOS</category><category>Chromebooks</category><category>Cloud</category><category>Commerce</category><category>Compose Material 3</category><category>Compose UI</category><category>Coroutines</category><category>Crashlytics</category><category>Custom Model</category><category>DAC/google</category><category>DataStore</category><category>Developer Labs</category><category>Developer Productivity</category><category>Early Access</category><category>Firebase Cloud Messaging</category><category>Fragments</category><category>GameDev</category><category>Gemma</category><category>Global</category><category>Google For Games</category><category>Google Maps</category><category>Google Play for Work</category><category>Google client API</category><category>Google+</category><category>Gradle</category><category>Indie Contest</category><category>Indie games contest</category><category>Indie games showcase</category><category>Indie showcase</category><category>Input methods</category><category>Instant Apps</category><category>LiquidFun</category><category>MADSkills</category><category>Maps</category><category>Maps API</category><category>MaterialDesign</category><category>MediaSession</category><category>Mobile App Development</category><category>Mobile Development</category><category>Notification</category><category>Onboarding</category><category>Pixel Fold</category><category>Pixel Watch</category><category>Preview</category><category>Privacy Sandbox</category><category>Productivity</category><category>Profiling</category><category>SDK Tools</category><category>Samsung</category><category>Screens</category><category>Studio Bot</category><category>Subscription</category><category>TLS</category><category>Text and Input</category><category>UI Development</category><category>Ultra HDR</category><category>Watch Face</category><category>Wearables</category><category>Window Size Classes</category><category>android oreo</category><category>android privacy</category><category>android-tv</category><category>apk</category><category>appexcellencecasestudy</category><category>appquality</category><category>ar</category><category>bestpractices</category><category>chrome os</category><category>codelab</category><category>compiler</category><category>connection encryption</category><category>developergamestory</category><category>documentation</category><category>dynamic delivery</category><category>emulator</category><category>encryption</category><category>fcm</category><category>foldable</category><category>free-form</category><category>glance</category><category>google play for families</category><category>google-tv</category><category>insets</category><category>kernel</category><category>language</category><category>largescreens</category><category>live edit</category><category>mobile vision APIs</category><category>multi-device development</category><category>multitasking</category><category>network security</category><category>oreo</category><category>people</category><category>privacy sandbox on android</category><category>profile guided optimization</category><category>stable release</category><category>store listing experiments</category><category>training</category><category>transformer</category><category>transparency</category><category>ubicomp</category><category>updates</category><category>wear-tiles</category><category>windowmanager</category><category>#APK</category><category>#Android12</category><category>#AndroidDev</category><category>#AndroidJetpack</category><category>#Androiddevelopment</category><category>#CredentialManager</category><category>#GDC20</category><category>#Media3</category><category>#Studio</category><category>#TV</category><category>#complications</category><category>#credential-manager</category><category>#exoplayer</category><category>#googleplay</category><category>#identity</category><category>#nav3</category><category>#releases</category><category>#tiles</category><category>'Google Play</category><category>5G</category><category>64bit</category><category>A/B testing</category><category>AGDE</category><category>AI assisted coding</category><category>AI code completion</category><category>Action Bar</category><category>Actions</category><category>Adaptive apps</category><category>Agent Mode</category><category>Android 12L</category><category>Android 16</category><category>Android 2.1</category><category>Android 2.2</category><category>Android 2.3</category><category>Android 7.0</category><category>Android 71</category><category>Android App Bundles</category><category>Android Architecture Components</category><category>Android Developer Community</category><category>Android Developer Phone</category><category>Android Device Streaming</category><category>Android Devs</category><category>Android Game SDK</category><category>Android Media</category><category>Android Pay API</category><category>Android Photo Picker</category><category>Android SDK Upgrade Assistant</category><category>Android Storage</category><category>Android Studio 3.0</category><category>Android Studio Arctic Fox</category><category>Android Studio Dolphin</category><category>Android Studio Flamingo</category><category>Android Studio Giraffe</category><category>Android Studio Hedgehog</category><category>Android Studio Jellyfish</category><category>Android Studio Koala</category><category>Android Studio Koala Feature Drop</category><category>Android TV OS</category><category>Android Wear 2.0</category><category>Android XR SDK</category><category>Android app excellence</category><category>Android betas</category><category>Android codelabs</category><category>Android courses</category><category>Android training</category><category>Androidtv</category><category>Animation and Graphics</category><category>App Bundles</category><category>App Excellence</category><category>App Quality Insights</category><category>AppCompat</category><category>Assistant</category><category>Audio for Android</category><category>Auto</category><category>BLE</category><category>Back Stack</category><category>Better together</category><category>Boston</category><category>C</category><category>Compose Animation Previews</category><category>Conversation API</category><category>Dashboard</category><category>Daydream</category><category>Debugging</category><category>Declarative Programming</category><category>Dev Tools</category><category>Developer Console Store Listing Experiments</category><category>Efficient Apps</category><category>Feature Group</category><category>Fundamentals</category><category>GDC 2020</category><category>GLSL</category><category>GPS</category><category>Gesture Navigation</category><category>Google Developer</category><category>Google Play App Safety</category><category>Google Play Billing</category><category>Google Play Instant</category><category>Google Play Integrity API</category><category>Google Play SDK Console</category><category>Google Play SDK Index</category><category>Google Sign-In</category><category>Google Wallet</category><category>Google codelabs</category><category>Google for Games Developer Summit</category><category>GoogleAPIClient</category><category>Gradle sync</category><category>Guidelines</category><category>Health Services</category><category>Horologist</category><category>I/O</category><category>I/O2014</category><category>IME</category><category>Influence</category><category>Internet of Things</category><category>JNI</category><category>Japan</category><category>Java</category><category>Java 8</category><category>JetBrains</category><category>Jetpack Compose 1.2</category><category>Jetpack Libraries</category><category>Kotlin Everywhere</category><category>KotlinConf 2023</category><category>LVL</category><category>LaunchShow</category><category>Linux</category><category>LondonEng</category><category>MAD Skills</category><category>Made by Google</category><category>Memory Management</category><category>Mobile World Congress</category><category>Model Maker</category><category>MotionLayout</category><category>Multi-form factor designs</category><category>Navigation Library</category><category>Navigation Q&amp;A</category><category>Navigation component</category><category>Navigation3</category><category>Nougat</category><category>On-Device Machine Learning</category><category>OnePlus</category><category>OpenGL</category><category>OpenXR</category><category>PC games</category><category>PickVisualMedia</category><category>Pixel Tablet</category><category>Places</category><category>Play Academy</category><category>Play Commerce</category><category>Play Privacy</category><category>Play Security</category><category>Play Vitals</category><category>PlayStore</category><category>Preview Stabilization</category><category>Problem-Solving</category><category>Profilers</category><category>Pure</category><category>SDR</category><category>SEA</category><category>Safe Browsing</category><category>SafetyNet</category><category>Scoped Storage</category><category>Sharing</category><category>Southeast Asia</category><category>Storage</category><category>TLS by default</category><category>TikTok</category><category>Translation</category><category>UXR</category><category>User Engagement</category><category>User Support</category><category>Visibility</category><category>Watch Face Push</category><category>Wear surfaces</category><category>WebXR</category><category>Window Manager</category><category>adaptive API</category><category>android ux</category><category>android17</category><category>androidjetpack</category><category>app developer</category><category>app lifecycle</category><category>app signing</category><category>apps games insights</category><category>attestation</category><category>autofill</category><category>beacons</category><category>beta testing</category><category>billing</category><category>build Android apps</category><category>buildingforbillions</category><category>canonical layouts</category><category>code completion</category><category>codelabs</category><category>coding productivity</category><category>color</category><category>constraintlayout</category><category>conversations</category><category>conversions</category><category>cross-device</category><category>device explorer</category><category>devices</category><category>dexer</category><category>dx</category><category>editing</category><category>emojis</category><category>game design</category><category>gaming</category><category>get started</category><category>google computer science</category><category>hackster</category><category>immersive experiences</category><category>in-app purchase</category><category>indie game developers</category><category>infinite deviation: games</category><category>insights</category><category>io2010</category><category>laptops</category><category>learn Android</category><category>malware</category><category>multi-device</category><category>on-device</category><category>passwords</category><category>podcast</category><category>policy compliance</category><category>ratings</category><category>regulations</category><category>reviews</category><category>search</category><category>social impact</category><category>solutions</category><category>spatial computing</category><category>startup profiles</category><category>target API</category><category>text</category><category>things</category><category>time</category><category>user data</category><category>watch face API</category><category>"featured'+'androidstudio'</category><category>#11WeeksOfAndroid Android TV</category><category>#64-bit</category><category>#AAB</category><category>#ADS19</category><category>#AIGlasses</category><category>#ARCore #TheAndroidShow</category><category>#ART</category><category>#ATV</category><category>#Android #Android development # advanced Android #learn Android #build Android apps #Udacity</category><category>#Android 14</category><category>#AndroidAppBundles</category><category>#AndroidDeviceStreaming
#AndroidStudio</category><category>#AndroidGeiminiEra</category><category>#AndroidStudio</category><category>#AndroidTV</category><category>#AndroidTV #Google Cast #Udacity</category><category>#AndroidXR</category><category>#Androidbasics</category><category>#AppBundles</category><category>#Argentina</category><category>#Compose</category><category>#Composecamp</category><category>#Covid-19</category><category>#EdTech</category><category>#Editing</category><category>#Experts</category><category>#FFmpeg</category><category>#Firebase</category><category>#GDC17 #GoogleDeveloperDay #GooglePlay #Games #VR #Daydream #Developers #Android #Google Play</category><category>#GDE</category><category>#GPA2017 #GooglePlayAwards #GooglePlay #Games #VR #AR #AndroidWear #Indies #Startup #Apps #Developers #Android #Google Play</category><category>#GPA2018 #GooglePlayAwards #GooglePlay #Games #VR #AR #AndroidWear #Indies #Startup #Apps #Developers #Android #Google Play</category><category>#GTV</category><category>#Game</category><category>#Gemma</category><category>#GoogleDevelopers</category><category>#GoogleTV</category><category>#Imagen</category><category>#MADscore</category><category>#PasskeysWeek #Identity</category><category>#Pixel</category><category>#Productivity</category><category>#STEM</category><category>#StorageSavings</category><category>#TechEd</category><category>#TechEdu</category><category>#XRGlasses</category><category>#XRHeadsets</category><category>#adaptive</category><category>#advancedAndroid #Udacity</category><category>#apps</category><category>#auth-wear</category><category>#authentication</category><category>#autofill</category><category>#autofill-services</category><category>#codelabcourses</category><category>#codelabs</category><category>#compiler</category><category>#develop</category><category>#exposing-data</category><category>#google</category><category>#io16</category><category>#largescreens</category><category>#memory</category><category>#notifications</category><category>#optimization</category><category>#page-sizes</category><category>#performance</category><category>#pixel7</category><category>#restorecredentials</category><category>#sign-in</category><category>#ultra-hdr</category><category>#watch-face-push</category><category>#xr</category><category>'featured'+'platform_update'</category><category>. Web</category><category>.app</category><category>11 Weeks of Android</category><category>11weeksofandroid</category><category>12l</category><category>16 KB memory page</category><category>16 KB page size</category><category>16KB Page Size</category><category>3d</category><category>4 KB page size</category><category>5 star apps</category><category>505 Games</category><category>60 FPS</category><category>8.1</category><category>AAKB</category><category>AAOS</category><category>AAudio for Android</category><category>ADT-3</category><category>AGI</category><category>AI
Industry Trends</category><category>AI Edge</category><category>AIY</category><category>AIY Projects</category><category>AMD</category><category>AMP</category><category>ANR</category><category>API stabilization</category><category>APK Expansion Files</category><category>AQI</category><category>ARM</category><category>ARPU</category><category>ART profiles</category><category>ASO</category><category>ATSL</category><category>About Fun</category><category>Access</category><category>Acquisition</category><category>Activity Embedding</category><category>Activity Stack Pinning</category><category>ActivityResult</category><category>Adaptive development</category><category>Administration</category><category>Advanced Android course</category><category>Advanced Android training</category><category>Agentic</category><category>Agentic AI</category><category>Agus Gomez</category><category>Android 11 Compatibility</category><category>Android 11 final release</category><category>Android 12 Beta 5</category><category>Android 16 KB page</category><category>Android 17</category><category>Android 2.3.3</category><category>Android 4.0</category><category>Android 4.3</category><category>Android 5.1</category><category>Android 7.1</category><category>Android 8.1</category><category>Android AICore</category><category>Android Basics in Kotlin</category><category>Android Basics with Compose</category><category>Android Bench</category><category>Android C++</category><category>Android Dev Summit 2021</category><category>Android Developer Journey</category><category>Android Developers  #GooglePlayAwards #GooglePlay #Games #Indies #Startup #Apps #Developers #Android</category><category>Android Developers Best Practices</category><category>Android Excellence</category><category>Android GPU</category><category>Android Game Development Kit</category><category>Android Games</category><category>Android IDE</category><category>Android IO</category><category>Android Keystore</category><category>Android ML</category><category>Android Neural Networks</category><category>Android Neural Networks API</category><category>Android O Developer Preview</category><category>Android One</category><category>Android Output Switcher</category><category>Android Paging</category><category>Android Pay</category><category>Android Performance Tuner</category><category>Android Plugins</category><category>Android Prompting</category><category>Android Q Beta</category><category>Android Q Beta 6</category><category>Android Quality</category><category>Android Scudo</category><category>Android Security Rewards</category><category>Android Security Rewards Program</category><category>Android Studio 3.6</category><category>Android Studio 4.0</category><category>Android Studio 4.1</category><category>Android Studio 4.2</category><category>Android Studio Bumblebee</category><category>Android Studio Chipmunk</category><category>Android Studio Dolphin Beta</category><category>Android Studio Electric Eel Canary</category><category>Android Studio Icon</category><category>Android Studio Iguana</category><category>Android Studio Ladybug</category><category>Android Studio Logo</category><category>Android Studio Otter</category><category>Android Studio Profiler</category><category>Android Studio for enterprises</category><category>Android Testing Support Library</category><category>Android Tools</category><category>Android U</category><category>Android VRP</category><category>Android audio latency</category><category>Android developer codelabs</category><category>Android games on PC</category><category>Android graphics</category><category>Android release</category><category>AndroidCanary</category><category>AndroidRuntime</category><category>Annoucements</category><category>AnswerLab</category><category>AoG</category><category>App Actions</category><category>App Review</category><category>App Startup</category><category>App Testing</category><category>App experience</category><category>App icons</category><category>AppFunctions</category><category>AppSearch</category><category>AppWidgets</category><category>Application Security Improvement Program</category><category>Assistant SDK</category><category>Auto Backup</category><category>Autofill Framework</category><category>Autofill Services</category><category>Automatic App Testing</category><category>Automotive</category><category>BABBQ</category><category>Backup and Restore (IDE)</category><category>Benchmarking</category><category>Betatesting</category><category>Billions</category><category>Biometric authentication</category><category>BiometricPrompt</category><category>BiometricPrompt API</category><category>Budge Studios</category><category>Bugs</category><category>Built-in Intents</category><category>C++ audio library for Android</category><category>CDD</category><category>CFI</category><category>CMP</category><category>CTS</category><category>Call Log</category><category>CameraX Effect</category><category>CameraX Extensions</category><category>Cast</category><category>Certificates</category><category>Certification</category><category>Channels</category><category>Clock</category><category>Cloud Speech API</category><category>Code Generation</category><category>Compiler Mitigations</category><category>Compiler-based security</category><category>Complications</category><category>Composables</category><category>Compose 1.8</category><category>Compose Adaptive Layouts Library 1.2</category><category>Compose MultiPlatform</category><category>Compose Preview</category><category>Compose Tools</category><category>Compose for Wear OS</category><category>CompositionPlayer</category><category>Connected displays</category><category>Consistency</category><category>Console</category><category>Contacts</category><category>Content Provider</category><category>Control Flow Integrity</category><category>Cool Stuff</category><category>Credential Saving</category><category>CredentialManager</category><category>Crostini</category><category>CultureAlley</category><category>DAC/Design</category><category>DNG</category><category>DNS over TLS</category><category>DP3</category><category>DST</category><category>Dagger</category><category>Dan Dole</category><category>Data-Driven Prompts</category><category>Daylight savings</category><category>Deep Links</category><category>DeliQueue</category><category>Demographics</category><category>Deprecation</category><category>Design Hub</category><category>Desugaring</category><category>DevTools</category><category>Developer Accounts</category><category>Developer Days</category><category>Developer Student Clubs</category><category>DialogFragment</category><category>Disruptor Beam</category><category>DonutTracker</category><category>Doze</category><category>Driving Do Not Disturb</category><category>Duolingo</category><category>EA</category><category>EAP</category><category>EOY Recap 2022</category><category>EOY recap 2023</category><category>Editors’ Choice</category><category>Educate</category><category>Electronic Arts</category><category>Engage</category><category>Engineering</category><category>Enterprise</category><category>Entrepreneurs</category><category>Extensions</category><category>FAQ</category><category>Facebook</category><category>Fast</category><category>Fast Pair</category><category>Feature Combination</category><category>Feedback</category><category>Figma</category><category>Finance</category><category>Find My Device</category><category>Firebase AI Logic</category><category>Firebase Crashlytics</category><category>Fit</category><category>Foreground services</category><category>Fortify</category><category>Fragment</category><category>Freeform Resizing</category><category>Frequently Asked Questions</category><category>Froyo 2.2</category><category>GDC 2025</category><category>GDC17</category><category>GDC19</category><category>GDC20</category><category>GMD</category><category>GNSS</category><category>GPGS</category><category>GPU acceleration</category><category>GSI</category><category>Game Mode API</category><category>Gamer Profile</category><category>Games and Media</category><category>Gareth Jones</category><category>Gemini 1.5 Flash</category><category>Gemini 1.5 Pro</category><category>Gemini API</category><category>Gemini APIs</category><category>Gemini for enterprises</category><category>GeminiPro</category><category>GenAI APIs</category><category>Gestures</category><category>Global Game Jam</category><category>Global events</category><category>Gmail</category><category>Golf Clash</category><category>Google AI Edge</category><category>Google AI Studio</category><category>Google APIs</category><category>Google Ads</category><category>Google Apps</category><category>Google Awareness API</category><category>Google Cloud</category><category>Google Developer Student Clubs</category><category>Google Health</category><category>Google Home app</category><category>Google I/O 2021</category><category>Google Mobile Developer Day</category><category>Google Now</category><category>Google Photos</category><category>Google Play Asset Delivery</category><category>Google Play Developer API</category><category>Google Play Developer API V3</category><category>Google Play Developer API Version 3</category><category>Google Play Developer Policies</category><category>Google Play Games on PC</category><category>Google Play Orders API benefits</category><category>Google Play Points</category><category>Google Play Protect Rewards Program</category><category>Google Play developer distribution agreement</category><category>Google Play monetization insights</category><category>Google Play system updates</category><category>Google registry</category><category>GoogleDeveloperDay</category><category>GoogleForGames</category><category>GoogleIO</category><category>GooglePlay AndroidDev</category><category>Gpfe</category><category>GridLayout</category><category>HAL</category><category>HDR Headroom</category><category>HTC G1</category><category>HWASan</category><category>Hard</category><category>Health and Fitness</category><category>HelloEnglish</category><category>High Speed Recording</category><category>Hilt</category><category>Hiring</category><category>Holo</category><category>How to build Android app</category><category>HttpsURLConnection</category><category>Hutch</category><category>Hutch Games</category><category>Hybrid Interface</category><category>HyperV</category><category>I/O '25</category><category>I/O 2018</category><category>I/O 2024 KMP</category><category>ICS</category><category>IO</category><category>IO 2019</category><category>Image Attachment</category><category>Image Processing</category><category>Imagen</category><category>Images</category><category>Indie Games Fund</category><category>Indie games developers</category><category>Indonesia</category><category>Indonesia Games Contest</category><category>Industry Standards</category><category>Industry Trends</category><category>InkToCode</category><category>Intel</category><category>Intent</category><category>Intermediate</category><category>Inzen studio</category><category>Issue Tracker</category><category>J. Eason</category><category>Jamal Eason</category><category>Jetpack Compose 1.3</category><category>Jetpack Compose 1.4</category><category>Jetpack Compose 1.5</category><category>Jetpack Core Performance library</category><category>Jetpack Glance</category><category>Jetpack Tiles Library</category><category>Jetpack XR SDK</category><category>JetpackCompose</category><category>JioHotstar</category><category>Job Scheduler</category><category>Job Service</category><category>KNOX</category><category>KSP</category><category>Key Attestation</category><category>Keystone</category><category>Kids experience</category><category>Klei Entertainment</category><category>Kotlin Event</category><category>Kotlin Symbol Processiong</category><category>Kotlin codelabs</category><category>KotlinConf 2025</category><category>LLM</category><category>LLM Optimization</category><category>LLM Tuning</category><category>LTV</category><category>LaMatinale</category><category>Large screen</category><category>Layout Inspector</category><category>LeMonde</category><category>Life of a Bug</category><category>Lifecycle</category><category>Lint</category><category>Linux on Chrome OS</category><category>Linux on Chromebooks</category><category>LiteRT</category><category>LiveData</category><category>Lollipop</category><category>Low-light</category><category>MENA</category><category>ML Kit Face Detection</category><category>ML Stack</category><category>MLKit</category><category>Marta Gui</category><category>Material 3 Expressive</category><category>Media Development Kit</category><category>Media Editing</category><category>Media3 Effect</category><category>MediaPipe</category><category>Memory Safety</category><category>MessageQueue</category><category>Messenger</category><category>Meta</category><category>Mirror Mode</category><category>Mixed Reality</category><category>Mobilel</category><category>Motorola Droid</category><category>Mountain View</category><category>Multimodal</category><category>Multiwindow</category><category>Munich</category><category>Music</category><category>MyTouch 3G</category><category>NBU</category><category>NFC</category><category>NLP</category><category>Narwhal Canary</category><category>Nav Editor</category><category>Navigation 3</category><category>Navigation Sample</category><category>Night Mode</category><category>Niji Games</category><category>Nix Hydra</category><category>Non-SDK</category><category>Notification bubbles</category><category>Now in Arabic</category><category>O-MG</category><category>OAuth</category><category>OEM</category><category>OS Updates</category><category>Oboe audio library</category><category>Omnidrone</category><category>OneTap sign-in</category><category>OneUi7</category><category>Ongoing Activities API</category><category>OpenSL ES for Android</category><category>Operating System</category><category>Oppo</category><category>Orientation</category><category>OverlayEffect</category><category>P2P</category><category>PC</category><category>PC gaming</category><category>PWA</category><category>Paging</category><category>Pane expansion</category><category>Parcelize</category><category>Paris Hsu</category><category>PasskeysWeek</category><category>Password Manager</category><category>Paul Gouge</category><category>Photo Sphere</category><category>Physics</category><category>Pico</category><category>Pixel 10 Pro fold</category><category>Pixel 2</category><category>Pixel 9</category><category>Pixel Fold AVD</category><category>Pixel Fold Emulator</category><category>Pixel Tablet AVD</category><category>Pixel Tablet Emulator</category><category>Pixel Watch 4</category><category>Platform Stability</category><category>PlatformUpdate</category><category>Platforms</category><category>Play Console sales channel reporting</category><category>Play Games Services</category><category>Play IO19</category><category>Play Quality</category><category>Play developer identification</category><category>Playdemic</category><category>Playtime</category><category>Playtime 2016</category><category>Plugin</category><category>Pocket Gems</category><category>Potentially Harmful Applications</category><category>Power Consumption</category><category>Power Profiler</category><category>Power Rails</category><category>Pre-Launch Report</category><category>Preload Manager</category><category>PreloadManagerListener</category><category>Preloading</category><category>Product Inclusion</category><category>Profileable Build</category><category>Project Mainline</category><category>Promo Graphics</category><category>Promotions</category><category>Prompt Library</category><category>Protolayouts</category><category>Public Tracker</category><category>Publishing Overview</category><category>PyTorch</category><category>PyTorch mobile support</category><category>PyTorck</category><category>Q Beta 6</category><category>Quick Search Box</category><category>RAW capture</category><category>RTL</category><category>Ratings and Reviews</category><category>Releases</category><category>Restore Credentials</category><category>Robinhood</category><category>Room</category><category>Rust</category><category>SDLC</category><category>SDV</category><category>SMS</category><category>SQLite</category><category>SafeArgs</category><category>Sam Glassenberg</category><category>Sample app</category><category>Samsung One UI</category><category>Sanitizers</category><category>Santa Tracker</category><category>Save for later</category><category>Schell Games</category><category>Screen Flash</category><category>ScreenCapture</category><category>Security Development Lifecycle</category><category>Selected Photos</category><category>Sensors</category><category>Seriously</category><category>Server</category><category>SessionConfig</category><category>Sharding</category><category>ShareActionProvider</category><category>Shared Components</category><category>Shared Elements</category><category>SharedPreferences</category><category>Shortcuts</category><category>Signos</category><category>Simultaneous Contrast</category><category>Skyscanner</category><category>Sliding Window Pattern</category><category>Small Business</category><category>Smart Home</category><category>Smart Lock</category><category>Smartlock</category><category>Social</category><category>Social Point</category><category>South Korea</category><category>Space</category><category>Space Ape Games</category><category>Speech Input</category><category>Startup Speed</category><category>Stencils</category><category>Storytoys</category><category>Stripe</category><category>Studio</category><category>Stylus</category><category>Submit changes</category><category>Super Evil MegaCorp</category><category>Survey</category><category>System Instructions</category><category>System hardening</category><category>TAGS: Google Play</category><category>TEE</category><category>Tabletop</category><category>Tap to Pay</category><category>Target API level</category><category>TargetPreloadStatusControl</category><category>Tel Aviv</category><category>Telephony</category><category>Text improvements</category><category>The Android Show</category><category>Tiles API</category><category>Tiles components</category><category>Tiles material</category><category>Timekeeping</category><category>Timestamps</category><category>Tips</category><category>Titan Brawl</category><category>Todoist</category><category>Tor Norbye</category><category>Touch</category><category>Transform Preview with Gemini</category><category>Trusted User Interface</category><category>TrustedTime</category><category>Twitter</category><category>UAMP</category><category>USB speed detection</category><category>UTP</category><category>Universal Android Music Player</category><category>Updatability</category><category>Upgrade Agent</category><category>User Acquisition</category><category>User Feedback</category><category>User Retention</category><category>User-Agent Reduction</category><category>VGames</category><category>VOD</category><category>Vertex AI Prompts</category><category>Viber</category><category>Video recording</category><category>ViewBinding</category><category>Virtualization</category><category>Visibility tracking</category><category>Vitals</category><category>Voice</category><category>Voice Kit</category><category>Vulnerability</category><category>Vulnerability Remediation</category><category>WEI</category><category>WM</category><category>Wakelocks</category><category>Watch Face Studio</category><category>Wear UI Library</category><category>Webdriver</category><category>Wide Color</category><category>Widget Discovery</category><category>WindowSizeClass</category><category>Withings</category><category>Work Manager</category><category>World Food Day</category><category>X</category><category>X86</category><category>XML</category><category>XR Emulator</category><category>Xiaomi</category><category>XmlPullParser</category><category>YouTube</category><category>Zero-Shot Prompts</category><category>activity-recognition</category><category>add-ons</category><category>advanced Android</category><category>adventure games</category><category>and appquality</category><category>android 12</category><category>android 8.0</category><category>android audio apps</category><category>android c++ games linux open source release osx serialization windows</category><category>android extension pack</category><category>android kotlin</category><category>android o apis</category><category>android sanitizer</category><category>android things 1.0</category><category>android wear 1.0</category><category>android-dev</category><category>android10</category><category>android71</category><category>android81</category><category>android9</category><category>androidbasics</category><category>androiddevsummit</category><category>androidoreo</category><category>app attribution</category><category>app id</category><category>app install</category><category>app size</category><category>app standby buckets</category><category>app updates</category><category>appbundle</category><category>application security</category><category>applications</category><category>arch</category><category>arcore</category><category>ask android</category><category>assistive technology</category><category>audio playback</category><category>audio playback capture</category><category>audio recording</category><category>augmented reality</category><category>award</category><category>awareness</category><category>background</category><category>background access</category><category>background location</category><category>backup and sync</category><category>badge</category><category>bar code</category><category>beacon</category><category>best apps 2020</category><category>best games 2020</category><category>betatesting GooglePlayforFamilies</category><category>big data</category><category>blackhat</category><category>bootcamp</category><category>bubbles</category><category>bug swatting</category><category>building 5 star apps</category><category>building across devices</category><category>bulletins</category><category>business development</category><category>calling</category><category>car app quality</category><category>clang</category><category>class loading</category><category>code sharing</category><category>codesearch</category><category>coding</category><category>companion Action</category><category>compilers</category><category>concurrency</category><category>concurrent camera</category><category>conferencing</category><category>context</category><category>controls</category><category>course</category><category>crash management</category><category>credential</category><category>cross-device sdk</category><category>cross-platform</category><category>cross-platform development</category><category>curriculum</category><category>custom tiles</category><category>cutout</category><category>dalvik</category><category>data storage</category><category>ddms</category><category>decompile</category><category>deeplocal</category><category>desktop apps</category><category>developer community</category><category>developer profile</category><category>developer success</category><category>developerappstory</category><category>developerpreview</category><category>developerstory developerconsole</category><category>device id</category><category>dex2oat</category><category>diagnostics</category><category>dialog full-screen dim</category><category>digital credentials</category><category>digital identity</category><category>disassembly</category><category>dynamicdelivery</category><category>eBook</category><category>ecosystem</category><category>educator</category><category>efficiency</category><category>encoding</category><category>explorer</category><category>face detection</category><category>faculty</category><category>families</category><category>feature combination query</category><category>final release</category><category>financial management</category><category>first app</category><category>fitness</category><category>font updates</category><category>free trial</category><category>full-text search</category><category>game-as-a-service</category><category>games business</category><category>gaming industry</category><category>gapid</category><category>gdc18</category><category>getting started</category><category>go edition</category><category>gold</category><category>golf games</category><category>google pay</category><category>google security</category><category>googleservices</category><category>guide</category><category>heading</category><category>health</category><category>heart rate sensor</category><category>high dynamic range</category><category>high frame rate</category><category>how to develop audio apps for android</category><category>how to increase app revenue Google Play</category><category>http</category><category>i18n</category><category>iOS development</category><category>image description</category><category>imakeapps</category><category>in-app transactions</category><category>in-car experiences</category><category>insider attack resistance</category><category>install referrer</category><category>install track</category><category>installs</category><category>instant</category><category>instant experience</category><category>instant games</category><category>instructor</category><category>interactive divider</category><category>internationalization</category><category>internet</category><category>intuit</category><category>io16</category><category>io18</category><category>jetpack media3</category><category>jobscheduler</category><category>journeys testing</category><category>journeys with gemini</category><category>key</category><category>keymaster</category><category>keymint</category><category>keys</category><category>keystore</category><category>kids app developers</category><category>kids apps</category><category>ktx</category><category>l10n</category><category>language id</category><category>language identification</category><category>laptop apps</category><category>large screen devices</category><category>latency</category><category>latest.</category><category>leanback</category><category>learning</category><category>listing</category><category>liveops</category><category>location access</category><category>location data</category><category>lock contention</category><category>lock-free</category><category>long aspect ratio</category><category>longevity</category><category>machine</category><category>marble</category><category>media controls</category><category>media playback</category><category>meet</category><category>memory</category><category>messaging api</category><category>minSdkVersion</category><category>mobile ads</category><category>mobile driving license</category><category>mobile encryption</category><category>mobile search</category><category>monitoring</category><category>motion</category><category>motion.</category><category>multi-display support</category><category>multi-product checkout</category><category>multiplayer</category><category>music player</category><category>musician apps</category><category>native development</category><category>native libraries</category><category>navigation apps</category><category>network</category><category>new Play developer accounts</category><category>new with Cast</category><category>nonce field</category><category>oboe</category><category>of</category><category>official launch</category><category>offline</category><category>on-device AI</category><category>optimize app ARPPU</category><category>optimized resource shrinking</category><category>ordered broadcast</category><category>oscon</category><category>outreach</category><category>packaging</category><category>partial</category><category>passwordless authentication</category><category>patch level</category><category>patching</category><category>pathway</category><category>peer group</category><category>perfetto</category><category>performance class</category><category>performancetools</category><category>phone</category><category>photo picker</category><category>play billing</category><category>play billing library</category><category>play core</category><category>playback resumption</category><category>playbook app</category><category>playconsole</category><category>player engagement</category><category>policy violations</category><category>postview</category><category>pre rotation</category><category>pre-leaunch</category><category>preinstalled apps</category><category>preloaded apps</category><category>priority inversion</category><category>pro audio</category><category>problem solving</category><category>programming</category><category>project marble</category><category>protection</category><category>provisioning</category><category>publishing</category><category>purchase flows</category><category>push messaging</category><category>pwn</category><category>real world identity</category><category>real-time audio</category><category>recaptcha</category><category>reduce app churn strategies</category><category>registration</category><category>requirement</category><category>revenue</category><category>robotics</category><category>rotation</category><category>runtime</category><category>runtime permissions</category><category>sandbox ads</category><category>sanitizer</category><category>schools</category><category>screen</category><category>screensharing</category><category>sdk</category><category>seamless transfer</category><category>secondhand</category><category>secure hardware</category><category>security infrastructure</category><category>selinux</category><category>sensors-and-location</category><category>service fees</category><category>sign-in</category><category>slow motion</category><category>smart reply</category><category>smartwatch design</category><category>smr</category><category>source code</category><category>spam</category><category>spatial audio</category><category>spyware</category><category>stability</category><category>stable</category><category>storelistingexperime</category><category>strictmode</category><category>study group</category><category>success</category><category>suggested fixes for crashes</category><category>synthetics</category><category>system UI</category><category>system fonts</category><category>tamper-resistant hardware security</category><category>targeted spyware</category><category>taxation</category><category>taxes</category><category>teach</category><category>telecom</category><category>text styling API</category><category>textclassifier</category><category>texture compression</category><category>textview</category><category>threading</category><category>time zone</category><category>titan</category><category>traceview</category><category>tradein</category><category>transition api</category><category>transitions</category><category>trial period</category><category>trust</category><category>university</category><category>user control</category><category>user location</category><category>user safety</category><category>version</category><category>video call</category><category>video editing</category><category>video playback</category><category>videocall</category><category>viewfinder</category><category>viewpager</category><category>virtual instruments</category><category>voice call</category><category>voip</category><category>vulnerabilities</category><category>wake locks</category><category>wear emulators</category><category>web registry</category><category>wellness</category><category>window</category><category>“Privacy Sandbox on Android”</category><title>Arena51</title><description>Arena51.be website</description><link>http://android-developers.googleblog.com/</link><managingEditor>noreply@blogger.com (Birna)</managingEditor><generator>Blogger</generator><openSearch:totalResults>1995</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-8901366482873050941</guid><pubDate>Thu, 02 Apr 2026 14:00:00 +0000</pubDate><atom:updated>2026-04-03T12:17:14.548-07:00</atom:updated><title>Android Studio supports Gemma 4: our most capable local model for agentic coding</title><description>&lt;meta content="Your Post Title" property="og:title"&gt;&lt;/meta&gt;
&lt;meta content="A short summary of your post." property="og:description"&gt;&lt;/meta&gt;
&lt;meta content="URL-TO-YOUR-IMAGE.jpg" property="og:image"&gt;&lt;/meta&gt;
&lt;meta content="article" property="og:type"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEgXYlRjbxC3pzK0IAAN_lsTJmGKOPQFRkB3VSQ_VASBbDptbLR-ZouiXNcNQ1ZLpyqcYhkFK4G8H7lf6IulQYuvjBEVPyzXRCDwDbf7HmNV16MyqsE53T6icyLQuXOmASIBNV05FzacpAf6Zcox4qIdg1jBK-rOK4KmTAYjFSlfSQ0lmrK8GhyltG-85k0" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEgXYlRjbxC3pzK0IAAN_lsTJmGKOPQFRkB3VSQ_VASBbDptbLR-ZouiXNcNQ1ZLpyqcYhkFK4G8H7lf6IulQYuvjBEVPyzXRCDwDbf7HmNV16MyqsE53T6icyLQuXOmASIBNV05FzacpAf6Zcox4qIdg1jBK-rOK4KmTAYjFSlfSQ0lmrK8GhyltG-85k0" style="display: none;" /&gt;
&lt;div&gt;&lt;i&gt;Posted by Matthew Warner, Google Product Manager&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL2TZw-GrI4OzbxMKTVdt4f7mZwFKPSGFYnmekpRjBZmd_daEMz0fuBJ41EklTr72GScWmr6HF0gqTGypgUVjRAKvd5zTJKF58xwfwJqvzaeECy420fXJXmm67YxSg3b1qATc3tB5mccZHys2WmIvvtyAKQzkwjbnykEpdmxPo5kPbPuIYG2jKQ7L24IM/s8459/Gemma%204%20Android%20Studio-%20Blog.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="2518" data-original-width="8459" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL2TZw-GrI4OzbxMKTVdt4f7mZwFKPSGFYnmekpRjBZmd_daEMz0fuBJ41EklTr72GScWmr6HF0gqTGypgUVjRAKvd5zTJKF58xwfwJqvzaeECy420fXJXmm67YxSg3b1qATc3tB5mccZHys2WmIvvtyAKQzkwjbnykEpdmxPo5kPbPuIYG2jKQ7L24IM/s16000/Gemma%204%20Android%20Studio-%20Blog.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;p&gt;Every developer's AI workflow and needs are unique, and it's important to be able to choose how AI helps your development. In January, we introduced &lt;a href="https://android-developers.googleblog.com/2026/01/llm-flexibility-agent-mode-improvements.html" target="_blank"&gt;the ability to choose any local or remote AI model to power AI functionality in Android Studio,&lt;/a&gt; and today, we're announcing the availability of &lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/" target="_blank"&gt;Gemma 4&lt;/a&gt; for AI coding assistance in Android Studio. This new local model trained on Android development provides the best of both worlds: the privacy and cost-efficiency of on-device processing alongside state-of-the-art reasoning and tool-calling capabilities.&lt;/p&gt;

&lt;h3&gt;AI assistance, locally delivered&lt;/h3&gt;

&lt;p&gt;By running locally on your machine, Gemma 4 gives you AI code assistance that doesn't require an internet connection or an API key for its core operations. Key benefits include:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Privacy and security:&lt;/strong&gt; Your code stays on your machine. Gemma 4 processes all Agent Mode requests locally, making it an ideal choice for developers working with data privacy requirements or in secure corporate environments.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Cost efficiency:&lt;/strong&gt; Run complex agentic workflows without worrying about hitting quotas. Gemma 4 is optimized to run efficiently on modern development hardware, utilizing local GPU and RAM to provide snappy, responsive assistance.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Offline availability:&lt;/strong&gt; Use the agent to write code even when you don’t have an internet connection.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;State-of-the-art reasoning:&lt;/strong&gt; Gemma 4 delivers best-in-class reasoning, capable of complex multi-step coding tasks in Agent Mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Powerful agentic coding&lt;/h3&gt;

&lt;p&gt;Gemma 4 was trained for Android development with agentic tool calling capabilities. When you select Gemma 4 as your local model, you can leverage Agent Mode for a variety of development use cases, such as:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Designing new features:&lt;/strong&gt; Developers can ask the agent to build a new feature or an entire app with commands like “build a calculator app” and the agent will not only generate the UI code but will use Android best practices like writing in Kotlin and using Jetpack Compose.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Refactoring:&lt;/strong&gt; You can give high-level commands such as "Extract all hardcoded strings and migrate them to strings.xml." The agent will scan your codebase, identify instances requiring changes, and apply the edits across multiple files simultaneously.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Bug fixing and build resolution:&lt;/strong&gt; If a project fails to build or has persistent lint errors, you can prompt the agent to "Build my project and fix any errors." The agent will navigate to the offending code and iteratively apply fixes until the build is successful.&lt;/li&gt;
  &lt;/ul&gt;
&lt;br/&gt;
  &lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;iframe 
        allow="autoplay" 
        allowfullscreen="" 
        class="BLOG_video_class" 
        height="550" 
        src="https://www.youtube.com/embed/4iPn1qRVsNY?autoplay=1&amp;mute=1" 
        width="100%" 
        youtube-src-id="4iPn1qRVsNY"&gt;
    &lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;Recommended hardware requirements&lt;/h3&gt;

&lt;p&gt;The 26B MoE is recommended for Android app developers using a machine with the minimum hardware requirements. Total RAM needed includes both Android Studio and Gemma.&lt;/p&gt;

&lt;table style="border-collapse: collapse; margin: 20px 0px; width: 100%;"&gt;
    &lt;thead&gt;
        &lt;tr style="border-bottom: 1px solid rgb(204, 204, 204); text-align: left;"&gt;
            &lt;th style="padding: 10px;"&gt;Model&lt;/th&gt;
            &lt;th style="padding: 10px;"&gt;Total RAM needed&lt;/th&gt;
            &lt;th style="padding: 10px;"&gt;Storage needed&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr style="border-bottom: 1px solid rgb(238, 238, 238);"&gt;
            &lt;td style="padding: 10px;"&gt;Gemma E2B&lt;/td&gt;
            &lt;td style="padding: 10px;"&gt;8GB&lt;/td&gt;
            &lt;td style="padding: 10px;"&gt;2 GB&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style="border-bottom: 1px solid rgb(238, 238, 238);"&gt;
            &lt;td style="padding: 10px;"&gt;Gemma E4B&lt;/td&gt;
            &lt;td style="padding: 10px;"&gt;12 GB&lt;/td&gt;
            &lt;td style="padding: 10px;"&gt;4 GB&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style="border-bottom: 1px solid rgb(238, 238, 238);"&gt;
            &lt;td style="padding: 10px;"&gt;Gemma 26B MoE&lt;/td&gt;
            &lt;td style="padding: 10px;"&gt;24 GB&lt;/td&gt;
            &lt;td style="padding: 10px;"&gt;17 GB&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Get started&lt;/h3&gt;
&lt;div style="text-align: left;"&gt;To get started, ensure you have the latest version of &lt;strong&gt;Android Studio&lt;/strong&gt; installed.&lt;/div&gt;
&lt;ol&gt;
    &lt;li&gt;Install an LLM provider, such as &lt;a href="https://lmstudio.ai/" target="_blank"&gt;LM Studio&lt;/a&gt; or &lt;a href="https://ollama.com/" target="_blank"&gt;Ollama&lt;/a&gt;, on your local computer.&lt;/li&gt;
    &lt;li&gt;In &lt;strong&gt;Settings &amp;gt; Tools &amp;gt; AI &amp;gt; Model Providers&lt;/strong&gt; add your LM Studio or Ollama instance.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="separator" style="clear: both; margin: 20px 0px; text-align: center;"&gt;
    &lt;span style="border: none; display: inline-block; height: 332px; margin-left: 1em; margin-right: 1em; overflow: hidden; width: 613px;"&gt;
        &lt;img height="452.8165680473373" src="https://blogger.googleusercontent.com/img/a/AVvXsEho9ZRBt7zhTOlhCi9XAGnvIqhTj750pko-_K-VJJYR8fgFO0JryChThYvwIb9uRQK6tUYLWPPUim059YH0r4nEEaeDzHFDs1J-3uf-Xi3ZAUx65w9Y8hgBYuuPjp2Ljw6joqAR4nV4nIIBVVDtkS2cBmf5N9RSt7rBFACqzmVDGQ8WL1UU2AYjn7cd77E" style="margin-left: 0px; margin-top: 0px;" width="613" /&gt;
    &lt;/span&gt;
&lt;/div&gt;

&lt;ol&gt;
    &lt;li&gt;Download the Gemma 4 model from &lt;a href="https://ollama.com/library?sort=newest&amp;amp;q=gemma" target="_blank"&gt;Ollama&lt;/a&gt; or &lt;a href="https://lmstudio.ai/models" target="_blank"&gt;LM Studio&lt;/a&gt;. Refer to hardware requirements for model size selection.&lt;/li&gt;
    &lt;li&gt;In Agent Mode, select &lt;b&gt;Gemma 4&lt;/b&gt; as your active model.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="separator" style="clear: both; margin: 20px 0px; text-align: center;"&gt;
    &lt;span style="border: none; display: inline-block; height: 326px; margin-left: 1em; margin-right: 1em; overflow: hidden; width: 368px;"&gt;
        &lt;img height="326" src="https://blogger.googleusercontent.com/img/a/AVvXsEheta9n6RG-08f4kw_NnXaWsU0LrkFtb8cPVwunnzB-yuTrybr4Z2pV8D1o5SuzUNl3GXd55m_dIYULqgs_MbKW7yGUHAJAHY75mEuIlAwo0ctKF4mjejTXWpZF3yiWB26Ww_nEnEcT8StDlgF3c_tPa2zl6KQdg-2A8LkZNKOcGzBe2AB_KrDteuSZYGE" style="margin-left: 0px; margin-top: 0px;" width="400.4145077720208" /&gt;
    &lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;For a detailed walkthrough on configuration, check out the official documentation on &lt;a href="https://developer.android.com/studio/gemini/use-a-local-model" target="_blank"&gt;how to use a local model&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We are excited to see how Gemma 4 enables more private, secure, and powerful development workflows. As always, your feedback is essential as we continue to refine the AI experience in Android Studio. If you find a bug or issue, please &lt;a href="https://developer.android.com/studio/report-bugs" target="_blank"&gt;file an issue&lt;/a&gt;. Also you can be part of our vibrant Android developer community on &lt;a href="https://www.linkedin.com/showcase/androiddev/posts/?feedView=all" target="_blank"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://www.youtube.com/c/AndroidDevelopers/videos" target="_blank"&gt;YouTube&lt;/a&gt;, or &lt;a href="https://x.com/androidstudio" target="_blank"&gt;X&lt;/a&gt;. Happy coding!&lt;/p&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/04/android-studio-supports-gemma-4-local.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEgXYlRjbxC3pzK0IAAN_lsTJmGKOPQFRkB3VSQ_VASBbDptbLR-ZouiXNcNQ1ZLpyqcYhkFK4G8H7lf6IulQYuvjBEVPyzXRCDwDbf7HmNV16MyqsE53T6icyLQuXOmASIBNV05FzacpAf6Zcox4qIdg1jBK-rOK4KmTAYjFSlfSQ0lmrK8GhyltG-85k0=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-1018505883888830902</guid><pubDate>Thu, 02 Apr 2026 14:00:00 +0000</pubDate><atom:updated>2026-04-03T13:06:36.041-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Product News</category><title>Announcing Gemma 4 in the AICore Developer Preview</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEijK_b2J_MZIfUZAF0dQr6EM7nVpfhugNAZBJAGflT-DRH85ZlOE1N0J6Dihq_hjTIWhS--sCfYBUMaZzTzdO0V86yaZfzyOFvDNELid7QpH20ZVRPpayXYJziA12DbDdi2H8FVQClLbMieiBShWWKo7ee6uXIDLWNEt2L1X8BEvgyCoKXW8dy1Z5-lAPk" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEijK_b2J_MZIfUZAF0dQr6EM7nVpfhugNAZBJAGflT-DRH85ZlOE1N0J6Dihq_hjTIWhS--sCfYBUMaZzTzdO0V86yaZfzyOFvDNELid7QpH20ZVRPpayXYJziA12DbDdi2H8FVQClLbMieiBShWWKo7ee6uXIDLWNEt2L1X8BEvgyCoKXW8dy1Z5-lAPk" style="display: none;" /&gt;&lt;div&gt;&lt;i&gt;Posted by David Chou, Product Manager and Caren Chang, Developer Relations Engineer&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh14KuIHgi9wTCd33OHC3po3RHFBUGtAOuEieW88rvHO55hB6vDLXX0_9e0ETxvYXtDV10Nh-u95Kfv1DlgLIhTnwH2og1uX92yKeYCdKdHiOvHj4QXv05ZjI0kJ4Ro4fbUEo6IXVNe2qP0KRodq5_x4A9HC_f3utikZSufwS6l7qSNuj1lz0l_uUuwavA/s8419/Develope%20with%20Gemma%204%20%20-%20Blog%20.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="2507" data-original-width="8419" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh14KuIHgi9wTCd33OHC3po3RHFBUGtAOuEieW88rvHO55hB6vDLXX0_9e0ETxvYXtDV10Nh-u95Kfv1DlgLIhTnwH2og1uX92yKeYCdKdHiOvHj4QXv05ZjI0kJ4Ro4fbUEo6IXVNe2qP0KRodq5_x4A9HC_f3utikZSufwS6l7qSNuj1lz0l_uUuwavA/s16000/Develope%20with%20Gemma%204%20%20-%20Blog%20.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;p&gt;At Google, we’re committed to bringing the most capable AI models directly to the Android devices in your pocket. Today, we’re thrilled to announce the release of our latest state-of-the-art open model: &lt;strong&gt;&lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/" target="_blank"&gt;Gemma 4&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These models are the foundation for the next generation of Gemini Nano, so code you write today for Gemma 4 will automatically work on Gemini Nano 4-enabled devices that will be available later this year. With Gemini Nano 4, you’ll benefit from our additional performance optimizations so you can ship to production across the Android ecosystem with the most efficient on-device inference.&lt;/p&gt;&lt;p&gt;You can get early access to this model today through the &lt;a href="https://developers.google.com/ml-kit/genai/aicore-dev-preview"&gt;AICore Developer Preview&lt;/a&gt;.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4qLjdmvoBNt39o2Ycy4baqsOQaOlGOWsPoT10jKp1mONjE0nm5xBiX0qPUe0xLl4zVT3Hva3qQDmRVbrt4nYvxhkMoXjkd6d4Z8QV0W1bN5TKOZFXErWM500wuxIrIovgc_KiFwfJaC6-wwnzO6zWX3K6cAn20XgY5XDGWi79TIu__EWFPhalZUJkQ94/s1440/Inline-imagery.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1440" data-original-width="1440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4qLjdmvoBNt39o2Ycy4baqsOQaOlGOWsPoT10jKp1mONjE0nm5xBiX0qPUe0xLl4zVT3Hva3qQDmRVbrt4nYvxhkMoXjkd6d4Z8QV0W1bN5TKOZFXErWM500wuxIrIovgc_KiFwfJaC6-wwnzO6zWX3K6cAn20XgY5XDGWi79TIu__EWFPhalZUJkQ94/s16000/Inline-imagery.gif" title="Select the Gemini Nano 4 Fast model in the Developer Preview UI to see its blazing fast inference speed in action before you write any code" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div style="margin: 20px 0px; text-align: center;"&gt;

        &lt;source src="selectNanoV4.mp4" type="video/manual"&gt;&lt;/source&gt;

    &lt;/div&gt;&lt;/div&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Select the Gemini Nano 4 Fast model in the Developer Preview UI&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;to see its blazing fast inference speed in action before you write any code&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;p&gt;Because Gemma 4 natively supports over 140 languages, you can expect improved localized, multilingual experiences for your global audience. Furthermore, Gemma 4 offers industry-leading performance with multimodal understanding, allowing your apps to understand and process text, images, and audio. To give you the best balance of performance and efficiency, Gemma 4 on Android comes in two sizes:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;E4B:&lt;/strong&gt; Designed for higher reasoning power and complex tasks.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;E2B:&lt;/strong&gt; Optimized for maximum speed (3x faster than the E4B model!) and lower latency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The new model is up to 4x faster than previous versions and uses up to 60% less battery. Starting today, you can experiment with improved capabilities including:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Reasoning:&lt;/strong&gt; Chain-of-thought commands and conditional statements can now be expected to return higher quality results. For example: &lt;em&gt;“Determine if the following comment for a discussion thread passes the community guidelines. The comment does not pass the community guideline if it contains one or more of these reason_for_flag: profanity, derogatory language, hate speech”. If the review passes the community guidelines, return {true}. Otherwise, return {false, reason_for_flag}.”&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Math:&lt;/strong&gt; With better math skills, the model can now more accurately answer questions. For example: &lt;em&gt;“If I get 26 paychecks per year, how much should I contribute each paycheck to reach my savings goal of $10,000 over the course of a year?”&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Time understanding:&lt;/strong&gt; The model is now more capable when reasoning about time, making it more accurate for use cases that involve calendars, reminders, and alarms. For example: &lt;em&gt;“The event is at 6PM on August 18th, and a reminder should be sent out 10 hours before the event. Return the time and date the reminder should be sent.”&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Image understanding:&lt;/strong&gt; Use cases that involve OCR (Optical Character Recognition) - such as chart understanding, visual data extraction, and handwriting recognition - will now return more accurate results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Join the &lt;a href="https://developers.google.com/ml-kit/genai/aicore-dev-preview" target="_blank"&gt;Developer Preview&lt;/a&gt; today to download these models in preview models and start building next-generation features right away.&lt;/p&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;div style="height: 0px; max-width: 100%; overflow: hidden; padding-bottom: 56.25%; position: relative; text-align: center;"&gt;
  &lt;iframe allowfullscreen="" src="https://www.youtube.com/embed/iB5POKmXfWY" style="border: 0; height: 100%; left: 0; position: absolute; top: 0; width: 100%;"&gt;
  &lt;/iframe&gt;&lt;/div&gt;&lt;div style="height: 0px; max-width: 100%; position: relative; text-align: center;"&gt;&lt;i style="text-align: left;"&gt;Start building with Gemma 4&lt;/i&gt;&lt;/div&gt;
  &lt;h3 style="text-align: left;"&gt;Start testing the model&lt;/h3&gt;
&lt;p style="text-align: left;"&gt;You can try out the model without code by following the &lt;a href="https://developers.google.com/ml-kit/genai/aicore-dev-preview"&gt;Developer Preview guide&lt;/a&gt;. If you want to jump straight into integrating these models with your existing workflow, we’ve made that seamless. Head over to &lt;a href="https://developer.android.com/studio/gemini/use-a-local-model" target="_blank"&gt;Android Studio&lt;/a&gt; to refine your prompt and build with the familiar ML Kit Prompt API. We’ve introduced a new ability to specify a model, allowing you to target the E2B (fast) or E4B (full) variants for testing.&lt;/p&gt;
&lt;pre style="background-color: #f8f9fa; border-radius: 12px; border: 1.5px solid rgb(209, 213, 219); color: #374151; font-family: Consolas, Monaco, monospace; font-size: 14px; line-height: 1.6; margin: 20px 0px; overflow-x: auto; padding: 30px; text-align: left; white-space: pre-wrap;"&gt;&lt;span style="color: #059669;"&gt;// Define the configuration with a specific track and preference&lt;/span&gt;
&lt;span style="color: #4f46e5;"&gt;val&lt;/span&gt; previewFullConfig = generationConfig {
    modelConfig = &lt;span style="color: #be185d;"&gt;ModelConfig&lt;/span&gt; {
        releaseTrack = &lt;span style="color: #111827;"&gt;ModelReleaseTrack&lt;/span&gt;.PREVIEW
        preference = &lt;span style="color: #111827;"&gt;ModelPreference&lt;/span&gt;.FULL
    }
}

&lt;span style="color: #059669;"&gt;// Initialize the GenerativeModel with the configuration&lt;/span&gt;
&lt;span style="color: #4f46e5;"&gt;val&lt;/span&gt; previewModel = &lt;span style="color: #be185d;"&gt;GenerativeModel&lt;/span&gt;.getClient(previewFullConfig)

&lt;span style="color: #059669;"&gt;// Verify that the specific preview model is available&lt;/span&gt;
&lt;span style="color: #4f46e5;"&gt;val&lt;/span&gt; previewModelStatus = previewModel.checkStatus()
&lt;span style="color: #4f46e5;"&gt;if&lt;/span&gt; (previewModelStatus == &lt;span style="color: #be185d;"&gt;FeatureStatus&lt;/span&gt;.AVAILABLE) {
    &lt;span style="color: #059669;"&gt;// Proceed with inference&lt;/span&gt;
    &lt;span style="color: #4f46e5;"&gt;val&lt;/span&gt; response = previewModel.generateContent(&lt;span style="color: #059669;"&gt;"If I get 26 paychecks per year, how much I should contribute each paycheck to reach my savings goal of $10k over the course of a year? Return only the amount."&lt;/span&gt;)

} &lt;span style="color: #4f46e5;"&gt;else&lt;/span&gt; {
    &lt;span style="color: #059669;"&gt;// Handle the case where the preview model is not available&lt;/span&gt;
    &lt;span style="color: #059669;"&gt;// (e.g., print out log statements)&lt;/span&gt;
}
&lt;/pre&gt;
  

&lt;h3 style="text-align: left;"&gt;What to expect during the Developer Preview&lt;/h3&gt;

&lt;p style="text-align: left;"&gt;The goal of this Developer Preview is to give you a head start on refining prompt accuracy and exploring new use cases for your specific apps.&amp;nbsp;&lt;/p&gt;&lt;p style="text-align: left;"&gt;We will be making several updates throughout the preview period, including support for tool calling, structured output, system prompts, and thinking mode in Prompt API, making it easier to take full advantage of the new capabilities and significant performance optimizations in Gemma 4.&lt;/p&gt;

&lt;p style="text-align: left;"&gt;The preview models are available for testing on AICore-enabled devices. These models will run on the latest generation of specialized AI accelerators from Google, MediaTek, and Qualcomm Technologies. On other devices, the models will initially run on a CPU implementation that is not representative of final production performance. If your device is not AICore-enabled, you can also test these models via the &lt;a href="https://play.google.com/store/apps/details?id=com.google.ai.edge.gallery&amp;amp;hl=en_US" target="_blank"&gt;AI Edge Gallery&lt;/a&gt; app. We’ll provide support for more devices in the future.&lt;/p&gt;

&lt;h3 style="text-align: left;"&gt;How to get started&lt;/h3&gt;

&lt;p style="text-align: left;"&gt;Ready to see what Gemma 4 can do for your users?&lt;/p&gt;

&lt;ol&gt;
    &lt;li style="text-align: left;"&gt;&lt;strong&gt;Opt-in:&lt;/strong&gt; Sign up for the &lt;a href="https://developers.google.com/ml-kit/genai/aicore-dev-preview" target="_blank"&gt;AICore Developer Preview&lt;/a&gt;.&lt;/li&gt;
    &lt;li style="text-align: left;"&gt;&lt;strong&gt;Download:&lt;/strong&gt; Once opted in, you can trigger the download of the latest Gemma 4 models directly to your supported test device.&lt;/li&gt;
    &lt;li style="text-align: left;"&gt;&lt;strong&gt;Build:&lt;/strong&gt; Update your ML Kit implementation to target the new models and start building in Android Studio.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/04/AI-Core-Developer-Preview.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEijK_b2J_MZIfUZAF0dQr6EM7nVpfhugNAZBJAGflT-DRH85ZlOE1N0J6Dihq_hjTIWhS--sCfYBUMaZzTzdO0V86yaZfzyOFvDNELid7QpH20ZVRPpayXYJziA12DbDdi2H8FVQClLbMieiBShWWKo7ee6uXIDLWNEt2L1X8BEvgyCoKXW8dy1Z5-lAPk=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-166516025270729047</guid><pubDate>Thu, 02 Apr 2026 14:00:00 +0000</pubDate><atom:updated>2026-04-02T09:43:34.495-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android Studio</category><category domain="http://www.blogger.com/atom/ns#">Gemini Nano</category><category domain="http://www.blogger.com/atom/ns#">Gemma</category><category domain="http://www.blogger.com/atom/ns#">GenAI</category><category domain="http://www.blogger.com/atom/ns#">Product News</category><title>Gemma 4: The new standard for local agentic intelligence on Android</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEhE-q8Yo8SP0doXLtRqm9BALlaxysFVomXi631ECztnYsFh704qRTcX6RT-mD6scIhw4Jf5bK2xlMxRjVYDMe8BdbbLozWNZUANzzjzw_furhscduFPDTzeOmNyguBgLxetPwOW190pyzJt4zYRoen4OYdrbci0cgwpoY7Uxv0J0Yj4g2kC4fXZj3Oa7Ik" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEhE-q8Yo8SP0doXLtRqm9BALlaxysFVomXi631ECztnYsFh704qRTcX6RT-mD6scIhw4Jf5bK2xlMxRjVYDMe8BdbbLozWNZUANzzjzw_furhscduFPDTzeOmNyguBgLxetPwOW190pyzJt4zYRoen4OYdrbci0cgwpoY7Uxv0J0Yj4g2kC4fXZj3Oa7Ik" style="display: none;" /&gt;&lt;div&gt;Posted by Matthew McCullough, VP of Product Management Android Development&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3u8rXtrXHIGt9DrTOEsPr7ijhj2KLSeObR7_wI5aVtjQ1F6K5Br05H_yjZtykBrseG_x8Naq6Q1xCut728hIlkctdnRSYz6lJ1oLkR93PEJJjIQagKQkBlp3NOyAGqYjXet-tiEWvmHtTnn1H_32I13hrYyw-zzO0e4jUyaBYh9-4SgqudzCDd4GL7o/s4210/Android-Gemma_Banner%20gradient.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1254" data-original-width="4210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3u8rXtrXHIGt9DrTOEsPr7ijhj2KLSeObR7_wI5aVtjQ1F6K5Br05H_yjZtykBrseG_x8Naq6Q1xCut728hIlkctdnRSYz6lJ1oLkR93PEJJjIQagKQkBlp3NOyAGqYjXet-tiEWvmHtTnn1H_32I13hrYyw-zzO0e4jUyaBYh9-4SgqudzCDd4GL7o/s16000/Android-Gemma_Banner%20gradient.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;p&gt;Today, we are enhancing Android development with &lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/"&gt;&lt;b&gt;Gemma 4&lt;/b&gt;&lt;/a&gt;, our latest state-of-the-art open model designed with complex reasoning and autonomous tool-calling capabilities.&lt;/p&gt;

&lt;p&gt;Our vision is to enable local agentic AI on Android across the entire software lifecycle, from development to production. Android supports a range of Gemma 4 models, from the most efficient ones running directly on-device in your apps to more powerful ones running on your development machine to help you build apps. We are bringing Gemma 4 to Android developers through two pillars:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;&lt;a href="http://android-developers.googleblog.com/2026/04/android-studio-supports-gemma-4-local.html"&gt;Local-first Agentic coding&lt;/a&gt;:&lt;/strong&gt; Experience powerful, local AI code assistance with Gemma 4 in Android Studio in your development computer.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;&lt;a href="http://android-developers.googleblog.com/2026/04/AI-Core-Developer-Preview.html"&gt;On-device intelligence&lt;/a&gt;:&lt;/strong&gt; Build intelligent experiences using the ML Kit GenAI Prompt API to run Gemma 4 directly on Android device hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Coding with Gemma 4 in Android Studio&lt;/h2&gt;

&lt;p&gt;When building Android apps, Android Studio can use Gemma 4 to leverage its state-of-the-art reasoning power and native support for tool use, while keeping the model and inference contained entirely on your local machine.&lt;/p&gt;

&lt;p&gt;Gemma 4 was trained on Android development and designed with &lt;a href="https://developer.android.com/studio/gemini/agent-mode"&gt;Agent Mode&lt;/a&gt; in mind. This means that when you select Gemma 4 as your local model, you can leverage the full suite of Agent Mode capabilities for a variety of Android development use cases, including refactoring legacy code, building an entire app or new features, and applying fixes iteratively.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://android-developers.googleblog.com/2026/04/android-studio-supports-gemma-4-local.html"&gt;Learn more&lt;/a&gt; about the possibilities Gemma 4 brings to your app development flow and how to get started.&lt;/p&gt;

&lt;h2&gt;Prototyping with Gemma 4 on-device&lt;/h2&gt;

&lt;p&gt;Since the introduction of &lt;a href="https://developer.android.com/ai/gemini-nano"&gt;Gemini Nano&lt;/a&gt; as the foundation model on Android, it has become available on over 140 million devices. Gemma 4 is the base model for the next generation of Gemini Nano (Gemini Nano 4) that is optimized for performance and quality on Android devices. This model is up to 4x faster than the previous version and uses up to 60% less battery.&lt;/p&gt;

&lt;p&gt;To make it as easy as possible to preview and prototype with Gemma 4 E2B and E4B models directly on AICore-supported devices, we’re launching the &lt;a href="https://developers.google.com/ml-kit/genai/aicore-dev-preview"&gt;AICore Developer Preview&lt;/a&gt;. While we continue to expand the&lt;a href="https://developers.google.com/ml-kit/genai/prompt/android"&gt; ML Kit GenAI Prompt API&lt;/a&gt; surface to unlock additional advanced capabilities of the model, you can already start exploring new use cases with Gemma 4 using the Prompt API.&lt;/p&gt;

&lt;p&gt;Prepare your apps for the launch of the Gemini Nano 4 on the new flagship Android devices later this year by prototyping with Gemma 4 today. Read about the upcoming features and deep dive into AICore Developer Preview and its Gemma 4 support &lt;a href="https://android-developers.googleblog.com/2026/03/AI-Core-Developer-Preview"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Local agentic intelligence with Gemma 4&lt;/h2&gt;

&lt;p&gt;Running Gemma 4 locally, you can leverage its advanced reasoning and tool-calling capabilities in your entire workflow, from developing with the AI coding assistant in Android Studio to shipping intelligent features in your app with ML Kit GenAI Prompt API. This local-first approach, available under Gemma’s open Apache license, provides an alternative for developers to innovate in a privacy-centric and cost effective manner.&amp;nbsp; In a future release, we will update&amp;nbsp;&lt;a href="https://developer.android.com/bench"&gt;Android Bench&lt;/a&gt; to include Gemma 4 and other open models, providing the quantified data you need to navigate performance trade-offs and select the best model for your use case.&lt;/p&gt;

&lt;p&gt;We can’t wait to see what you build!&lt;/p&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/04/gemma-4-new-standard-for-local-agentic-intelligence.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEhE-q8Yo8SP0doXLtRqm9BALlaxysFVomXi631ECztnYsFh704qRTcX6RT-mD6scIhw4Jf5bK2xlMxRjVYDMe8BdbbLozWNZUANzzjzw_furhscduFPDTzeOmNyguBgLxetPwOW190pyzJt4zYRoen4OYdrbci0cgwpoY7Uxv0J0Yj4g2kC4fXZj3Oa7Ik=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-6210727488665288313</guid><pubDate>Thu, 02 Apr 2026 14:00:00 +0000</pubDate><atom:updated>2026-04-02T07:25:37.710-07:00</atom:updated><title>Increase Guidance and Control over Agent Mode with Android Studio Panda 3 </title><description>&lt;style&gt;
  /* Responsive CSS for Mobile */
  .post-body-wrapper {
    line-height: 1.6;
    font-family: inherit;
  }
  .post-body-wrapper img {
    max-width: 100%;
    height: auto;
    display: block;
  }
  /* On mobile, stack images. On desktop (wider than 600px), use floats. */
  @media screen and (min-width: 601px) {
    .float-right { float: right; margin: 0 0 1em 1em; }
    .float-left { float: left; margin: 0 1em 1em 0; }
  }
  .code-span {
    color: #188038;
    font-family: "Roboto Mono", monospace;
    font-size: 11pt;
  }
  .separator {
    clear: both;
    text-align: center;
  }
&lt;/style&gt;

&lt;div class="post-body-wrapper"&gt;
&lt;meta class="float-right" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaR4IUnnEyv1HBqopyMWWkMW_mXu-N1WF_djCYAtYVNMInilyLb-mtjTD1_62Vwe2Ftj45adOxW-gl26YYTEz5l3R48JbSXPJL_vhlSTiCAB_zTj_cduWv3qCWC8lrQW6dtBROJ-Kur2k71NOVec9W9L0foSwrUPCshSY-4e4Z09vgJfT0mGkR0B4xEYM/s2561/Panda_Stable_R3_2@2x%20(1).png"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaR4IUnnEyv1HBqopyMWWkMW_mXu-N1WF_djCYAtYVNMInilyLb-mtjTD1_62Vwe2Ftj45adOxW-gl26YYTEz5l3R48JbSXPJL_vhlSTiCAB_zTj_cduWv3qCWC8lrQW6dtBROJ-Kur2k71NOVec9W9L0foSwrUPCshSY-4e4Z09vgJfT0mGkR0B4xEYM/s2561/Panda_Stable_R3_2@2x%20(1).png" style="display: none;" /&gt;&lt;meta content="Android Studio, androidstudio, Android Studio Panda, featured, Gemini in Android Studio, AI-powered new project flow, version upgrade assistant" name="keywords"&gt;&lt;/meta&gt;
&lt;meta content="Explore the latest features in Android Studio Panda, including Gemini integration, the AI-powered new project flow, and the version upgrade assistant." name="description"&gt;&lt;/meta&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="text-align: justify;"&gt;&lt;i style="text-align: left;"&gt;&lt;i&gt;&lt;span&gt;Posted by&amp;nbsp;&lt;span style="white-space-collapse: preserve;"&gt;Matt Dyor, Senior Product Manager&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/i&gt;&lt;/div&gt;&lt;p&gt;&lt;i&gt;&lt;span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="separator"&gt;&lt;a class="float-left" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHl79_ILodbYk5v8ZhOgK5ZQ8_JmPeikLynDcwgZ18zYU3ZWX7iIMg9dR7lSLliqFhzVOn242_oK-FPi-niatBfL5Z0_LNtcx9w9HlKPouAZz9Alqy1FTdQJpBY_4_6GWa1qPDz8FlIR5kBqYWmeUamdwSc42At2kWnNY2ejfo5jQJFRi4AiDUUXEZarg/s800/Android_PandaYawn%20(1).gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHl79_ILodbYk5v8ZhOgK5ZQ8_JmPeikLynDcwgZ18zYU3ZWX7iIMg9dR7lSLliqFhzVOn242_oK-FPi-niatBfL5Z0_LNtcx9w9HlKPouAZz9Alqy1FTdQJpBY_4_6GWa1qPDz8FlIR5kBqYWmeUamdwSc42At2kWnNY2ejfo5jQJFRi4AiDUUXEZarg/s16000/Android_PandaYawn%20(1).gif" /&gt;&lt;/a&gt;&lt;i&gt;&lt;span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;span&gt;&lt;br /&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Android Studio Panda 3 is now stable and ready for you to use in production. This release gives you even more control and customization over your AI-powered workflows, making it easier than ever to build high-quality Android apps.&lt;/p&gt;

&lt;p&gt;Whether you're bringing new capabilities to an existing app or standing up a brand new app, these updates elevate your development experience by allowing your AI Agent in Android Studio to learn your specific practices and giving you granular control over its permissions.&lt;/p&gt;

&lt;p&gt;Lastly, in addition to AI skills and Agent Mode enchantments, Android Studio Panda 3 also includes updated support for build Android apps for cars.&lt;/p&gt;

&lt;p&gt;Here’s a deep dive into what’s new:&lt;/p&gt;

&lt;h2 style="text-align: left;"&gt;&lt;span style="font-size: x-large;"&gt;Agent skills&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;Create a more helpful AI agent by using agent skills in Android Studio. Agent skills are specialized instructions that teach the agent new capabilities and best practices for a specific workflow, which the agent can then leverage as needed. This significantly reduces the level of detail required for your day-to-day prompts. Agent skills work with Gemini in Android Studio or with other &lt;a href="https://developer.android.com/studio/gemini/use-a-remote-model"&gt;remote 3rd party LLMs&lt;/a&gt; you integrate into the agent framework in Android Studio.&lt;/p&gt;

&lt;p&gt;You and members of your team can create skills that tell the agent exactly how you want to handle specific tasks in your codebase. For example, you could create a custom “code review” skill tailored to your organization's coding standards, or custom skill to provide the agent with more information on using an in-house library.&lt;/p&gt;

&lt;p&gt;Once you have created a skill, the agent will be able to use it automatically, or you can manually trigger it by typing @ followed by the skill name. Check out the &lt;a href="http://d.android.com/studio/gemini/skills"&gt;documentation&lt;/a&gt; to learn more about how to create skills for your codebase, or better yet—ask your agent to help you build a new skill and it will guide you through the details!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEiZ1-HbZb5Am0jOVc5M5yT5i1QmGU4yNvKNitw20GtNEWZ9t7aysnA1kFGDaKxpq4fyufyVfhCnDZmCcH4ZZtah68O6_7Rown5qiYujyqUj_cdI3s9y8kYSuGlZtI62OMdov2vaLfJyuMmUB96g9-YQsj1yvpVyEoBO8BIMqptU4mS9_R8LgB_DYxaSLfY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="452" data-original-width="1601" src="https://blogger.googleusercontent.com/img/a/AVvXsEiZ1-HbZb5Am0jOVc5M5yT5i1QmGU4yNvKNitw20GtNEWZ9t7aysnA1kFGDaKxpq4fyufyVfhCnDZmCcH4ZZtah68O6_7Rown5qiYujyqUj_cdI3s9y8kYSuGlZtI62OMdov2vaLfJyuMmUB96g9-YQsj1yvpVyEoBO8BIMqptU4mS9_R8LgB_DYxaSLfY=s16000" /&gt;&lt;/a&gt;&lt;i style="text-align: justify;"&gt;Manually Trigger Agent Skill in Android Studio&lt;/i&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;h4 style="text-align: left;"&gt;Getting Started&lt;/h4&gt;
&lt;p&gt;To build a skill for your project, do the following:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Create a&amp;nbsp;&lt;span id="docs-internal-guid-89cc8e47-7fff-682a-162b-7be91470fb42"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.skills&lt;/span&gt;&lt;/span&gt;&amp;nbsp;directory inside your project's root folder.&lt;/li&gt;
  &lt;li&gt;Place a&amp;nbsp;&lt;span id="docs-internal-guid-b40b805f-7fff-87f2-171e-2c3a5dfeadb4"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;SKILL.md&lt;/span&gt;&lt;/span&gt;&amp;nbsp;file inside this new directory.&lt;/li&gt;
  &lt;li&gt;Add a name and description to the file to define your custom workflow, and your skill is ready.&lt;/li&gt;
  &lt;li&gt;Optionally include&amp;nbsp;&lt;span id="docs-internal-guid-fa2a0cb8-7fff-a5ec-7ae9-1b8c6b330036"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;scripts&lt;/span&gt;&lt;span face="&amp;quot;Google Sans Text&amp;quot;, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;,&lt;/span&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; assets&lt;/span&gt;&lt;span face="&amp;quot;Google Sans Text&amp;quot;, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;,&lt;/span&gt;&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span id="docs-internal-guid-826a2a6e-7fff-c2e3-3cc1-97d278d4576b"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;references&lt;/span&gt;&lt;/span&gt;&amp;nbsp;to provide even more guidance to your agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjP2Dp9s0bQP-SgJt1YXYGNxVZVgaJRtuQCJrEEgg_eteGNbrIIBmHDyMR9JExy1nDwi0uNn1jfsPAbK7m5E8NpxcrEXLI-Jxk-Z5lqzWctsMMl-5nRhVNgZOeFK2z72A-pQyQ9Y3SRkV1BVHUf90JaAyz2DH9DknEzh4rsmokHtp_tb2pYzT9L7edth60" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="560" data-original-width="1601" src="https://blogger.googleusercontent.com/img/a/AVvXsEjP2Dp9s0bQP-SgJt1YXYGNxVZVgaJRtuQCJrEEgg_eteGNbrIIBmHDyMR9JExy1nDwi0uNn1jfsPAbK7m5E8NpxcrEXLI-Jxk-Z5lqzWctsMMl-5nRhVNgZOeFK2z72A-pQyQ9Y3SRkV1BVHUf90JaAyz2DH9DknEzh4rsmokHtp_tb2pYzT9L7edth60=s16000" /&gt;&lt;/a&gt;&lt;i&gt;Agent skills in Android Studio&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;&lt;span style="font-size: x-large;"&gt;Manage permissions for Agent Mode&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;You control your codebase, and you can now be more deliberate with which data and capabilities you choose to share with AI agents. The new granular agent permissions in Android Studio let you decide exactly what agents can do for you.&lt;/p&gt;

&lt;p&gt;When Agent Mode needs to read files, run shell commands, or access the web, it explicitly asks for your permission. We know that 'approval fatigue' is a real risk in AI workflows—when a tool asks for permission too often, it’s easy to start clicking 'Allow' without fully reviewing the action. By offering granular 'Always Allow' rules for trusted operations and an optional sandbox for experimental ones, Android Studio helps you stay focused on the high-stakes decisions that actually require your manual sign-off.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBXA1ROph6bWaVTWRfBiePU7vVnBe7axPIybHhhWspgVY9oVt1X-yK8h__iaqCwfTv6ydeVa40-7Ot79Xxtb7g0VTbqahDR17QrvBQAOfZNfsfkRapfYsYF-tqR_8nAaegNsssSNWkURJOCjOZvxBUoXvewSFagxWJsLyfadmpT48U-_OQdlV1gdQOEKM" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1189" data-original-width="1625" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBXA1ROph6bWaVTWRfBiePU7vVnBe7axPIybHhhWspgVY9oVt1X-yK8h__iaqCwfTv6ydeVa40-7Ot79Xxtb7g0VTbqahDR17QrvBQAOfZNfsfkRapfYsYF-tqR_8nAaegNsssSNWkURJOCjOZvxBUoXvewSFagxWJsLyfadmpT48U-_OQdlV1gdQOEKM=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="text-align: center;"&gt;&lt;span style="text-align: left;"&gt;&lt;i&gt;Agent Permissions&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Agent permissions are intuitive to set up and use. For example, granting high-level permissions automatically authorizes related sub-tools, while commands you have previously approved will run automatically without interrupting your flow. Rest assured, accessing sensitive files like SSH keys will always require your explicit sign-off.&lt;/p&gt;

&lt;p&gt;For even more security, you can also use an optional sandbox to enforce strict, isolated control over the agent.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEh9_2ktSodJxQaEGKKKdOvF0OAoWoTcCo0E_kwIDM4iRBXAQGh3C7dk0K7YLckOvxHSi-46-8WseWG5Deg55kGglygBVnzgzEyexh1cvPwB5imp9JhnwW69L7jVilyRLFKaRKqYNO6ojr2boMJQfPbmnyl-RmU2QDlnXoepSxX-Cs-4wx6_TZUyb5Z6ZiA" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1189" data-original-width="1601" src="https://blogger.googleusercontent.com/img/a/AVvXsEh9_2ktSodJxQaEGKKKdOvF0OAoWoTcCo0E_kwIDM4iRBXAQGh3C7dk0K7YLckOvxHSi-46-8WseWG5Deg55kGglygBVnzgzEyexh1cvPwB5imp9JhnwW69L7jVilyRLFKaRKqYNO6ojr2boMJQfPbmnyl-RmU2QDlnXoepSxX-Cs-4wx6_TZUyb5Z6ZiA=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="text-align: center;"&gt;&lt;span style="text-align: left;"&gt;&lt;i&gt;Agent Shell Sandbox&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;

&lt;h2 style="text-align: left;"&gt;&lt;span style="font-size: x-large;"&gt;Empty Car App Library App template&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;We’re making it easier to build Android apps for cars. Building apps for the car used to mean wrestling with complex configurations just to get the project to build successfully.&lt;/p&gt;

&lt;p&gt;Now, you can accelerate your development with the new “Empty Car App Library App” template in Android Studio. This template takes care of the required boilerplate code for a driving-optimized app on both Android Auto and Android Automotive OS, saving you significant time and effort. Instead of getting bogged down in setup, you can focus on creating the best experience for your users on the road.&lt;/p&gt;

&lt;h4 style="text-align: left;"&gt;Getting Started&lt;/h4&gt;
&lt;p&gt;To use the new template:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Select &lt;b&gt;New Project &lt;/b&gt;on the Welcome to Android Studio screen (or &lt;b&gt;File &amp;gt; New &amp;gt; New Project&lt;/b&gt; from within a project).&lt;/li&gt;
  &lt;li&gt;Search for or select the &lt;b&gt;Empty Car App Library App&lt;/b&gt; template.&lt;/li&gt;
  &lt;li&gt;Name your app and click &lt;b&gt;Finish&lt;/b&gt; to generate your driving-optimized app.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="separator"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhS7Ob3lx2oj50rF4lz1FiPBXwPZkriStGjzunUW0SnT-kUGzYzE6-ZGqg_Y2Tt_e-PI_D314vM_rkP8h1QXqicTclbpO0A06ZKVKkHW-lEE0LCbOS_L6ah20t2iMkMaVP3h7N3kfupnVFmQPvNqgWqNM8Wz-HPLnZubGItWrhgSvWmxiofPih3n3A9HVk" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1189" data-original-width="1601" src="https://blogger.googleusercontent.com/img/a/AVvXsEhS7Ob3lx2oj50rF4lz1FiPBXwPZkriStGjzunUW0SnT-kUGzYzE6-ZGqg_Y2Tt_e-PI_D314vM_rkP8h1QXqicTclbpO0A06ZKVKkHW-lEE0LCbOS_L6ah20t2iMkMaVP3h7N3kfupnVFmQPvNqgWqNM8Wz-HPLnZubGItWrhgSvWmxiofPih3n3A9HVk=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="text-align: center;"&gt;&lt;span style="text-align: left;"&gt;&lt;i&gt;Empty Car App Library App template&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;

&lt;h2&gt;Android Studio Panda releases&amp;nbsp;&lt;/h2&gt;

&lt;p&gt;Panda 3 builds off last month’s AI-focused Panda 2 release. Check out &lt;a href="https://android-developers.googleblog.com/2026/05/go-from-prompt-to-working-prototype.html"&gt;Go from prompt to working prototype with Android Studio Panda 2&lt;/a&gt; post to learn more about new Android Studio features, including the AI-powered New Project Flow that takes you from prompt to prototype and the Version Upgrade Assistant that takes the toil out of updating your dependencies.&lt;/p&gt;

&lt;h2&gt;Get started&lt;/h2&gt;

&lt;p&gt;Dive in and accelerate your development. &lt;a href="https://developer.android.com/studio"&gt;Download&lt;/a&gt; Android Studio Panda 3 and start exploring these powerful new agentic features today.&lt;/p&gt;

&lt;p&gt;As always, your feedback is crucial to us. &lt;a href="https://developer.android.com/studio/known-issues"&gt;Check known issues&lt;/a&gt;, &lt;a href="https://developer.android.com/studio/report-bugs"&gt;report bugs&lt;/a&gt;, and be part of our vibrant community on &lt;a href="https://www.linkedin.com/showcase/androiddev/posts/?feedView=all"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://medium.com/androiddevelopers"&gt;Medium&lt;/a&gt;, &lt;a href="https://www.youtube.com/c/AndroidDevelopers/videos"&gt;YouTube&lt;/a&gt;, or &lt;a href="https://twitter.com/androidstudio"&gt;X&lt;/a&gt;. Happy coding!&lt;/p&gt;
&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/04/Increase-Guidance-and-Control-over-Agent-Mode-with-Android-Studio-Panda-3.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaR4IUnnEyv1HBqopyMWWkMW_mXu-N1WF_djCYAtYVNMInilyLb-mtjTD1_62Vwe2Ftj45adOxW-gl26YYTEz5l3R48JbSXPJL_vhlSTiCAB_zTj_cduWv3qCWC8lrQW6dtBROJ-Kur2k71NOVec9W9L0foSwrUPCshSY-4e4Z09vgJfT0mGkR0B4xEYM/s72-c/Panda_Stable_R3_2@2x%20(1).png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-1156033942001027284</guid><pubDate>Wed, 01 Apr 2026 20:00:00 +0000</pubDate><atom:updated>2026-04-01T13:00:00.111-07:00</atom:updated><title>Get your Wear OS apps ready for the 64-bit requirement</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEhIMNMYoS94UKTAa5KUyTCEp_FTCatYD79ENGshGtM2I6v3vT_N0tFSZvCINgpQ5CtX_SMN9c8GUcSqjV-yk3gaIzrQDQEQ2PsFJvveiB4257ddJ50GGTxKo03u-tDZzSXm6zTE8GhvFsXOAecX9-RlyGNFp5JuQviQYH8NjqjhnOW-M2W1W0U-mK5skYo" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEhIMNMYoS94UKTAa5KUyTCEp_FTCatYD79ENGshGtM2I6v3vT_N0tFSZvCINgpQ5CtX_SMN9c8GUcSqjV-yk3gaIzrQDQEQ2PsFJvveiB4257ddJ50GGTxKo03u-tDZzSXm6zTE8GhvFsXOAecX9-RlyGNFp5JuQviQYH8NjqjhnOW-M2W1W0U-mK5skYo" style="display: none;" /&gt;&lt;div style="font-family: Arial, sans-serif; line-height: 1.6;"&gt;

  &lt;div style="color: #333333; text-align: left;"&gt;&lt;span style="font-size: small; font-weight: normal;"&gt;&lt;i&gt;Posted by Michael Stillwell, Developer Relations Engineer and Dimitris Kosmidis, Product Manager, Wear OS&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
  
  &lt;div style="color: #333333; text-align: left;"&gt;
    &lt;span style="font-size: small; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;
  &lt;/div&gt;

  &lt;div style="color: #333333; text-align: left;"&gt;
    &lt;span style="font-size: small; font-weight: normal;"&gt;
      &lt;div class="separator" style="clear: both; text-align: center;"&gt;
        &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI3IIHXqTBTTsiXPTipVC2exuWT_Xb0_YXM1l-_MRKk0WqRznZdnaIojFaHN03huNpk1Rg-pso8yC-WrvVRDL0t9BHhKHTuPPYEQQQ-kZJCCToif8CTaBhuFBO4X21JjAMpBs35oi6jAQ-2zbmrA65ApAl7sD9RYcN5CxpM2P9t94-tV3EQtpFNXqO05s/s4209/Android%20Wear%20OS%2064%20bits_Blog%20V01.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
          &lt;img border="0" data-original-height="1253" data-original-width="4209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI3IIHXqTBTTsiXPTipVC2exuWT_Xb0_YXM1l-_MRKk0WqRznZdnaIojFaHN03huNpk1Rg-pso8yC-WrvVRDL0t9BHhKHTuPPYEQQQ-kZJCCToif8CTaBhuFBO4X21JjAMpBs35oi6jAQ-2zbmrA65ApAl7sD9RYcN5CxpM2P9t94-tV3EQtpFNXqO05s/s16000/Android%20Wear%20OS%2064%20bits_Blog%20V01.png" /&gt;
        &lt;/a&gt;
      &lt;/div&gt;&lt;br /&gt;
    &lt;/span&gt;
  &lt;/div&gt;

  &lt;p&gt;64-bit architectures provide performance improvements and a foundation for future innovation, delivering faster and richer experiences for your users. We’ve supported 64-bit CPUs since Android 5. This aligns Wear OS with recent updates for&lt;span style="color: #333333;"&gt; &lt;a href="https://android-developers.googleblog.com/2025/08/64-bit-app-compatibility-for-google-tv-android-tv.html" target="_blank"&gt;Google TV and other form factors&lt;/a&gt;, &lt;/span&gt;building on the 64-bit requirement first introduced for&lt;span style="color: #333333;"&gt; &lt;a href="https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html" target="_blank"&gt;mobile&lt;/a&gt; &lt;/span&gt;in 2019.&lt;/p&gt;

  &lt;p&gt;Today, we are extending this 64-bit requirement to Wear OS. This blog provides guidance to help you prepare your apps to meet these new requirements.&lt;/p&gt;

  &lt;h3 style="margin-bottom: 0px; padding-bottom: 0px; text-align: left;"&gt;The 64-bit requirement: timeline for Wear OS developers&lt;/h3&gt;
  &lt;p style="margin-top: 5px;"&gt;Starting September 15, 2026:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;All new apps and app updates that include native code will be required to provide 64-bit versions in addition to 32-bit versions when publishing to Google Play.&lt;/li&gt;
    &lt;li&gt;Google Play will start blocking the upload of non-compliant apps to the Play Console.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;We are not making changes to our policy on 32-bit support, and Google Play will continue to deliver apps to existing 32-bit devices.&lt;/p&gt;

  &lt;p&gt;The vast majority of Wear OS developers has already made this shift, with 64-bit compliant apps already available. For the remaining apps, we expect the effort to be small.&lt;/p&gt;

  &lt;h3 style="margin-bottom: 0px; padding-bottom: 0px; text-align: left;"&gt;Preparing for the 64-bit requirement&lt;/h3&gt;
  &lt;p style="margin-top: 5px;"&gt;Many apps are written entirely in non-native code (i.e. Kotlin or Java) and do not need any code changes. However, it is important to note that even if you do not write native code yourself, a dependency or SDK could be introducing it into your app, so you still need to check whether your app includes native code.&lt;/p&gt;

  &lt;h2 style="color: #333333; margin-bottom: 0px; padding-bottom: 0px;"&gt;Assess your app&lt;/h2&gt;
  &lt;ul style="margin-top: 5px;"&gt;
    &lt;li&gt;&lt;strong style="color: #333333;"&gt;Inspect your APK or app bundle&lt;/strong&gt; for native code using the &lt;a href="https://developer.android.com/studio/debug/apk-analyzer" target="_blank"&gt;&lt;span style="color: #2b00fe;"&gt;APK Analyzer&lt;/span&gt;&lt;/a&gt; in Android Studio.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Look for .so files&lt;/strong&gt; within the&amp;nbsp;&lt;span id="docs-internal-guid-f3264811-7fff-f95a-8713-34715f2e7c3b"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;lib&lt;/span&gt;&lt;/span&gt;&amp;nbsp;folder. For ARM devices, 32-bit libraries are located in&amp;nbsp;&lt;span id="docs-internal-guid-8e8e7e92-7fff-27de-423d-e66c1d56163b"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;lib/armeabi-v7a&lt;/span&gt;&lt;/span&gt;, while the 64-bit equivalent is&amp;nbsp;&lt;span id="docs-internal-guid-c1ca2ea5-7fff-4be6-51dc-572639c11555"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;lib/arm64-v8a&lt;/span&gt;&lt;/span&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Ensure parity:&lt;/strong&gt; The goal is to ensure that your app runs correctly in a 64-bit-only environment. While specific configurations may vary, for most apps this means that for each native 32-bit architecture you support, you should include the corresponding 64-bit architecture by providing the relevant&amp;nbsp;&lt;span id="docs-internal-guid-826d8b77-7fff-6ced-8310-1dfab20d6a81"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.so&lt;/span&gt;&lt;/span&gt;&amp;nbsp;files for both &lt;a href="https://developer.android.com/ndk/guides/abis"&gt;ABIs&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Upgrade SDKs:&lt;/strong&gt; If you only have 32-bit versions of a third-party library or SDK, reach out to the provider for a 64-bit compliant version.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style="margin-bottom: 0px; padding-bottom: 0px; text-align: left;"&gt;How to test 64-bit compatibility&lt;/h3&gt;
  &lt;p style="margin-top: 5px;"&gt;The 64-bit version of your app should offer the same quality and feature set as the 32-bit version. The &lt;a href="https://developer.android.com/training/wearables/get-started/emulator"&gt;Wear OS Android Emulator&lt;/a&gt; can be used to verify that your app behaves and performs as expected in a 64-bit environment.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Since Wear OS apps are &lt;a href="https://support.google.com/googleplay/android-developer/answer/11926878"&gt;required to target Wear OS 4&lt;/a&gt; or higher to be submitted to Google Play, you are likely already testing on these newer, 64-bit only images.&lt;/p&gt;

  &lt;p&gt;When testing, pay attention to &lt;a href="https://support.google.com/googleplay/android-developer/answer/11926878"&gt;native code loaders&lt;/a&gt; such as &lt;a href="https://github.com/facebook/SoLoader"&gt;SoLoader&lt;/a&gt; or older versions of &lt;a href="https://developer.android.com/google/play/requirements/64-bit#openssl"&gt;OpenSSL&lt;/a&gt;, which may require updates to function correctly on 64-bit only hardware.&lt;/p&gt;

  &lt;h3 style="margin-bottom: 0px; padding-bottom: 0px; text-align: left;"&gt;Next steps&lt;/h3&gt;
  &lt;p style="margin-top: 5px;"&gt;We are announcing this requirement now to give developers a six-month window to bring their apps into compliance before enforcement begins in September 2026. For more detailed guidance on the transition, please refer to our in-depth &lt;a href="https://developer.android.com/google/play/requirements/64-bit" target="_blank"&gt;documentation on supporting 64-bit architectures&lt;/a&gt;.&lt;/p&gt;

  &lt;p&gt;This transition marks an exciting step for the future of Wear OS and the benefits that 64-bit compatibility will bring to the ecosystem.&lt;/p&gt;

&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/04/get-your-wear-os-apps-ready-for-64-bit-requirement.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEhIMNMYoS94UKTAa5KUyTCEp_FTCatYD79ENGshGtM2I6v3vT_N0tFSZvCINgpQ5CtX_SMN9c8GUcSqjV-yk3gaIzrQDQEQ2PsFJvveiB4257ddJ50GGTxKo03u-tDZzSXm6zTE8GhvFsXOAecX9-RlyGNFp5JuQviQYH8NjqjhnOW-M2W1W0U-mK5skYo=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-8617120129574593745</guid><pubDate>Mon, 30 Mar 2026 23:00:00 +0000</pubDate><atom:updated>2026-03-30T18:53:22.733-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Audio</category><category domain="http://www.blogger.com/atom/ns#">ExoPlayer</category><category domain="http://www.blogger.com/atom/ns#">Jetpack</category><category domain="http://www.blogger.com/atom/ns#">Media</category><category domain="http://www.blogger.com/atom/ns#">media3</category><category domain="http://www.blogger.com/atom/ns#">playback</category><category domain="http://www.blogger.com/atom/ns#">Video</category><title>Media3 1.10 is out</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4fMXjtiBKSRUrNpd4Sm7twGTT3jLD6CeXLz8SWfQjoXJoPh52Ud3xI9mTp8qRkMN41T2JpraKUq1hW9yUcOhsnmjSLjO5a9hQcNfvILig6CfjP1ctBL1Jhv_9xNxTf9GQPrGPQY6luYyRolmUPgWPrKZzopVn-YFrabWy_Mic-vNTtXGispzP0oa_pKc/s2469/Android%20media%203.1.10%20-%20Meta.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4fMXjtiBKSRUrNpd4Sm7twGTT3jLD6CeXLz8SWfQjoXJoPh52Ud3xI9mTp8qRkMN41T2JpraKUq1hW9yUcOhsnmjSLjO5a9hQcNfvILig6CfjP1ctBL1Jhv_9xNxTf9GQPrGPQY6luYyRolmUPgWPrKZzopVn-YFrabWy_Mic-vNTtXGispzP0oa_pKc/s2469/Android%20media%203.1.10%20-%20Meta.png" style="display: none;" /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Posted by Andrew Lewis,&lt;/em&gt;&lt;i&gt; Software Engineer&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6UwhYNOKKDFJZYa-3joh0al7f2I3T5jtlgeJIdG6klVTZKcHXxaXIPV-mdG7QZ4AvhB8y36SFto6qBhiE9OlqqqxJ9oLztee_Grcgey5O4wG-MmY349oYYvv_XNDV_mQytUD5hN000rEXPYKF9NIFmI_BDDV6AdbMCSLnwqzFAftbl8RVV6HdZc3Luto/s8419/Android%20media%203.1.10%20-%20Blog%20.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="2507" data-original-width="8419" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6UwhYNOKKDFJZYa-3joh0al7f2I3T5jtlgeJIdG6klVTZKcHXxaXIPV-mdG7QZ4AvhB8y36SFto6qBhiE9OlqqqxJ9oLztee_Grcgey5O4wG-MmY349oYYvv_XNDV_mQytUD5hN000rEXPYKF9NIFmI_BDDV6AdbMCSLnwqzFAftbl8RVV6HdZc3Luto/s16000/Android%20media%203.1.10%20-%20Blog%20.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 18pt;"&gt;&lt;br /&gt;Media3 1.10 is out!&lt;/h2&gt;&lt;div style="line-height: 1.38; margin-bottom: 4pt; margin-top: 18pt; text-align: left;"&gt;&lt;span style="font-family: inherit; font-weight: normal;"&gt;Media3 1.10 includes new features, bug fixes and feature improvements, including Material3-based playback widgets, expanded format support in ExoPlayer and improved speed adjustment when exporting media with Transformer. Read on to find out more, and check out the &lt;a href="https://github.com/androidx/media/releases/tag/1.10.0"&gt;full release notes&lt;/a&gt; for a comprehensive list of changes.&lt;/span&gt;&lt;/div&gt;&lt;/name&gt;&lt;h4 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-size: large;"&gt;Playback UI and Compose&lt;/span&gt;&lt;/name&gt;&lt;/h4&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;We are continuing to expand the&amp;nbsp;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;media3-ui-compose-material3&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;  &lt;/span&gt;module to help you build Compose UIs for playback.&lt;br /&gt;&lt;br /&gt;We've added a new&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #666666; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/package-summary#Player(androidx.media3.common.Player,androidx.compose.ui.Modifier,kotlin.Int,androidx.compose.ui.layout.ContentScale,kotlin.Boolean,kotlin.Function0,kotlin.Boolean,kotlin.Function3,kotlin.Function3,kotlin.Function3)"&gt;Player Composable&lt;/a&gt; that combines a&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #666666; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ContentFrame&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #666666; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;with customizable playback controls, giving you an out-of-the-box player widget with a modern UI.&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;This release also adds a&amp;nbsp;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;ProgressSlider&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;Composable for displaying player progress and performing seeks using dragging and tapping gestures. For playback speed management, a new &lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;PlaybackSpeedControl&lt;/span&gt; is available in the base&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;media3-ui-compose&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;module, alongside a styled &lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;PlaybackSpeedToggleButton&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;in the Material 3 module.&lt;/p&gt;&lt;p&gt;&lt;span id="docs-internal-guid-59908781-7fff-3264-bc56-ca390dcc5753"&gt;&lt;/span&gt;&lt;/p&gt;We'll continue working on new additions like track selection utils, subtitle support and more customization options in the upcoming Media3 releases. We're eager to hear your feedback so please share your thoughts on the project &lt;a href="https://github.com/androidx/media/issues"&gt;issue tracker&lt;/a&gt;.&lt;/name&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;br /&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirKZdXRtQDtxS5x89cC-vZ6ocOhAPJjRE_OXAEZdZCXQkoQj5qpqHJ8CePfprLTCiaGCRdoTTmxSeslZZp7a7HKXJEvy3_ZbKUPY1AdMYoQKIzYhRYM3p3283dx0P-67FKpZco-tFBvD5_e1gPZTN0lC3bn3sNOC6gco-isejHis7WPQKxMB2ZXwB6cLc/s1999/media3%201.10%202.jpeg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="846" data-original-width="1999" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirKZdXRtQDtxS5x89cC-vZ6ocOhAPJjRE_OXAEZdZCXQkoQj5qpqHJ8CePfprLTCiaGCRdoTTmxSeslZZp7a7HKXJEvy3_ZbKUPY1AdMYoQKIzYhRYM3p3283dx0P-67FKpZco-tFBvD5_e1gPZTN0lC3bn3sNOC6gco-isejHis7WPQKxMB2ZXwB6cLc/s16000/media3%201.10%202.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-670d6bfc-7fff-789e-fa1c-dee24129a9c3"&gt;&lt;div style="text-align: center;"&gt;&lt;span id="docs-internal-guid-670d6bfc-7fff-789e-fa1c-dee24129a9c3"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #666666; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Player&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #666666; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;Composable in the Media3 Compose demo app&lt;/i&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;h4 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-size: large;"&gt;Playback feature enhancements&lt;/span&gt;&lt;/name&gt;&lt;/h4&gt;&lt;name content="IMG" twitter:image=""&gt;Media3 1.10 includes a variety of additions and improvements across the playback modules:&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;Format support: ExoPlayer now supports extracting Dolby Vision Profile 10 and Versatile Video Coding (VVC) tracks in MP4 containers, and we've introduced MPEG-H UI manager support in the&amp;nbsp;&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;decoder_mpegh&lt;/span&gt;extension. The IAMF extension now seamlessly supports binaural output, either through the decoder via&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;iamf_tools&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;or through the Android OS Spatializer, with new logic to match the output layout of the speakers.&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;Ad playback: Improvements to reliability, improved HLS interstitial support for&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;X-PLAYOUT-LIMIT&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp; &lt;/span&gt;and &lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;X-SNAP&lt;/span&gt;, and with the latest IMA SDK dependency you can control whether ad click-through URLs open in custom tabs with&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;setEnableCustomTabs&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;HLS: ExoPlayer now allows location fallback upon encountering load errors if redundant streams from different locations are available. &lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;Session:&amp;nbsp;&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;MediaSessionService&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;now extends &lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;LifecycleService&lt;/span&gt;, allowing apps to access the lifecycle scoping of the service.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;One of our key focus areas this year is on playback efficiency and performance. Media3 1.10 includes experimental support for scheduling the core playback loop in a more efficient way. You can try this out by enabling &lt;span style="color: #188038; font-family: Roboto Mono, monospace;"&gt;&lt;span style="font-size: 11pt; white-space-collapse: preserve;"&gt;experimentalSetDynamicSchedulingEnabled()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;via the &lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;ExoPlayer.Builder&lt;/span&gt;. We plan to make further improvements in future releases so stay tuned!&lt;/p&gt;&lt;/name&gt;&lt;h4 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-size: large;"&gt;Media editing and Transformer&lt;/span&gt;&lt;/name&gt;&lt;/h4&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;For developers building media editing experiences, we've made speed adjustments more robust. &lt;span style="color: #188038; font-family: Roboto Mono, monospace;"&gt;&lt;span style="font-size: 11pt; white-space-collapse: preserve;"&gt;EditedMediaItem.Builder.setFrameRate()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;can now set a maximum output frame rate for video. This is particularly helpful for controlling output size and maintaining performance when increasing media speed with&amp;nbsp;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;setSpeed()&lt;/span&gt;.&lt;/p&gt;&lt;/name&gt;&lt;h4 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-size: large;"&gt;New modules for frame extraction and applying Lottie effects&lt;/span&gt;&lt;/name&gt;&lt;/h4&gt;&lt;name content="IMG" twitter:image=""&gt;In this release we've split some functionality into new modules to reduce the scope of some dependencies:&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;span id="docs-internal-guid-c366300e-7fff-8803-a870-6d651766ff93"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;FrameExtractor&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;has been removed from the main &lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;media3-inspector&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;module, so please migrate your code to use the new &lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;media3-inspector-frame&lt;/span&gt;module and update your imports to&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;androidx.media3.inspector.frame.FrameExtractor&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;We have also moved the&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;LottieOverlay&lt;/span&gt;effect to a separate&amp;nbsp;&lt;span style="background-color: transparent; color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;media3-effect-lottie&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: #666666; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;module. As a reminder, this gives you a straightforward way to apply vector-based Lottie animations directly to video frames.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;Please get in touch via the &lt;a href="https://github.com/androidx/media/issues"&gt;issue tracker&lt;/a&gt; if you run into any bugs, or if you have questions or feature requests. We look forward to hearing from you!&lt;p&gt;&lt;/p&gt;&lt;/name&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/media3-110-is-out.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4fMXjtiBKSRUrNpd4Sm7twGTT3jLD6CeXLz8SWfQjoXJoPh52Ud3xI9mTp8qRkMN41T2JpraKUq1hW9yUcOhsnmjSLjO5a9hQcNfvILig6CfjP1ctBL1Jhv_9xNxTf9GQPrGPQY6luYyRolmUPgWPrKZzopVn-YFrabWy_Mic-vNTtXGispzP0oa_pKc/s72-c/Android%20media%203.1.10%20-%20Meta.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-7242509966442583470</guid><pubDate>Mon, 30 Mar 2026 22:00:00 +0000</pubDate><atom:updated>2026-03-30T15:00:00.111-07:00</atom:updated><title>Monzo boosts performance metrics by up to 35% with a simple R8 update</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjeoc8k0szO6APp8xoaNewSfj_gULMjxTJ-LWLAfodA_Wt4PF3Ax-cFZgETO4xehYDnFKeJodrMSlVJK0IesWqa2LvRQpDyCHvH-T2bZAbxNJyg-8WP55dJUP61gMBjBH44RHrSCA7L0C_e8m6YLboFZseS7HKTuvmQnS3SYVgGSOVFLeqQd640N4wmS8/s1234/AANDDM_Monzo_Meta.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjeoc8k0szO6APp8xoaNewSfj_gULMjxTJ-LWLAfodA_Wt4PF3Ax-cFZgETO4xehYDnFKeJodrMSlVJK0IesWqa2LvRQpDyCHvH-T2bZAbxNJyg-8WP55dJUP61gMBjBH44RHrSCA7L0C_e8m6YLboFZseS7HKTuvmQnS3SYVgGSOVFLeqQd640N4wmS8/s1234/AANDDM_Monzo_Meta.png" style="display: none;" /&gt;&lt;style&gt;
  .post-container {
    font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
    line-height: 1.6;
    color: #333;
    max-width: 800px;
    margin: auto;
  }
  .highlight-box {
    background-color: #f2f2f2;
    border-left: 5px solid #666;
    padding: 20px;
    margin: 25px 0;
  }
  .stats-table {
    width: 100%;
    border-collapse: collapse;
    margin: 20px 0;
  }
  .stats-table th, .stats-table td {
    border: 1px solid #ccc;
    padding: 12px;
    text-align: left;
  }
  .stats-table th {
    background-color: #e0e0e0;
    color: #222;
  }
  .code-block {
    background-color: #f7f7f7;
    color: #333;
    padding: 18px;
    border-radius: 4px;
    overflow-x: auto;
    font-family: 'Consolas', 'Monaco', monospace;
    font-size: 14px;
    margin: 20px 0;
    border: 1px solid #ddd;
  }
  .quote {
    font-style: italic;
    font-size: 1.1em;
    color: #444;
    padding: 10px 25px;
    border-left: 4px solid #bbb;
    margin: 30px 0;
  }
  h2 {
    color: #222;
    /* Section line removed here */
    padding-bottom: 8px;
    margin-top: 30px;
  }
  a {
    color: #444;
    text-decoration: underline;
  }
  .bullet-point {
    color: #777;
    margin-right: 8px;
  }
  .separator img {
    max-width: 100%;
    height: auto;
  }
&lt;/style&gt;

&lt;div class="post-container"&gt;
  &lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;i&gt;Posted by Ben Weiss, Senior Developer Relations Engineer&lt;/i&gt;&lt;/div&gt;
  
  &lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8op3RAwToqGSUvLZB1ggptAJH7IWT1uOKfMG9xugHtdTM0L21Ft689v9q5EcI-BljErJxZOkRhDzfwFgF_1DjAVHU9lAPfXE8nOdfxQS9lMoNlZmlZV3HOTUA1CLiMM3DBsa8-OFnwbRtuS9G6sFaI9bz3bpl73Wl1wiyMMm7YeN-RD3f3AxoMQSm5pY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
      &lt;img alt="Monzo App Performance" src="https://blogger.googleusercontent.com/img/a/AVvXsEi8op3RAwToqGSUvLZB1ggptAJH7IWT1uOKfMG9xugHtdTM0L21Ft689v9q5EcI-BljErJxZOkRhDzfwFgF_1DjAVHU9lAPfXE8nOdfxQS9lMoNlZmlZV3HOTUA1CLiMM3DBsa8-OFnwbRtuS9G6sFaI9bz3bpl73Wl1wiyMMm7YeN-RD3f3AxoMQSm5pY=s16000" /&gt;
    &lt;/a&gt;
  &lt;/div&gt;

  &lt;p&gt;
    Monzo is a UK digital bank with 15 million customers and growing. As the app scaled, the engineering team identified app startup time as a critical area for improvement but worried it would require significant changes to their codebase.
  &lt;/p&gt;

  &lt;p&gt;
    By fully enabling R8 optimizations, Monzo achieved a massive 35% reduction in their Application Not Responding (ANR) rate. This simple change proved that impactful optimizations don't always require complex engineering efforts.
  &lt;/p&gt;

  &lt;h2&gt;Unlocking broad performance wins with R8 full mode&lt;/h2&gt;
  
  &lt;p&gt;
    Monzo identified R8 full mode as an easy fix worth trying; and it worked, improving performance across the board:
  &lt;/p&gt;

  &lt;ul style="list-style-type: none; padding-left: 0px;"&gt;
    &lt;li&gt;&lt;span class="bullet-point"&gt;●&lt;/span&gt; &lt;strong&gt;Startup Reliability:&lt;/strong&gt; Cold starts improved by 30%, Warm starts by 24%, and Hot starts by 14%.&lt;/li&gt;
    &lt;li&gt;&lt;span class="bullet-point"&gt;●&lt;/span&gt; &lt;strong&gt;Launch Speed:&lt;/strong&gt; P50 launch times improved by 11% and P90 launch times by 12%.&lt;/li&gt;
    &lt;li&gt;&lt;span class="bullet-point"&gt;●&lt;/span&gt; &lt;strong&gt;Efficiency:&lt;/strong&gt; Overall app size was reduced by 9%.&lt;/li&gt;
    &lt;li&gt;&lt;span class="bullet-point"&gt;●&lt;/span&gt; &lt;strong&gt;Stability:&lt;/strong&gt; ANR reduction of 35%.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLGtCPTiFJfzhXUi4pqYTzL6WvdBdzuGy01fmhTTBeaVRhyN_FpJiflwE0T7BT1SylXsK4Sngdi-yKsu_ZnfGQd0uKo9vjMWZKbRhWjsP03PsoqJSmS_ZJSv19N8cQ_hi4FNXWnLa3zR2uNZGECwA2nbbF3fAL6PH_GLGqNLxn5UiK5fRlHbT3uzbEusQ/s1280/AANDDM_Monzo_Quote-1.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
      &lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLGtCPTiFJfzhXUi4pqYTzL6WvdBdzuGy01fmhTTBeaVRhyN_FpJiflwE0T7BT1SylXsK4Sngdi-yKsu_ZnfGQd0uKo9vjMWZKbRhWjsP03PsoqJSmS_ZJSv19N8cQ_hi4FNXWnLa3zR2uNZGECwA2nbbF3fAL6PH_GLGqNLxn5UiK5fRlHbT3uzbEusQ/s16000/AANDDM_Monzo_Quote-1.png" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMRp_RzT-yKnpcXRUzboXFDzTzIYRm9ButtS7MqahjOhKMP3YKByiKcoPfVuD0qAl0XhyphenhyphenQTLzlUBEvXYka3-IiR_gLTPF6PwfOGdG6Cns1Hu_MRtXE15Zeln38QQWKAfekubpLCTtSajdrTjsUXQzrTYFdi3oF2zgxzsk_c0awe-5wkKm0HYRpLykhLv4/s1280/AANDDM_Monzo_Quote-2.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMRp_RzT-yKnpcXRUzboXFDzTzIYRm9ButtS7MqahjOhKMP3YKByiKcoPfVuD0qAl0XhyphenhyphenQTLzlUBEvXYka3-IiR_gLTPF6PwfOGdG6Cns1Hu_MRtXE15Zeln38QQWKAfekubpLCTtSajdrTjsUXQzrTYFdi3oF2zgxzsk_c0awe-5wkKm0HYRpLykhLv4/s16000/AANDDM_Monzo_Quote-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;

  &lt;h2&gt;Enabling optimizations with a single change&lt;/h2&gt;
  &lt;p&gt;Many Android apps use an outdated default configuration file which disables most functionality of the R8 optimizer. The main change Monzo made to unlock these performance improvements was to replace the &lt;code&gt;proguard-android.txt&lt;/code&gt; default file with &lt;code&gt;proguard-android-optimize.txt&lt;/code&gt;. This change removes the &lt;code&gt;-dontoptimize&lt;/code&gt; instruction and allows R8 to properly do its job.&lt;/p&gt;

&lt;pre class="code-block"&gt;buildTypes {
  release {
    isMinifyEnabled = true
    isShrinkResources = true
    proguardFiles(
      getDefaultProguardFile("proguard-android-optimize.txt"),
    )
  }
}
&lt;/pre&gt;

  &lt;p&gt;After making this change, it's worth looking at your Keep configuration files. These files tell R8 which parts of your code to leave alone (usually because they're called dynamically or by external libraries). Tidying up unnecessary Keep rules means R8 can do more.&lt;/p&gt;

  &lt;h2&gt;Improving scroll performance with Baseline Profiles&lt;/h2&gt;
  &lt;p&gt;
    To further enhance the user experience, Monzo implemented &lt;a href="https://developer.android.com/topic/performance/baselineprofiles/overview"&gt;Baseline Profiles&lt;/a&gt;, specifically targeting scroll and rendering performance on their main feed. This strategy ensured that the most common user journeys—opening the app and scrolling the feed—were fully optimized. The impact on rendering was substantial: P90 scroll performance became 71% faster, and P95 scroll performance improved by 87%. Now scrolling the app is smoother than before.
    &lt;br /&gt;&lt;br /&gt;
    Monzo built this into their release process to maintain these improvements over time. "We trigger the baseline profile generation every week day (before running our nightly builds) and commit the latest changes once completed," Neumayer explains.
  &lt;/p&gt;

  &lt;h2&gt;Keeping up with modern Android development&lt;/h2&gt;
  &lt;p&gt;
    Monzo's experience shows what's possible when you stay up to date with Android build-tooling recommendations. While legacy apps often struggle with complex reflection usage, Monzo found the transition straightforward by documenting their Keep Rules properly. "We always add a comment explaining why Keep Rules are in place, so we know when it's safe to remove the rules," Neumayer notes.
    &lt;br /&gt;&lt;br /&gt;
    Neumayer's advice for other teams? Regularly check your practices against current standards: "Take a look at the latest recommendations from Google around app performance and check if you're following all the latest advice."
  &lt;/p&gt;
  
  &lt;p&gt;To get started and learn more about R8, visit &lt;a href="https://d.android.com/r8"&gt;https://d.android.com/r8&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/monzo-boosts-performance-metrics-by-up-to-35-percent.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjeoc8k0szO6APp8xoaNewSfj_gULMjxTJ-LWLAfodA_Wt4PF3Ax-cFZgETO4xehYDnFKeJodrMSlVJK0IesWqa2LvRQpDyCHvH-T2bZAbxNJyg-8WP55dJUP61gMBjBH44RHrSCA7L0C_e8m6YLboFZseS7HKTuvmQnS3SYVgGSOVFLeqQd640N4wmS8/s72-c/AANDDM_Monzo_Meta.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-7053289063864256809</guid><pubDate>Mon, 30 Mar 2026 20:00:00 +0000</pubDate><atom:updated>2026-03-30T13:26:48.463-07:00</atom:updated><title>Android developer verification: Rolling out to all developers on Play Console and Android Developer Console</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEgKvPOrkQ6xhfp3JzKhlQS63WlgsKEc3iI6Jl6VdfitojtR0j9py3hJ3S3dkp2JF39HU6lUswIJpFupt2fm5uFfWB7408f4mhvHWsM8JeO5tk0-M0jHpk4A40an8gtipxyKpGJrGBtdE7JadUHnRodVFB9NIMkwmnNJFqWw0x1ncIAoVb9h13CeV1p_jyQ" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEgKvPOrkQ6xhfp3JzKhlQS63WlgsKEc3iI6Jl6VdfitojtR0j9py3hJ3S3dkp2JF39HU6lUswIJpFupt2fm5uFfWB7408f4mhvHWsM8JeO5tk0-M0jHpk4A40an8gtipxyKpGJrGBtdE7JadUHnRodVFB9NIMkwmnNJFqWw0x1ncIAoVb9h13CeV1p_jyQ" style="display: none;" /&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="text-align: left;"&gt;Posted by Matthew Forsythe, Director Product Management, Android App Safety&lt;/i&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp7z-fiVj1B5NnGKEaGJoMfWTJawStwh-CcY_xrjTaOS1UTWaf0Ex_tnqxhWGRx_rmxDR-GMTaeUVW896p0RBvwt8p_cxQ8gMU6cpMC0Ori8ammOxFIF2pxQsd9giZez-P-e5Kg-3fssWUhEGaXF0-UnfsS_kxAg9lLbDXl4hsTB1YMbfG3UkONUzG6Es/s16000/260317_ADV%20Blog_Header.png" /&gt;&lt;/p&gt;
&lt;p&gt;Android is for everyone. It’s built on a commitment to an open and safe platform. Users should feel confident installing apps, no matter where they get them from. However, our recent analysis found over &lt;b&gt;90 times&lt;/b&gt; more malware from sideloaded sources than on Google Play. So as an extra layer of security, we are rolling out Android developer verification to help prevent malicious actors from hiding behind anonymity to repeatedly spread harm. Over the past several months, we’ve worked closely with the community to improve the design so we account for the many ways people use Android to balance openness with safety.&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Start your verification today&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Today, we’re starting to &lt;b&gt;roll out Android developer verification to all developers&lt;/b&gt; in both the new Android Developer Console and Play Console. This allows you to complete your verification and register your apps before user-facing changes begin later this year.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;If you only distribute apps outside of Google Play, you can create an account in &lt;a href="https://android.google.com/developerconsole"&gt;Android Developer Console&lt;/a&gt; today.&lt;/li&gt;
    &lt;li&gt;If you're on Google Play, check your &lt;a href="https://play.google.com/console/u/0/developers/android-developer-verification"&gt;Play Console&lt;/a&gt; account for updates over the next few weeks. If you’ve already verified your identity here, then you’re likely already set.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span&gt;Most of your users’ download experience will not change at all&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;While verification tools are rolling out now, the experience for users downloading your apps will not change until later this year. The user side protections will first go live in Brazil, Indonesia, Singapore, and Thailand this September, before expanding globally in 2027. We’ve shared this timeline early to ensure you have ample time to complete your verification.&lt;/p&gt;
&lt;p&gt;Following this deadline, for the vast majority of users, the experience of installing apps will stay exactly the same. It’s only when a user tries to install an unregistered app that they’ll require ADB or &lt;a href="https://android-developers.googleblog.com/2026/03/android-developer-verification.html"&gt;advanced flow&lt;/a&gt;, helping us keep the broader community safe while preserving the flexibility for our power users.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLAfuJmgmy3cM1RmmUwCx9GJ2zf8j5y53m2tIlUkLvUU3QrAYczD3bDW4kP_bJXy7WPvW9IGIhNcoNyoOeUcMjQurDHQPVL4YJZEcF_ScwpJCyRbkAVG6ZyRdhydJ4Gmz2tL883XY3mxAKp6IPsCMWbFSTnDUyXJA-4CpC3qkgHcPhRX1kCwl401XPjlQ/s16000/260327_%5BABL_13%5D%20Inline%20asset%20for%20blog_v2.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;i&gt;&lt;span&gt;Developers can still choose where to distribute their apps. Most users’ download experience will not change&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Tailoring the verification experience to your feedback&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;To balance the need for safety with our commitment to openness, we’ve improved the verification experience based on your feedback. We’ve streamlined the developer experience to be more integrated with existing workflows and maintained choice for power users.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;For Android Studio developers:&lt;/strong&gt; In the next two months, you’ll see your app's registration status right in Android Studio when you generate a signed App Bundle or APK.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6f-5qr7psaTT0Y5lQDMfTee4hH0LTk-LTkdqDckvou4K1kHAdDU6awUhU6ksHn2VkQhw9r8Y1RS6rv1cDFXGNwSyHlkSMP7QrbVpTFQNhhHYR_5lPisHw2Ak_2XVk263t-x1AIj4bQSYyHi1F-GPYGi8eLsv_MRUDMOQxLRoUTVNZ-Ypuz7za6hbMm3s/w400-h363/DeveloperVerificationAndroidStudio.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;i&gt;&lt;span&gt;You’ll see your app's registration status in Android Studio when you generate a signed App Bundle or APK.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;For Play developers:&lt;/strong&gt; If you've completed Play Console's developer verification requirements, your identity is already verified and we'll automatically register eligible Play apps for you.&amp;nbsp;In the rare case that we are unable to register your apps for you, you will need to follow the manual app claim process. Over the next couple of weeks, more details will be provided in the Play Console and through email. Also, you’ll be able to register apps you distribute outside of Play in the Play Console too.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEgrL7u2zF7sQXhyJij9fpRMnkjwRDnWD8AJ3mkSJlK0kUOmx4H-Yc6w5sFyEG_rcV4rKqcXPL3WZD0gzrRt3ShZiZ2vtN6q0RwPrWZVpgZq1kC-ng_2g93dtB2bH8RgNGxKQwCSV0xjKMzkCIVCMzmRWM1rsu0QxxXr4PXjvNhDH8OHq9dzyXXr8c8hwdQ=s16000" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span&gt;The Android developer verification page in your Play Console will show the registration status for each of your apps.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;For students and hobbyists:&lt;/strong&gt;&amp;nbsp;To keep Android accessible to everyone, we're building a free, no government ID required, limited distribution account so you can share your work with up to 20 devices. You only need an email account to get started. &lt;a href="https://google.qualtrics.com/jfe/form/SV_4N7NGE06NjJJdl4"&gt;Sign up for early access&lt;/a&gt;.&amp;nbsp;We’ll send invites in June.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;For power users:&lt;/strong&gt;&amp;nbsp;We are maintaining the choice to install apps from any source. You can use the new&amp;nbsp;&lt;a href="https://android-developers.googleblog.com/2026/03/android-developer-verification.html"&gt;advanced flow&lt;/a&gt;&amp;nbsp;for sideloading unregistered apps or continue using ADB. This maintains choice while protecting vulnerable users.&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;&lt;span&gt;What’s next?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;We’re rolling this out carefully and working closely with developers, users, and our partners. In April, we’ll introduce Android Developer Verifier, a new Google system service&amp;nbsp;that will be used to check if an app is registered to a verified developer.&lt;/p&gt;
&lt;ul style="text-align: left;"&gt;
    &lt;li&gt;&lt;strong&gt;April 2026:&lt;/strong&gt; Users will start to see Android Developer Verifier in their Google Systems services settings.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;June 2026:&lt;/strong&gt;&amp;nbsp;Early access: Limited distribution accounts for students and hobbyists.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;August 2026:&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://developer.android.com/developer-verification/guides/limited-distribution" target="_blank"&gt;Limited distribution accounts&lt;/a&gt; launch globally.&lt;/li&gt;&lt;li&gt;&lt;a href="https://android-developers.googleblog.com/2026/03/android-developer-verification.html" target="_blank"&gt;Advanced flow&lt;/a&gt;&amp;nbsp;for power users launches globally.&lt;/li&gt;&lt;/ul&gt;
    &lt;li&gt;&lt;strong&gt;September 30, 2026:&lt;/strong&gt;&amp;nbsp;Apps must be registered by verified developers in order to be installed and updated on certified Android devices in Brazil, Indonesia, Singapore, and Thailand. Unregistered apps can be sideloaded with ADB or advanced flow.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2027 and beyond:&lt;/strong&gt; We will roll out this requirement globally.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re committed to an Android that is both open and safe. Check out our &lt;a href="https://developer.android.com/developer-verification" target="_blank"&gt;developer guides&lt;/a&gt; to get started today.&lt;/p&gt;</description><link>http://android-developers.googleblog.com/2026/03/android-developer-verification-rolling-out-to-all-developers.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEgKvPOrkQ6xhfp3JzKhlQS63WlgsKEc3iI6Jl6VdfitojtR0j9py3hJ3S3dkp2JF39HU6lUswIJpFupt2fm5uFfWB7408f4mhvHWsM8JeO5tk0-M0jHpk4A40an8gtipxyKpGJrGBtdE7JadUHnRodVFB9NIMkwmnNJFqWw0x1ncIAoVb9h13CeV1p_jyQ=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-5000408083277205328</guid><pubDate>Thu, 26 Mar 2026 23:00:00 +0000</pubDate><atom:updated>2026-03-26T16:54:11.631-07:00</atom:updated><title>Redefining Location Privacy: New Tools and Improvements for Android 17</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmGKr9rzm4KELLhXbwcETVZvdbAGmgg-BGoXQI9unaa4nLIDJLMHRMRM7qKki8FBjCryLSoBIemWQh7RTsz46JpP78apo66KaFG9sHkGKZn6fMNoUBfM7bO8rn51NUzxcEl9-LCf-iw0ALOCm8NMNV_nQMXNKx0fiZLjrL-xS0C9ETswqA1ZgSLHaBLm0/s1235/Android%2017%20location%20%20-%20Meta-2%20(1).png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmGKr9rzm4KELLhXbwcETVZvdbAGmgg-BGoXQI9unaa4nLIDJLMHRMRM7qKki8FBjCryLSoBIemWQh7RTsz46JpP78apo66KaFG9sHkGKZn6fMNoUBfM7bO8rn51NUzxcEl9-LCf-iw0ALOCm8NMNV_nQMXNKx0fiZLjrL-xS0C9ETswqA1ZgSLHaBLm0/s1235/Android%2017%20location%20%20-%20Meta-2%20(1).png" style="display: none;" /&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i style="font-family: inherit;"&gt;Posted by Robert Clifford, Developer Relations Engineer and  Manjeet Rulhania, Software Engineer&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglx_TwzTQK5_eI17IlTsLwO0uFxLIMudAXISbn7K04Om6qFTokz_QwGbbdoI_MUlhdyJwK4YtM8LItFewKNAFsWCku8hRRG0kyK5v6PJ8RoCrXRFGqBaSvtLjJ-qfxSvowxxM4caFShrmiLArvO8ARHq1M0fX3n28RGMusSSozSBuXL2t5Vs_s9CYOUjU/s4210/Android%2017%20location%20-%20Blogger-2.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1254" data-original-width="4210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglx_TwzTQK5_eI17IlTsLwO0uFxLIMudAXISbn7K04Om6qFTokz_QwGbbdoI_MUlhdyJwK4YtM8LItFewKNAFsWCku8hRRG0kyK5v6PJ8RoCrXRFGqBaSvtLjJ-qfxSvowxxM4caFShrmiLArvO8ARHq1M0fX3n28RGMusSSozSBuXL2t5Vs_s9CYOUjU/s16000/Android%2017%20location%20-%20Blogger-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;A pillar of the Android ecosystem is our shared commitment to user trust. As the mobile landscape has evolved, so does our approach to protecting sensitive information. In Android 17, we’re introducing  a suite of new location privacy features designed to give users more control and provide developers elegant solutions for data minimization and product safety. Our strategy focuses on introducing new tools to balance high-quality experiences with robust privacy protections, and improving transparency for users to help manage their data.&lt;/div&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Introducing the location button: simplified access for one time use&lt;/span&gt;&lt;/h4&gt;For many common tasks, like finding a nearby shop or tagging a social post, your app doesn’t need permanent or background access to a user's precise location.With Android 17, we are introducing the location button, a new UI element designed to provide a well-lit path for responsible one time precise location access. Industry partners have requested this new feature as a way to bring a simpler, and more private location flow to their users.&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhGjCXZKGQ1rivT33d9tgj7PuHJgOJ5ndBLvSGw5lHEkhPFkJg2bHwfU-8Xb4BljhL6-qJCT0tHtchjhpyL-6q2mXnSMSaYk_f2YkW4pUpb-d7qwcCYEuEe_SNcaiFRZ95ytWEquDn4qDg5aB-I8_Z_VWs0SG-jfrJQR2oyxzkRUStP8xwkLBarodyHBn8" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1263" data-original-width="600" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEhGjCXZKGQ1rivT33d9tgj7PuHJgOJ5ndBLvSGw5lHEkhPFkJg2bHwfU-8Xb4BljhL6-qJCT0tHtchjhpyL-6q2mXnSMSaYk_f2YkW4pUpb-d7qwcCYEuEe_SNcaiFRZ95ytWEquDn4qDg5aB-I8_Z_VWs0SG-jfrJQR2oyxzkRUStP8xwkLBarodyHBn8=w304-h640" width="304" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Users get better privacy protection&lt;/span&gt;&lt;/h4&gt;Moving the decision making for location sharing to the point where a user takes action, helps the user make a clearer choice about how much information they want to share and for how long. This empowers users to limit data sharing to only what apps need in that session. Once consent is provided, this session based access eliminates repeated prompts for location dependent features. This benefits developers by creating a smoother experience for their users and providing high confidence in user intent, as access is explicitly requested at the moment of action.&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Full UI customization to match your app’s aesthetic&lt;/span&gt;&lt;/h4&gt;The location button provides extensive customization options to ensure integration with your app's aesthetic while maintaining system-wide recognizability. You can modify the button's visual style including:&lt;ul style="text-align: left;"&gt;&lt;li&gt;Background and icon color scheme&lt;/li&gt;&lt;li&gt;Outline style&lt;/li&gt;&lt;li&gt;Size and shape&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Additionally, you can select the appropriate text label from a predefined list of options. To ensure security and trust, the location icon itself remains mandatory and non-customizable, while the font size is system-managed to respect user accessibility settings&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEh12-WDZrUJCyHBxYS5aH1VOcKwpKhnQ2GRYAvFU-_T85BXZQSVYjY-0FjLZTYEs2NUk8jtdNf5apd88Fe57UX_LeSGC2OZxGdtf4uJY6C4WGRyqFze4OU0gSAzEBfTxhwvZ985P1TInM8mRfube5jvrX1UXNAaI77LtBja-94YDG3SKNxQiI0-JMqP3Cg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1401" data-original-width="2034" height="440" src="https://blogger.googleusercontent.com/img/a/AVvXsEh12-WDZrUJCyHBxYS5aH1VOcKwpKhnQ2GRYAvFU-_T85BXZQSVYjY-0FjLZTYEs2NUk8jtdNf5apd88Fe57UX_LeSGC2OZxGdtf4uJY6C4WGRyqFze4OU0gSAzEBfTxhwvZ985P1TInM8mRfube5jvrX1UXNAaI77LtBja-94YDG3SKNxQiI0-JMqP3Cg=w640-h440" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Simplified Integration with Jetpack and automatic backwards compatibility&lt;/span&gt;&lt;/h4&gt;The location button will be provided as a Jetpack library, ensuring easy integration into your existing app layouts similar to any other Jetpack view implementation, and simplifying how you request permission to access precise location. Additionally, when you implement location button with the Jetpack library it will automatically handle backwards compatibility by defaulting to the existing location prompt when a user taps it on a device running Android 16 or below. &lt;br /&gt;&lt;br /&gt;The Android location button is available for testing as of Android 17 Beta 3.&amp;nbsp;&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Location access transparency&lt;/span&gt;&lt;/h4&gt;Users often struggle to understand the tools they can use to monitor and control access to their location data. In Android 17, we are aligning location permission transparency with the high standards already set for the Microphone and Camera.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEiiQsG86kgPIbzP_fjjjb5jPju6TRZNBQWn3qQH119mzfeV7-sSXywiRK4gWdA0AV1CLxp0-fLqi-gveMEh9VKjzS__gBIzMqrAJw2i_FskfvSS8MG_kecerZfVLqCntZL5QTZbFAxR87EfK6jnm4eflbsQOGbVsfHCVOpEsw6nqxOh9x02gC4CupKqXuY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgDDKL5nrcpZyc9rbD297Sfm_y5ke3I3_PXjIN6SPrPhTd4bqDZWQcoYRCG-UdrWP01SIkdsceJsuR3KRSujf_c8atalKZUnaXFjm99SfxvGnqCUcde-TR6XddvPhYY0LzahF7ve9JCsWP3VAL_6xkzSMusUTIgRpiAwPrvxKJZYTijCts6E-9mev3vEe8" style="font-family: inherit; margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="927" data-original-width="444" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEgDDKL5nrcpZyc9rbD297Sfm_y5ke3I3_PXjIN6SPrPhTd4bqDZWQcoYRCG-UdrWP01SIkdsceJsuR3KRSujf_c8atalKZUnaXFjm99SfxvGnqCUcde-TR6XddvPhYY0LzahF7ve9JCsWP3VAL_6xkzSMusUTIgRpiAwPrvxKJZYTijCts6E-9mev3vEe8=w191-h400" width="191" /&gt;&lt;/a&gt;&lt;img alt="" data-original-height="928" data-original-width="444" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEiiQsG86kgPIbzP_fjjjb5jPju6TRZNBQWn3qQH119mzfeV7-sSXywiRK4gWdA0AV1CLxp0-fLqi-gveMEh9VKjzS__gBIzMqrAJw2i_FskfvSS8MG_kecerZfVLqCntZL5QTZbFAxR87EfK6jnm4eflbsQOGbVsfHCVOpEsw6nqxOh9x02gC4CupKqXuY=w191-h400" width="191" /&gt;&amp;nbsp; &amp;nbsp;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgcPSIF1wQMsIN4AVP9HB8tX5oNg7gl5DuTisTBREzqD9cF4z9v2SKvwMWGpF8BwhnmEKtz7BgDiO4PArm7TswSN7nkU65STNMi5x0xdBSjqi8gbbClvMkpqXkmgMJ0I4tBYCgZQ9xBIL4nvXEWm7oImaLaIDdMeEKNJVW8GEymPEE-3p0mcY_rhiEV2yc" style="clear: left; display: inline; font-family: inherit; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="928" data-original-width="444" height="397" src="https://blogger.googleusercontent.com/img/a/AVvXsEgcPSIF1wQMsIN4AVP9HB8tX5oNg7gl5DuTisTBREzqD9cF4z9v2SKvwMWGpF8BwhnmEKtz7BgDiO4PArm7TswSN7nkU65STNMi5x0xdBSjqi8gbbClvMkpqXkmgMJ0I4tBYCgZQ9xBIL4nvXEWm7oImaLaIDdMeEKNJVW8GEymPEE-3p0mcY_rhiEV2yc=w189-h397" width="189" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Updated Location Indicator: A persistent indicator will now appear to inform a user whenever a non-system app accesses their location&lt;/li&gt;&lt;li&gt;Attribution &amp;amp; Control: Users can tap the indicator to see exactly which apps have recently accessed their location and manage those permissions immediately through a "Recent app use" dialog.&lt;/li&gt;&lt;/ul&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Strengthening user privacy with density-based Coarse Location&lt;/span&gt;&lt;/h4&gt;Android 17 is also improving the algorithm for approximate (coarse) locations to be aware of population density. Previously, coarse locations used a static 2 km-wide grid, which in low-population areas may not be sufficiently private since a 2km square could often contain only a handful of users. The new approach replaces this fixed grid with a dynamically-sized area based on local population density. By increasing the grid for areas with lower population density, Android ensures a more consistent privacy guarantee across different environments from dense urban centers to remote regions.&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Improved runtime permission dialog&lt;/span&gt;&lt;/h4&gt;&lt;div&gt;The runtime permission dialog for location is one of the more complex flows for users to navigate, with users being asked to decide on the granularity and length of permission access they are willing to grant to each app. In an effort to help users to make the most informed privacy decisions with less friction, we’ve redesigned the dialog to make "&lt;b&gt;Precise&lt;/b&gt;" and "&lt;b&gt;Approximate&lt;/b&gt;" choices more visually distinct, encouraging users to select the level of access which best suits their needs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhPRWWAFax1SRDbgFKreyOmJDSt0Ahv3uYZMHQrm2Lae0ySU7NMZj9HQCkOZzxoB72_R_6UEWWRKaxUrkn2QzOJGYk4JqNxfov1sSvkmyCU-fmWrVxf9Wrl7a4dE7cXH_p56IbHyaRQUnD7l8okg8BHCGnb5Y3vl3WhbcOXYv9RUv-7f6L9rls9q6dY0HU" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1276" data-original-width="600" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEhPRWWAFax1SRDbgFKreyOmJDSt0Ahv3uYZMHQrm2Lae0ySU7NMZj9HQCkOZzxoB72_R_6UEWWRKaxUrkn2QzOJGYk4JqNxfov1sSvkmyCU-fmWrVxf9Wrl7a4dE7cXH_p56IbHyaRQUnD7l8okg8BHCGnb5Y3vl3WhbcOXYv9RUv-7f6L9rls9q6dY0HU=w301-h640" width="301" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Start building for Android 17&lt;/span&gt;&lt;/h4&gt;The new location privacy tools are available now in Beta 3. We’re looking for your feedback to help refine these features before the general release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Feedback: Report issues on the &lt;a href="https://developer.android.com/about/versions/17/feedback "&gt;[Official Tracker]&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Build a smoother, more private experience today.&lt;br /&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/location-privacy.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmGKr9rzm4KELLhXbwcETVZvdbAGmgg-BGoXQI9unaa4nLIDJLMHRMRM7qKki8FBjCryLSoBIemWQh7RTsz46JpP78apo66KaFG9sHkGKZn6fMNoUBfM7bO8rn51NUzxcEl9-LCf-iw0ALOCm8NMNV_nQMXNKx0fiZLjrL-xS0C9ETswqA1ZgSLHaBLm0/s72-c/Android%2017%20location%20%20-%20Meta-2%20(1).png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-7828686354457204813</guid><pubDate>Thu, 26 Mar 2026 20:00:00 +0000</pubDate><atom:updated>2026-03-26T13:12:25.943-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Android 17</category><category domain="http://www.blogger.com/atom/ns#">Beta</category><category domain="http://www.blogger.com/atom/ns#">Featured</category><title>The Third Beta of Android 17</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEgeHOpt8GZ4p71FjtVEgeMJ7UeyIf7KJw24QO-lgKMVN_cbHhqsDVm96GYUnANkc2w9ZLljkm56B8O7pMsnX6ssbGdvZgVvkaN7J5gR3UeqsBmGwDrFF22Iq2SSQq1iSJnzT1PWQiHTZlOIX8580R19AGdOziiTiUUPCM72ce7U-8g83EXtDxKeR4ef8yI"&gt;&lt;/meta&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
    &lt;i style="text-align: left;"&gt;Posted by Matthew McCullough, VP of Product Management, Android Developer&lt;/i&gt;
&lt;/div&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEithxwkNxtnsSHmC0bSaE5Kivh_q5M4e5nLz7wuWJXxp7QTiiSvMGVye9tzdSF-igjLI_7OGNFj1w5xRPntQ2atWLUhPrUN_DA0TYaJ1WzG0NW22M0T86Ri5xt_-a_wiPq3CEFfcOwxsi4r-R44kt3-YyQRCJLujcvi87zmuWn3BkeNCFsm2pfFcG0zoLA/s6314/Android%2017%20Beta-3%20Banner.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
        &lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEithxwkNxtnsSHmC0bSaE5Kivh_q5M4e5nLz7wuWJXxp7QTiiSvMGVye9tzdSF-igjLI_7OGNFj1w5xRPntQ2atWLUhPrUN_DA0TYaJ1WzG0NW22M0T86Ri5xt_-a_wiPq3CEFfcOwxsi4r-R44kt3-YyQRCJLujcvi87zmuWn3BkeNCFsm2pfFcG0zoLA/s16000/Android%2017%20Beta-3%20Banner.png" style="width: 100%;" /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;a href="https://developer.android.com/about/versions/17/"&gt;Android 17&lt;/a&gt; has officially reached platform stability today with Beta 3. That means that the API surface is locked; you can perform final compatibility testing and push your Android 17-targeted apps to the Play Store. In addition, Beta 3 brings a host of new capabilities to help you build better, more secure, and highly integrated applications.&lt;/p&gt;

&lt;h3 style="text-align: left;"&gt;Get your apps, libraries, tools, and game engines ready!&lt;/h3&gt;
&lt;p&gt;If you develop an SDK, library, tool, or game engine, it's even more important to prepare any necessary updates now to prevent your downstream app and game developers from being blocked by compatibility issues and allow them to target the latest SDK features. Please let your downstream developers know if updates are needed to fully support Android 17.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglEGmI7vGdb5wtXFGmvQ5vrFfLpub0-9tuJkhaGIqsQ2aVQ4afY6GQqTe755SheSpvE_zDKK4x9-SpnGzUn1Maiw22_vfyh3MFDW-PSVLSye8cPqfwxgQJiIkmnKbFmxOdBJDFiH63Ptm5VpTzSsZzVIQTllLK8FZmL0lC_ZW1NUQfU5B-kfRB9Yd6DIE/s3840/Android%2017%20Timeline%2001%20V02%20(2).png"&gt;
        &lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglEGmI7vGdb5wtXFGmvQ5vrFfLpub0-9tuJkhaGIqsQ2aVQ4afY6GQqTe755SheSpvE_zDKK4x9-SpnGzUn1Maiw22_vfyh3MFDW-PSVLSye8cPqfwxgQJiIkmnKbFmxOdBJDFiH63Ptm5VpTzSsZzVIQTllLK8FZmL0lC_ZW1NUQfU5B-kfRB9Yd6DIE/s16000/Android%2017%20Timeline%2001%20V02%20(2).png" style="width: 100%;" /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Testing involves installing your production app or a test app making use of your library or engine using Google Play or other means onto a device or emulator running Android 17 Beta 3. Work through all your app's flows and look for functional or UI issues. Review the behavior changes to focus your testing. Each release of Android contains platform changes that improve privacy, security, and overall user experience, and these changes can affect your apps. Here are some changes to focus on:&lt;/p&gt;

&lt;ul style="text-align: left;"&gt;
    &lt;li&gt;&lt;b&gt;Resizability on large screens:&lt;/b&gt; Once you target Android 17, you can no longer opt out of maintaining orientation, resizability and aspect ratio constraints &lt;a href="https://developer.android.com/about/versions/17/changes/ff-restrictions-ignored"&gt;on large screens&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Dynamic code loading:&lt;/b&gt; If your app targets Android 17 or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries. All native files loaded using System.load() must be marked as read-only. Otherwise, the system throws UnsatisfiedLinkError.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Enable CT by default&lt;/b&gt;: &lt;a href="https://developer.android.com/privacy-and-security/security-config#CertificateTransparencySummary"&gt;Certificate transparency (CT)&lt;/a&gt; is enabled by default. (On Android 16, CT is available but apps had to opt in.)&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Local network protections&lt;/b&gt;: Apps targeting Android 17 or higher have local network access blocked by default. Switch to using privacy preserving pickers if possible, and use the new ACCESS_LOCAL_NETWORK for broad, persistent access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style="text-align: left;"&gt;Media and camera enhancements&lt;/h3&gt;
&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Photo Picker customization options&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Android now allows you to tailor the visual presentation of the photo picker to better complement your app’s user interface. By leveraging the new &lt;a href="https://developer.android.com/reference/android/widget/photopicker/PhotoPickerUiCustomizationParams"&gt;PhotoPickerUiCustomizationParams&lt;/a&gt; API, you can modify the grid view aspect ratio from the standard 1:1 square to a 9:16 portrait display. This flexibility extends to both the ACTION_PICK_IMAGES intent and the embedded photo picker, enabling you to maintain a cohesive aesthetic when users interact with media.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEiK7X-BkFXF9ePPWbSTJhtTGXHc3IEQ0hAy410E9k9qI9mrZCtnQG3tJKCHTPzR1gTifaulh_3AVuv0y2gXbTSafAyQjDED4EYVSnEfKSfWup8TALaQcXHoi_NIaY4ejV_1dYmcQ5Wo07sYUIy_8CkPLjDTRxOcvBpKEN43srRdPifAh-S-4hjQf75N0gA=s16000" style="max-width: 400px;" /&gt;
&lt;/div&gt;

&lt;p&gt;This is all part of our effort to help make the privacy-preserving Android photo picker fit seamlessly with your app experience. &lt;a href="https://android-developers.googleblog.com/2026/01/httpsandroid-developers.googleblog.com202506android-embedded-photo-picker.html%20.html"&gt;Learn more about how you can embed the photo picker directly into your app for the most native experience&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val params = PhotoPickerUiCustomizationParams.Builder()
    .setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
    .build()

val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
    putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}

startActivityForResult(intent, REQUEST_CODE)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;Support for the RAW14 image format: &lt;/b&gt;Android 17 introduces support for the RAW14 image format — the de-facto industry standard for high-end digital photography — via the new ImageFormat.RAW14 constant. RAW14 is a single-channel, 14-bit per pixel format that uses a densely packed layout where every four consecutive pixels are packed into seven bytes.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Vendor-defined camera extensions:&lt;/b&gt; Android 17 adds Vendor-defined extensions to enable hardware partners define and implement custom camera extension modes to provide you access to the best and latest camera features, such as 'Super Resolution' or cutting-edge AI-driven enhancements. You can query for these modes using the isExtensionSupported(int) API.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Camera device type APIs:&lt;/b&gt; New Android 17 APIs allow you to query the underlying device type to identify if a camera is built-in hardware, an external USB webcam, or a virtual camera.&lt;/p&gt;

&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Bluetooth LE Audio hearing aid support&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Android now includes a specific device category for Bluetooth Low Energy (BLE) Audio hearing aids. With the addition of the &lt;a href="https://developer.android.com/reference/android/media/AudioDeviceInfo#TYPE_BLE_HEARING_AID"&gt;AudioDeviceInfo.TYPE_BLE_HEARING_AID&lt;/a&gt; constant, your app can now distinguish hearing aids from regular headsets.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Granular audio routing for hearing aids&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Android 17 allows users to independently manage where specific system sounds are played. They can choose to route notifications, ringtones, and alarms to connected hearing aids or the device's built-in speaker.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Extended HE-AAC software encoder&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Android 17 introduces a system-provided Extended HE-AAC software encoder. This encoder supports both low and high bitrates using unified speech and audio coding. You can access this encoder via the &lt;a href="https://developer.android.com/reference/android/media/MediaCodec"&gt;MediaCodec&lt;/a&gt; API using the name &lt;code&gt;c2.android.xheaac.encoder&lt;/code&gt; or by querying for the &lt;code&gt;audio/mp4a-latm&lt;/code&gt; MIME type.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)&lt;/code&gt;&lt;/pre&gt;

&lt;h3 style="text-align: left;"&gt;Performance and Battery Enhancements&lt;/h3&gt;
&lt;h4&gt;&lt;span style="font-size: large;"&gt;Reduce wakelocks with listener support for allow-while-idle alarms&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Android 17 introduces a new variant of AlarmManager.setExactAndAllowWhileIdle that accepts an OnAlarmListener instead of a PendingIntent. This new callback-based mechanism is ideal for apps that currently rely on continuous wakelocks to perform periodic tasks, such as messaging apps maintaining socket connections.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
    // Do work here
}

alarmManager.setExactAndAllowWhileIdle(
    AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + 60000,
    listener,
    null
)&lt;/code&gt;&lt;/pre&gt;

&lt;h3 style="text-align: left;"&gt;Privacy updates&lt;/h3&gt;
&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;System-provided Location Button&lt;/span&gt;&lt;/h4&gt;
&lt;div style="text-align: center;"&gt;
    &lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEixcZjzCx7U0bncjsCIyeirbfIEv3szRiTpGk5_fXQ3eB3Rf9ZqrPoqOms6yEpWoYcC00-XX06NVelUe1hljAEoDfyiwwgZ5rOddHJx2V4fxAssJxDvtELSlwoYIXK0Wa6o5CFTJNrmEWmzGWTbDvFckDG63P2aJu3T2rOSd8ikmg1xX4VScLG3FPpz5GQ" width="272" /&gt;
&lt;/div&gt;
&lt;p&gt;Android is introducing a system-rendered location button that you will be able to embed directly into your app's layout using an Android Jetpack library. When a user taps this system button, your app is granted precise location access for the current session only. To implement this, you need to declare the USE_LOCATION_BUTTON permission.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Discrete password visibility settings for touch and physical keyboards&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;This feature splits the existing "Show passwords" system setting into two distinct user preferences: one for touch-based inputs and another for physical (hardware) keyboard inputs. Characters entered via physical keyboards are now hidden immediately by default.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Security&lt;/h3&gt;
&lt;h4&gt;&lt;span style="font-size: large;"&gt;Enforced read-only dynamic code loading&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;To improve security against code injection attacks, Android now enforces that dynamically loaded native libraries must be read-only. If your app targets Android 17 or higher, all native files loaded using System.load() must be marked as read-only beforehand.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()

System.load(libraryFile.absolutePath)&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Post-Quantum Cryptography (PQC) Hybrid APK Signing&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;To prepare for future advancements in quantum computing, Android is introducing support for Post-Quantum Cryptography (PQC) through the new v3.2 APK Signature Scheme. This scheme utilizes a hybrid approach, combining a classical signature with an ML-DSA signature.&lt;/p&gt;

&lt;h3&gt;User experience and system UI&lt;/h3&gt;
&lt;h4&gt;&lt;span style="font-size: large;"&gt;Better support for widgets on external displays&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;This feature improves the visual consistency of app widgets when they are shown on connected or external displays with different pixel densities using DP or SP units.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)

val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
    R.id.container,
    16f, 8f, 16f, 8f,
    TypedValue.COMPLEX_UNIT_DIP
)&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Hidden app labels on the home screen&lt;/span&gt;&lt;/h4&gt;
&lt;div style="text-align: center;"&gt;
    &lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEjCeJg4XiM99_6vjo5d7XQkVBDJ51u44hThBQQ6fO1JCVjc2sI-fnQ47hWb4gi3rRvNGKI04OVbPL9f43YZs8jkKnRy0rhTO6WTOHupq28MFLDBw-8BAT4_c3pz_rRvr3Cn3lsl_IUxg8GkAE3fwpnwH8ivucLhr8l71BGDfxpyW7RZhP2b9_YYFTdx1RA" width="306" /&gt;
    &lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEikbzp62HZ1O5O-Wc_bwwawjiUCLk7IcclXoW4ahBYz1v1LtE1AXtvZyJ9U1yn6ct5Cqzx8W-sq6RFDX3NzNfxqrEvC0RHCQBpUod4wNlCQicfp7_YuI5jOi1lUfZzCBCsFVK3_HfNCxvdvXBVya2mKOtH0r_PZ7bJHX4n79h-hYpRRszFBtoqzTuR3M04" width="308" /&gt;
&lt;/div&gt;
&lt;p&gt;Android now provides a user setting to hide app names (labels) on the home screen workspace. Ensure your app icon is distinct and recognizable.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Desktop Interactive Picture-in-Picture&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Unlike traditional Picture-in-Picture, these pinned windows remain interactive while staying always-on-top of other application windows in desktop mode.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
    ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
    context.mainExecutor,
    object : OutcomeReceiver&amp;lt;Int, Exception&amp;gt; {
        override fun onResult(result: Int) {
            if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
                // Task successfully moved to pinned layer
            }
        }
        override fun onError(error: Exception) {}
    }
)&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Redesigned screen recording toolbar&lt;/span&gt;&lt;/h4&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
    &lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEh1LppuWI9PLVhEdoBkG2NC88V5K4emdk5odyjlnSPm79RnUv7RnEKL52rl3JsqP5aQssfynbQeaSGjRU1VnZtinmpAzRpJ1DueGOnewdBBhsS2uZqKiKy6YTzS_-np1M1m8GKigusBq8fJEiBVKVEQZyrtC6c0JpRZ1dbG-9lDZ5NRzoBSXQQLcsYFP14=s16000" style="width: 100%;" /&gt;
&lt;/div&gt;

&lt;h3 style="text-align: left;"&gt;Core functionality&lt;/h3&gt;
&lt;h4&gt;&lt;span style="font-size: large;"&gt;VPN app exclusion settings&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;By using the new ACTION_VPN_APP_EXCLUSION_SETTINGS Intent, your app can launch a system-managed Settings screen where users can select applications to bypass the VPN tunnel.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-kotlin"&gt;val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
}&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;OpenJDK 25 and 21 API updates&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;This update brings extensive features and refinements from OpenJDK 21 and OpenJDK 25, including the latest Unicode support and enhanced SSL support for named groups in TLS.&lt;/p&gt;

&lt;h3&gt;Get started with Android 17&lt;/h3&gt;
&lt;p&gt;You can &lt;a href="https://www.google.com/android/beta"&gt;enroll any supported Pixel device&lt;/a&gt; or &lt;a href="https://developer.android.com/about/versions/17/get#on_emulator"&gt;use the 64-bit system images with the Android Emulator&lt;/a&gt;.&lt;/p&gt;

&lt;ul style="text-align: left;"&gt;
    &lt;li&gt;Compile against the new SDK and report issues on the &lt;a href="https://developer.android.com/about/versions/17/feedback"&gt;feedback page&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Test your current app for compatibility and learn whether your app is affected by changes in Android 17.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For complete information, visit the &lt;a href="https://developer.android.com/about/versions/17"&gt;Android 17 developer site&lt;/a&gt;.&lt;/p&gt;</description><link>http://android-developers.googleblog.com/2026/03/the-third-beta-of-android-17.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEithxwkNxtnsSHmC0bSaE5Kivh_q5M4e5nLz7wuWJXxp7QTiiSvMGVye9tzdSF-igjLI_7OGNFj1w5xRPntQ2atWLUhPrUN_DA0TYaJ1WzG0NW22M0T86Ri5xt_-a_wiPq3CEFfcOwxsi4r-R44kt3-YyQRCJLujcvi87zmuWn3BkeNCFsm2pfFcG0zoLA/s72-c/Android%2017%20Beta-3%20Banner.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-7670360947645082673</guid><pubDate>Wed, 25 Mar 2026 17:00:00 +0000</pubDate><atom:updated>2026-03-25T10:00:00.118-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android Developer</category><category domain="http://www.blogger.com/atom/ns#">Featured</category><category domain="http://www.blogger.com/atom/ns#">Google Play</category><title>Meet the class of 2026 for the Google Play Apps Accelerator</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUBHNgqxw77vfn5PQubj24AuggfFPri24jytIYaGTUMbDx81j2BjnbNdzxJB4ys4haW3FdnTpQ57qslfzx-VahZOkNtDLwcL7-x0e44B0erieMsnbguE36h7on5s7E61CWJQ93dLSDe3_0Bl9qUUA001OwzXPy3XUQHMzcg1KcvRhUfzG4P3zsX3mlZNE/s2048/APPSACC_Email_RSVP_Header%20static_2048%20x%201323%20(1).png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUBHNgqxw77vfn5PQubj24AuggfFPri24jytIYaGTUMbDx81j2BjnbNdzxJB4ys4haW3FdnTpQ57qslfzx-VahZOkNtDLwcL7-x0e44B0erieMsnbguE36h7on5s7E61CWJQ93dLSDe3_0Bl9qUUA001OwzXPy3XUQHMzcg1KcvRhUfzG4P3zsX3mlZNE/s2048/APPSACC_Email_RSVP_Header%20static_2048%20x%201323%20(1).png" style="display: none;" /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;i style="text-align: justify;"&gt;&lt;span style="font-family: inherit;"&gt;Posted by Robbie McLachlan, Developer Marketing&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;i style="text-align: justify;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
  &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDKkhezPK2v3JPXko_s56Zh_QXIM-856-gCNKWootCKrINg7lPBPhtQLkumUBEjvIK7-0vQ9XjR13iChLZBataJUv15P2wsEvKLrpFz78SmrHwOa7seYnBneIlmlXm5zFAxUKAQzyoMg67eYOHCB2v5bOvJppnd4NM8pAG0lo810myvciLZ8aOB6ofSgM/s4209/APPSACC_Email_RSVP_Header%20static_4209x1253%20(1).png"&gt;
    &lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDKkhezPK2v3JPXko_s56Zh_QXIM-856-gCNKWootCKrINg7lPBPhtQLkumUBEjvIK7-0vQ9XjR13iChLZBataJUv15P2wsEvKLrpFz78SmrHwOa7seYnBneIlmlXm5zFAxUKAQzyoMg67eYOHCB2v5bOvJppnd4NM8pAG0lo810myvciLZ8aOB6ofSgM/s1600/APPSACC_Email_RSVP_Header%20static_4209x1253%20(1).png" style="max-width: 100%;" /&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;br /&gt;The wait is over! We are incredibly excited to share the &lt;a href="https://rsvp.withgoogle.com/events/play-apps-accelerator"&gt;Google Play Apps Accelerator&lt;/a&gt; class of 2026. We’ve handpicked a group of high-potential studios from across the globe to embark on a 12-week journey designed to supercharge their success.&lt;br /&gt;&lt;br /&gt;Here’s what’s in store for the program’s first ever class:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Curated learning: virtual masterclasses and workshops led by industry trailblazers.&lt;/li&gt;&lt;li&gt;Guidance &amp;amp; mentorship: 1-to-1 sessions covering everything from technical scaling to leadership.&lt;/li&gt;&lt;li&gt;Direct access: exclusive sessions with experts from Google and the world's top studios.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Without further ado, join us in congratulating them!&lt;div&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;
&lt;/ul&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
  &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwImpHVeHgJF2pOwfS-EPg4PwS50rqlcBERn-emVNU3WPkNfVzNQRHkOpcFaLVAkkR45H9zew470g57v3q3Os1mcpbYAZApBoUUIubeMTy68T5ViyldmfMF6SSPli-Ba8jJ92uT_gHwm3Hl_r6ALYV5hjcDOQULW6Caap3br8FMozEtBrraF4RKx1zTyU/s1600/APPSACC_Socials_ClassOf%202026.gif" style="max-width: 100%;" /&gt;
&lt;/div&gt;

&lt;h3 style="text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;Google Play Apps Accelerator | Class of 2026&lt;/span&gt;&lt;/h3&gt;

&lt;div style="display: flex; justify-content: center;"&gt;
  &lt;div style="text-align: center; width: 100%;"&gt;
  &lt;table style="border-collapse: collapse; border: 1px solid rgb(0, 0, 0); margin-left: auto; margin-right: auto; width: 100%;"&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td style="border: 1px solid rgb(0, 0, 0); padding: 10px; text-align: center; vertical-align: top;"&gt;
          &lt;p style="margin: 5px 0px; text-align: center;"&gt;&lt;b&gt;&lt;i&gt;Americas&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Anytune&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;AstroVeda&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;BetterYou&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Changed&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Focus Forge&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Human Program&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Know Your Lemons&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;kweliTV&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Language Innovation&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Matraquinha&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;MR ROCCO&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;MUU nutrition&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;NKENNE&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Skarvo&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Starcrossed&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Wishfinity&lt;/i&gt;&lt;/p&gt;
        &lt;/td&gt;

        &lt;td style="border: 1px solid rgb(0, 0, 0); padding: 10px; text-align: center; vertical-align: top;"&gt;
          &lt;p style="margin: 5px 0px; text-align: center;"&gt;&lt;b&gt;&lt;i&gt;Asia Pacific&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Human Health&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Kitakuji&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Lazy Surfers&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Mellers Tech&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Reehee Company&lt;/i&gt;&lt;/p&gt;
        &lt;/td&gt;

        &lt;td style="border: 1px solid rgb(0, 0, 0); padding: 10px; text-align: center; vertical-align: top;"&gt;
          &lt;p style="margin: 5px 0px; text-align: center;"&gt;&lt;b&gt;&lt;i&gt;Europe, Middle East &amp;amp; Africa&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;cabuu&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Class54 Education&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Digital Garden&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;EverPixel&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Geolives&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;HelloMind&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;ifal&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Idea Accelerator&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Maposcope&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Ochy&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Picastro&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Pixelbite&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Record Scanner&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Talkao&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;unorderly&lt;/i&gt;&lt;/p&gt;
          &lt;p style="margin: 2px 0px; text-align: center;"&gt;&lt;i&gt;Xeropan International&lt;/i&gt;&lt;/p&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;Congratulations again to all the founders selected, we can’t wait to see your apps grow on our platform.&lt;br /&gt;&lt;br /&gt;The Google Play Apps Accelerator is part of our mission to help businesses of all sizes grow on Google Play and reach their full potential. &lt;a href="https://play.google.com/console/about/programs/"&gt;Discover more&lt;/a&gt; about Google Play’s programs, resources and tools. &lt;/span&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/meet-class-of-2026-for-google-play-apps.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUBHNgqxw77vfn5PQubj24AuggfFPri24jytIYaGTUMbDx81j2BjnbNdzxJB4ys4haW3FdnTpQ57qslfzx-VahZOkNtDLwcL7-x0e44B0erieMsnbguE36h7on5s7E61CWJQ93dLSDe3_0Bl9qUUA001OwzXPy3XUQHMzcg1KcvRhUfzG4P3zsX3mlZNE/s72-c/APPSACC_Email_RSVP_Header%20static_2048%20x%201323%20(1).png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-2514824232109855475</guid><pubDate>Tue, 24 Mar 2026 20:00:00 +0000</pubDate><atom:updated>2026-03-24T13:00:00.121-07:00</atom:updated><title>Contact Picker: Privacy-First Contact Sharing</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw19aR52Jc_vcjKK6eBUZH1G_ekDxopJ3QtmPHEGjWSm_3YgppPoldWg2UJsLfskI7TqXWhyGGK1wJWg7yIio2uh42HfK9Xn7iA6sEOuqDGjJvfoK34iu449ZPdAH5-7l7Vo2PWQNCwIcJxrh1MDAD2ZJjnhfclHudsnijD9vVKQVgnLjDluA1SBFVGkw/s1234/Android-Contacts-picker-Meta.gif" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw19aR52Jc_vcjKK6eBUZH1G_ekDxopJ3QtmPHEGjWSm_3YgppPoldWg2UJsLfskI7TqXWhyGGK1wJWg7yIio2uh42HfK9Xn7iA6sEOuqDGjJvfoK34iu449ZPdAH5-7l7Vo2PWQNCwIcJxrh1MDAD2ZJjnhfclHudsnijD9vVKQVgnLjDluA1SBFVGkw/s1234/Android-Contacts-picker-Meta.gif" style="display: none;" /&gt;&lt;div&gt;&lt;i&gt;Posted by Roxanna Aliabadi Walker, Senior Product Manager&lt;/i&gt;&lt;/div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;/p&gt;&lt;/name&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikYu9CPJpGlDbuxMKAUKhAAeV_y_yURtWFADlcUdQMkFznqKxU-ciXO5NXLdW7VkfBR6RKidxFTIC6PJQmybqfAygru6KV7pUfrlfpG5tVcFjCPn83qzvCkEYwXL63_jYXxkFiPy-W_qA0Asp9nuhIEAusUAMzDkFfbRdXAi-pPY_ywsT2g6QCGQM_K5M/s4208/Android-Contacts-picker-blog.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1252" data-original-width="4208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikYu9CPJpGlDbuxMKAUKhAAeV_y_yURtWFADlcUdQMkFznqKxU-ciXO5NXLdW7VkfBR6RKidxFTIC6PJQmybqfAygru6KV7pUfrlfpG5tVcFjCPn83qzvCkEYwXL63_jYXxkFiPy-W_qA0Asp9nuhIEAusUAMzDkFfbRdXAi-pPY_ywsT2g6QCGQM_K5M/s16000/Android-Contacts-picker-blog.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Privacy and user control remain at the heart of the Android experience. Just as the photo picker made media sharing secure and easy to implement, we are now bringing that same level of privacy, simplicity, and great user experience to contact selection.&lt;/name&gt;&lt;/div&gt;&lt;h3 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;A New Standard for Contact Privacy&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: inherit;"&gt;Historically, applications requiring access to a specific user's contacts relied on the broad&amp;nbsp;&lt;/span&gt;&lt;span id="docs-internal-guid-0ce82ed6-7fff-0862-152c-823c43755660"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;READ_CONTACTS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;permission. While functional, this approach often granted apps more data than necessary. The new Android Contact Picker, introduced in Android 17, changes this dynamic by providing a standardized, secure, and searchable interface for contact selection.&lt;br /&gt;&lt;br /&gt;This feature allows users to grant apps access only to the specific contacts they choose, aligning with Android's commitment to data transparency and minimized permission footprints.&lt;/span&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWkihZIsKKrpWrDno5wlKHkDvqYmA9uSWLPStO1OdFvqWfjOJ-qOyPpdohM6vPf6b1eQzfDQqw28ZAOM1KP1y-SS_i5jS4S5Wgn10Ayl1LLg7d7ScI0F8wKHmgR7cPgovHf8YS4DM8XDrurCo7RK0sfcMXjtiYLMsLerh7IGzwYdbICvKdCGQPxAjArD8/s3700/picker.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="3700" data-original-width="1648" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWkihZIsKKrpWrDno5wlKHkDvqYmA9uSWLPStO1OdFvqWfjOJ-qOyPpdohM6vPf6b1eQzfDQqw28ZAOM1KP1y-SS_i5jS4S5Wgn10Ayl1LLg7d7ScI0F8wKHmgR7cPgovHf8YS4DM8XDrurCo7RK0sfcMXjtiYLMsLerh7IGzwYdbICvKdCGQPxAjArD8/w285-h640/picker.png" width="285" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4RnQZ7LxzMYCZnsGhtCvm-Yg8lveynghGN78F7LFUsht5uH3rPRLXA7Qa-MxaCi7UH8NgZaqCkqZNRER4a-ae0Apl5qfw1-3DGj2P1hvb9VGHvjVaFCDNNzUpBlBe-yJzEaWsVRpCPFu2DrELV71llu8mewEnASfbLsGQzKpcrRbU5Djl7zEI3UGkC3Q/s3700/selection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="3700" data-original-width="1648" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4RnQZ7LxzMYCZnsGhtCvm-Yg8lveynghGN78F7LFUsht5uH3rPRLXA7Qa-MxaCi7UH8NgZaqCkqZNRER4a-ae0Apl5qfw1-3DGj2P1hvb9VGHvjVaFCDNNzUpBlBe-yJzEaWsVRpCPFu2DrELV71llu8mewEnASfbLsGQzKpcrRbU5Djl7zEI3UGkC3Q/w286-h640/selection.png" width="286" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;How It Works&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: inherit;"&gt;Developers can integrate the Contact Picker using the&amp;nbsp;&lt;/span&gt;&lt;span id="docs-internal-guid-32496b84-7fff-4a6d-e887-fcc10cf42f30"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Intent.ACTION_PICK_CONTACTS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;intent. This updated API offers several powerful capabilities:&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Granular Data Requests:&lt;/b&gt; Apps can specify exactly which fields they need, such as phone numbers or email addresses, rather than receiving the entire contact record.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Multi-Selection Support:&lt;/b&gt; The picker supports both single and multiple contact selections, giving developers more flexibility for features like group invitations.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Selection Limits:&lt;/b&gt; Developers can set custom limits on the number of contacts a user can select at one time.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Temporary Access:&lt;/b&gt; Upon selection, the system returns a Session URI that provides temporary read access to the requested data, ensuring that access does not persist longer than necessary.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Access to other profiles: &lt;/b&gt;When using this new intent, the interface will allow users to select contents from other user profiles such as a work profile, cloned profile or a private space.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Optimized Performance: &lt;/b&gt;The Contact Picker returns a single&amp;nbsp;&lt;span id="docs-internal-guid-29de31cf-7fff-79da-1585-a5da846457ae"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Uri&lt;/span&gt;&lt;/span&gt;&amp;nbsp;that allows for collective result querying, eliminating the need to query individual contact&amp;nbsp;&lt;span id="docs-internal-guid-29de31cf-7fff-79da-1585-a5da846457ae"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Uri&lt;/span&gt;&lt;/span&gt;&amp;nbsp;separately as required by&amp;nbsp;&lt;span id="docs-internal-guid-a8b1f3f4-7fff-a377-9200-484951ace9b8"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ACTION_PICK&lt;/span&gt;&lt;/span&gt;. This efficiency further reduces system overhead by utilizing a single&lt;span id="docs-internal-guid-5625b4cf-7fff-baac-8e27-e61b011e9604"&gt;&lt;span face="Roboto, sans-serif" style="color: #3c4043; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Binder&lt;/span&gt;&lt;/span&gt;&amp;nbsp;transaction.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Backward Compatibility and Implementation&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: inherit;"&gt;For devices running Android 17 or higher, the system automatically upgrades legacy&amp;nbsp;&lt;/span&gt;&lt;span id="docs-internal-guid-f65cec24-7fff-766d-3951-4531545b8658"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ACTION_PICK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;intents that specify contact data types to the new, more secure interface. However, to take full advantage of advanced features like multi-selection, developers are encouraged to update their implementation code and utilize the&amp;nbsp;&lt;/span&gt;&lt;span id="docs-internal-guid-e00bd175-7fff-9327-f51a-9b6633a972f2"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ContentResolver&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;to query the returned Session URI.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;Integrate the contact pickerTo integrate the Contact Picker, developers use the&amp;nbsp;&lt;/span&gt;&lt;span id="docs-internal-guid-35327538-7fff-abdd-33b4-4d1b2dc5608c"&gt;&lt;span face="Roboto, sans-serif" style="color: #3c4043; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ACTION_PICK_CONTACTS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;intent. Below is a code example demonstrating how to launch the picker and request specific data fields, such as email and phone numbers.
  &lt;pre&gt;&lt;code class="language-kotlin"&gt;
// State to hold the list of selected contacts
var contacts by remember { mutableStateOf&amp;lt;List&amp;lt;Contact&amp;gt;&amp;gt;(emptyList()) }

// Launcher for the Contact Picker intent
val pickContact = rememberLauncherForActivityResult(StartActivityForResult()) {
    if (it.resultCode == Activity.RESULT_OK) {
        val resultUri = it.data?.data ?: return@rememberLauncherForActivityResult

        // Process the result URI in a background thread
        coroutine.launch {
            contacts = processContactPickerResultUri(resultUri, context)
        }
    }
}

// Define the specific contact data fields you need
val requestedFields = arrayListOf(
    Email.CONTENT_ITEM_TYPE,
    Phone.CONTENT_ITEM_TYPE,
)

// Set up the intent for the Contact Picker
val pickContactIntent = Intent(ACTION_PICK_CONTACTS).apply {
    putExtra(EXTRA_PICK_CONTACTS_SELECTION_LIMIT, 5)
    putStringArrayListExtra(
        EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS,
        requestedFields
    )
    putExtra(EXTRA_PICK_CONTACTS_MATCH_ALL_DATA_FIELDS, false)
}

// Launch the picker
pickContact.launch(pickContactIntent)
&lt;/code&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;After the user makes a selection, the app processes the result by querying the returned Session URI to extract the requested contact information. 
&lt;pre&gt;&lt;code class="language-kotlin"&gt;
// Data class representing a parsed Contact with selected details
data class Contact(val id: String, val name: String, val email: String?, val phone: String?)

// Helper function to query the content resolver with the URI returned by the Contact Picker.
// Parses the cursor to extract contact details such as name, email, and phone number
private suspend fun processContactPickerResultUri(
    sessionUri: Uri,
    context: Context
): List&amp;lt;Contact&amp;gt; = withContext(Dispatchers.IO) {
    // Define the columns we want to retrieve from the ContactPicker ContentProvider
    val projection = arrayOf(
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,
        ContactsContract.Data.MIMETYPE, // Type of data (e.g., email or phone)
        ContactsContract.Data.DATA1, // The actual data (Phone number / Email string)
    )

    val results = mutableListOf&amp;lt;Contact&amp;gt;()

    // Note: The Contact Picker Session Uri doesn't support custom selection &amp;amp; selectionArgs.
    context.contentResolver.query(sessionUri, projection, null, null, null)?.use { cursor -&amp;gt;
        // Get the column indices for our requested projection
        val contactIdIdx = cursor.getColumnIndex(ContactsContract.Contacts._ID)
        val mimeTypeIdx = cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)
        val nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY)
        val data1Idx = cursor.getColumnIndex(ContactsContract.Data.DATA1)

        while (cursor.moveToNext()) {
            val contactId = cursor.getString(contactIdIdx)
            val mimeType = cursor.getString(mimeTypeIdx)
            val name = cursor.getString(nameIdx) ?: ""
            val data1 = cursor.getString(data1Idx) ?: ""

            // Determine if the current row represents an email or a phone number
            val email = if (mimeType == Email.CONTENT_ITEM_TYPE) data1 else null
            val phone = if (mimeType == Phone.CONTENT_ITEM_TYPE) data1 else null

            // Add the parsed contact to our results list
            results.add(Contact(contactId, name, email, phone))
        }
    }

    return@withContext results
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-dcf4d566-7fff-a3ac-d106-2757106bd456"&gt;&lt;p dir="ltr" style="line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;Check out the full documentation &lt;a href="https://developer.android.com/about/versions/17/features/contact-picker"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;h3 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Best Practices for Developers&lt;/span&gt;&lt;/h3&gt;To provide the best user experience and maintain high security standards, we recommend the following:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Data Minimization:&lt;/b&gt; Only request the specific data fields (e.g., email) your app needs.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Immediate Persistence:&lt;/b&gt; Persist selected data immediately, as the Session URI access is temporary.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/contact-picker-privacy-first-contact.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw19aR52Jc_vcjKK6eBUZH1G_ekDxopJ3QtmPHEGjWSm_3YgppPoldWg2UJsLfskI7TqXWhyGGK1wJWg7yIio2uh42HfK9Xn7iA6sEOuqDGjJvfoK34iu449ZPdAH5-7l7Vo2PWQNCwIcJxrh1MDAD2ZJjnhfclHudsnijD9vVKQVgnLjDluA1SBFVGkw/s72-c/Android-Contacts-picker-Meta.gif" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-8517061601582536401</guid><pubDate>Tue, 24 Mar 2026 16:00:00 +0000</pubDate><atom:updated>2026-03-24T09:00:09.148-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AAOS</category><category domain="http://www.blogger.com/atom/ns#">Android Automotive OS</category><category domain="http://www.blogger.com/atom/ns#">Automotive</category><category domain="http://www.blogger.com/atom/ns#">Open source</category><category domain="http://www.blogger.com/atom/ns#">SDV</category><title>Beyond Infotainment: Extending Android Automotive OS for Software-defined Vehicles</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYkRFqoqSaezQJXue3Xcr5hsG6OUIrrU8MmZHJeMFe2Hz4_0m-5jiDXB3PWDC8gNxyqm-xYWv9StXeeyFPaMauJAHfUvnR6DJDTcCpgXT3Ch9BReaXD6k_T2nTIwSDK_F6HLh9A23a7cLWO4rMyKToLU_VPlVro2UWaXTY92Y6rhs_lTsrjBvRH-e-lU/s2048/AAOS_SDV_Hero_dark%20(1).jpeg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYkRFqoqSaezQJXue3Xcr5hsG6OUIrrU8MmZHJeMFe2Hz4_0m-5jiDXB3PWDC8gNxyqm-xYWv9StXeeyFPaMauJAHfUvnR6DJDTcCpgXT3Ch9BReaXD6k_T2nTIwSDK_F6HLh9A23a7cLWO4rMyKToLU_VPlVro2UWaXTY92Y6rhs_lTsrjBvRH-e-lU/s2048/AAOS_SDV_Hero_dark%20(1).jpeg" style="display: none;" /&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-style: italic;"&gt;&lt;i&gt;Posted by&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;span id="docs-internal-guid-0c797886-7fff-f525-c291-9784302b0c55" style="font-family: inherit; font-style: italic;"&gt;&lt;span style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Eser Erdem, Senior Engineering Manager, Android Automotive&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #1f1f1f;"&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEiXV9jiSoaAZm-S-J9svi_XqHT6wKGoJ6sCyMQ3X7f4tHo9Ttx8FvjxPmE1TUwu-7TJb8Ap6LdbiTs6HisDsbaV_d9NViMgaDZX4u-CyDzzY1q-g0Ql3cVRff5kxfTJ1-mK23-fa31TiWoH-JTtRkS8yKwv3Mb6FBeKMzWFsNQflWWrOJBMVhviAFNdVSo" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1323" data-original-width="2048" src="https://blogger.googleusercontent.com/img/a/AVvXsEiXV9jiSoaAZm-S-J9svi_XqHT6wKGoJ6sCyMQ3X7f4tHo9Ttx8FvjxPmE1TUwu-7TJb8Ap6LdbiTs6HisDsbaV_d9NViMgaDZX4u-CyDzzY1q-g0Ql3cVRff5kxfTJ1-mK23-fa31TiWoH-JTtRkS8yKwv3Mb6FBeKMzWFsNQflWWrOJBMVhviAFNdVSo=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span id="docs-internal-guid-a72d7642-7fff-ace3-aff8-5f2db3da13b0"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;At Google we’re deeply committed to the automotive industry--not just as a technology provider, but as a partner in the industry's transformation. We believe that car makers and users should have choice and flexibility, and that open platforms are the best enablers. For over a decade, we have provided Android Automotive OS (AAOS) as an open platform for infotainment, enabling rich innovation and differentiation in the in-vehicle digital experience. However, as vehicles modernize, car makers face new hurdles: fragmented software across compute components, poor portability between architectures, and a lack of granular update capabilities. To address these problems, we are expanding AAOS beyond infotainment with Android Automotive OS for Software Defined Vehicles (AAOS SDV)--an open platform featuring a modular structure, a topology-agnostic communication layer, and the support for granular updates.&lt;br /&gt;&lt;br /&gt;The transition toward SDVs is an incredible industry transformation, and we are eager to contribute to the broader ecosystem making it happen. Later this year, AAOS SDV will be available in the &lt;a href="https://source.android.com/docs/automotive/start/what_automotive"&gt;Android Open Source Project (AOSP)&lt;/a&gt; for uses beyond infotainment. By bringing our SDV platform into the open-source domain, we empower the industry to develop or enhance features that lower costs, accelerate time to market, and provide significant advantages across the automotive landscape.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjY8AO1UfTwruh_dGk4eJaJWSZKtiual23g1e9dGTV7ZOe3G9kSSUWrWHvsDcdJd0FtiLgkjRiU0LNmST0ng7y5DXwvomspuNv9L9f6XuqrFQPwNeW7vIv0W3yEClIWkjqRi_GWyWNRkro0-QK-N_-xkHF4g77lBO2Tv3IH9eSakzmJ4iHh_5vjSrb-N9Q" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="540" data-original-width="960" src="https://blogger.googleusercontent.com/img/a/AVvXsEjY8AO1UfTwruh_dGk4eJaJWSZKtiual23g1e9dGTV7ZOe3G9kSSUWrWHvsDcdJd0FtiLgkjRiU0LNmST0ng7y5DXwvomspuNv9L9f6XuqrFQPwNeW7vIv0W3yEClIWkjqRi_GWyWNRkro0-QK-N_-xkHF4g77lBO2Tv3IH9eSakzmJ4iHh_5vjSrb-N9Q=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: x-large;"&gt;A Foundation for the Software-Defined Vehicle&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;AAOS SDV is engineered to address the core challenges of modern vehicle development. This new AAOS expansion provides a compact, performant and scalable software foundation based on a headless Android native stack, extending much deeper into the vehicle architecture to power software components throughout the vehicle such as the seat actuator, instrument cluster, climate control, lighting, cameras, mirrors, telemetry, and more.&lt;br /&gt;&lt;br /&gt;AAOS SDV’s core is a lightweight Android-based operating system incorporating low-level automotive specific frameworks for communications, diagnostics, software updates, and more. This enables AAOS SDV to power many different vehicle controllers, tackling Core Compute, Body Controls, and Cluster domains. &lt;br /&gt;&lt;br /&gt;In addition, the AAOS SDV platform includes a new framework, Display Safety, for implementing instrument cluster applications including audible chimes, regulatory camera, and sophisticated graphics that blend seamlessly with AAOS IVI content. Display Safety includes a safety design toolchain and a reference safety monitor, allowing OEMs to meet functional safety requirements leveraging the diverse platform safety mechanisms of Automotive SoCs.&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 0pt;"&gt;&lt;span id="docs-internal-guid-c7ea36c9-7fff-fa33-ca44-c88e34275cc4" style="font-weight: normal;"&gt;&lt;div&gt;&lt;span face="&amp;quot;Google Sans Text&amp;quot;, sans-serif" style="color: #1f1f1f; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhJD0h60fFIXKyk9I8M2rX2aFeba-ROdycX-0ChyX6QChgn8x3sr4ziqrZrA4qWJ-J4_ToA-ISj2osUlXXfqoEalBrukeaPL1_gK9WsBVeWcWWukUDj98Gm3aP5NrSR9EYggic-nyYYE9GotjuZXaXY7CmiADSA9gSb3cdzBhCeDBRwprrfK2zSN_fFgHY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1080" data-original-width="1920" src="https://blogger.googleusercontent.com/img/a/AVvXsEhJD0h60fFIXKyk9I8M2rX2aFeba-ROdycX-0ChyX6QChgn8x3sr4ziqrZrA4qWJ-J4_ToA-ISj2osUlXXfqoEalBrukeaPL1_gK9WsBVeWcWWukUDj98Gm3aP5NrSR9EYggic-nyYYE9GotjuZXaXY7CmiADSA9gSb3cdzBhCeDBRwprrfK2zSN_fFgHY=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir="ltr" style="line-height: 1.656; margin-bottom: 12pt; margin-top: 12pt; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Flexible Deployment for AAOS SDV&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;Engineered for flexibility, the AAOS SDV framework can utilize hypervisor-backed virtualization with virtio support to separate software domains, or it can be deployed on bare metal for optimal low-latency performance.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Transforming the Developer Experience&lt;/span&gt;&lt;/h4&gt;AAOS SDV is designed to power modern vehicles, but it was also designed to change how modern vehicle software is developed, tested and delivered with the goals to reduce development time and cost while increasing innovation and agility. With its optimized development workflows, our open-source SDV platform provides a wide range of benefits across the automotive industry:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Accelerated Time-to-Market:&lt;/b&gt; AAOS SDV components can accelerate development with production ready software for various components that can be further modified.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Standard Signal Catalog:&lt;/b&gt; A new standard signal catalog to bring OEMs and automotive suppliers onto the same page eliminates redundant engineering efforts and significantly reduces platform development costs.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Optimized for virtual cloud development: &lt;/b&gt;AAOS SDV was designed ground-up to support virtual cloud development - enabling partners to design, test and validate components in the car well ahead of hardware availability. AAOS SDV already runs on Android Virtual Device (&lt;a href="https://source.android.com/docs/devices/cuttlefish"&gt;Cuttlefish&lt;/a&gt;), and works well with existing Google Cloud integrations such as &lt;a href="https://cloud.google.com/blog/topics/manufacturing/slash-android-automotive-os-build-times-and-get-to-market-faster-with-horizon-on-google-cloud"&gt;Google Cloud Horizon&lt;/a&gt;, enabling a digital twin solution at scale.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;A Service-Oriented Architecture: &lt;/b&gt;Vehicle functions are developed as topology-agnostic services which are reusable across different architectures. The platform treats the vehicle as a dynamic, connected system. This allows for granular, service-level updates with built-in dependency handling, enabling you to deploy new features over-the-air and create continuous improvement loops.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Future-Ready for new services:&lt;/b&gt; The platform is designed to simplify the development of telemetry, AI training feedback loops, accelerating the deployment of advanced features for both enterprise fleets and consumer vehicles.&lt;/li&gt;&lt;/ul&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: x-large;"&gt;Production Ready: Partnering with Renault&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;We are proud to highlight our deep partnership with Renault to underscore the production readiness of the AAOS SDV platform. Renault is currently leveraging the Android Automotive OS SDV platform for its upcoming Renault Trafic e-Tech, “&lt;a href="https://media.renault.com/new-renault-trafic-van-e-tech-electric-a-new-efficient-agile-and-innovative-vehicle-for-business-users/?lang=eng"&gt;[...] production set to begin in late 2026&lt;/a&gt;”. The Renault Trafic e-Tech validates the platform's ability to accelerate development and enable a new generation of software-defined commercial vehicles.&lt;br /&gt;&lt;/span&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: x-large;"&gt;Scaling Ready: Partnering with Qualcomm &lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;Qualcomm is scaling the Android Automotive OS SDV platform through our strategic partnership. At CES 2026, Qualcomm introduced &lt;a href="https://www.qualcomm.com/news/onq/2026/01/snapdragon-vsoc-aaos-sdv-google-cloud"&gt;Snapdragon vSoC on Google Cloud&lt;/a&gt; and announced a scaling collaboration to deliver a turnkey, pre-integrated AAOS SDV stack on Snapdragon Digital Chassis platforms.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: x-large;"&gt;Building an Open AAOS Ecosystem&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;The power of AAOS comes from its vibrant ecosystem. To prepare for the open source release later this year, we are proactively working with leading industry carmakers, suppliers, silicon platforms, and software vendors to ensure that the AAOS SDV platform is well supported and robustly integrated within the automotive ecosystem. We look forward to sharing more updates with our partners in the months ahead.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/Beyond-Infotainment-Extending-Android-Automotive-OS-for-Software-defined-Vehicles.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYkRFqoqSaezQJXue3Xcr5hsG6OUIrrU8MmZHJeMFe2Hz4_0m-5jiDXB3PWDC8gNxyqm-xYWv9StXeeyFPaMauJAHfUvnR6DJDTcCpgXT3Ch9BReaXD6k_T2nTIwSDK_F6HLh9A23a7cLWO4rMyKToLU_VPlVro2UWaXTY92Y6rhs_lTsrjBvRH-e-lU/s72-c/AAOS_SDV_Hero_dark%20(1).jpeg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-6026639587187379792</guid><pubDate>Thu, 19 Mar 2026 14:00:00 +0000</pubDate><atom:updated>2026-03-19T14:38:53.798-07:00</atom:updated><title>Android developer verification: Balancing openness and choice with safety</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEhfuDCN-ydp1pEzz98sEaYM9xaev8lWd_vGbCg13oO7OMpNj6JeuyS7JO6hpHZGj6Iyo92nA36FEP9lE4fL62qqhNbdQWH0NeV5F2asMGgJI1VZOWzuyyRbQ_76VL2bDZxIAzT_PDeY_N4yC9vrNFqOw1m5H3ufQlQGBna8iQaOMb-I9iOaWwiz1xiUKgQ" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEhfuDCN-ydp1pEzz98sEaYM9xaev8lWd_vGbCg13oO7OMpNj6JeuyS7JO6hpHZGj6Iyo92nA36FEP9lE4fL62qqhNbdQWH0NeV5F2asMGgJI1VZOWzuyyRbQ_76VL2bDZxIAzT_PDeY_N4yC9vrNFqOw1m5H3ufQlQGBna8iQaOMb-I9iOaWwiz1xiUKgQ" style="display: none;" /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;em style="font-family: inherit; text-align: left;"&gt;Posted by&amp;nbsp;&lt;/em&gt;&lt;span color="rgba(0, 0, 0, 0.85)" style="font-family: inherit; text-align: left;"&gt;&lt;i&gt;Matthew Forsythe, Director Product Management, Android App Safety&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span color="rgba(0, 0, 0, 0.85)" style="font-family: &amp;quot;.SF NS&amp;quot;;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8uIl1-KfLZrwHidsOE___Oj9aG4_AQ6_zTh_bHgdkdvz-U5BPf8z70g4DovGoGlnV112yZKniatxLkbzH6WAPpeq0svyL_H7I_zvGxr8YeeDFw0FCI4gd9TKG1eh5RCIYa2MJIS48rZlkuUUhy0Dv6R9s-aeQPV4UBXXb_UvW9csxnFxdtDNDgOtraP0" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1254" data-original-width="4210" src="https://blogger.googleusercontent.com/img/a/AVvXsEi8uIl1-KfLZrwHidsOE___Oj9aG4_AQ6_zTh_bHgdkdvz-U5BPf8z70g4DovGoGlnV112yZKniatxLkbzH6WAPpeq0svyL_H7I_zvGxr8YeeDFw0FCI4gd9TKG1eh5RCIYa2MJIS48rZlkuUUhy0Dv6R9s-aeQPV4UBXXb_UvW9csxnFxdtDNDgOtraP0=s16000" /&gt;&lt;/a&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8uIl1-KfLZrwHidsOE___Oj9aG4_AQ6_zTh_bHgdkdvz-U5BPf8z70g4DovGoGlnV112yZKniatxLkbzH6WAPpeq0svyL_H7I_zvGxr8YeeDFw0FCI4gd9TKG1eh5RCIYa2MJIS48rZlkuUUhy0Dv6R9s-aeQPV4UBXXb_UvW9csxnFxdtDNDgOtraP0" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;Android proves you don't have to choose between an open ecosystem and a secure one. Since&amp;nbsp;&lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/08/elevating-android-security.html"&gt;announcing&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;updated verification requirements, we've &lt;a href="https://android-developers.googleblog.com/2025/11/android-developer-verification-early.html"&gt;worked with the community&lt;/a&gt; to ensure these protections are robust yet respectful of platform freedom. We've heard from power users that they want to take educated risks to install software from unverified developers. Today, we're sharing details on a new advanced flow that provides this option.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/name&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDFnydrwIbLJ80C81Gb5lXmnd4nuK9R77M4hJvTw_RePRm5RdpFoNe4YG0DWT_6Hsmq4i3nwtRE7ca-a19hhuM46jZQGUWF7IcOEOknmMlcSE0mXyOmUkUmf3aWeUvWU1mut2IP0IlHYTakGLjahJpeLdQOGBs8Lb8A2QK2sG0Uc1_1DTPUObyGjLpdgU/s1920/slide%20v3%20(2).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="Graphic titled 'Sideloading is here to stay.' It shows a prompt with buttons for 'Don’t install' and 'Install anyway' next to text explaining that once risks are confirmed, users can install apps from unverified developers." border="0" data-original-height="800" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDFnydrwIbLJ80C81Gb5lXmnd4nuK9R77M4hJvTw_RePRm5RdpFoNe4YG0DWT_6Hsmq4i3nwtRE7ca-a19hhuM46jZQGUWF7IcOEOknmMlcSE0mXyOmUkUmf3aWeUvWU1mut2IP0IlHYTakGLjahJpeLdQOGBs8Lb8A2QK2sG0Uc1_1DTPUObyGjLpdgU/s16000/slide%20v3%20(2).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-size: large;"&gt;Advanced flow safeguards against coercion&lt;/span&gt;&lt;/name&gt;&lt;/h4&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;Android is built on choice. That is why we’ve developed the advanced flow – an approach that allows power users to maintain the ability to sideload apps from unverified developers.&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhspfxHEJXusQIuuaK5xbfTJHHpsHcXglbGs1kIK-R288TG9Y8zlTujkQ2JfSAjwxhPbyWqZlZSdCo6twkcD1oj7n30Adce7FG0-0LmF-tVMvkEJd_5CQ3TfRVhTM4A0pUfpTw-7AJxj0TYyAqm2IeHqSmKv5PuCWw5yrhBSzxsjec3Hszrog0wMrJUhVQ/s1920/260318_ADV%20flow%20chart_v5.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1080" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhspfxHEJXusQIuuaK5xbfTJHHpsHcXglbGs1kIK-R288TG9Y8zlTujkQ2JfSAjwxhPbyWqZlZSdCo6twkcD1oj7n30Adce7FG0-0LmF-tVMvkEJd_5CQ3TfRVhTM4A0pUfpTw-7AJxj0TYyAqm2IeHqSmKv5PuCWw5yrhBSzxsjec3Hszrog0wMrJUhVQ/s16000/260318_ADV%20flow%20chart_v5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;This flow is &lt;b&gt;a one-time&lt;/b&gt; process for power users – but it was designed carefully to prevent those in the midst of a scam attempt from being coerced by high pressure tactics to install malicious software. In these scenarios, scammers exploit fear – using threats of financial ruin, legal trouble, or harm to a loved one – to create a sense of extreme urgency. They stay on the phone with victims, coaching them to bypass security warnings and disable security settings before the victim has a chance to think or seek help. According to a 2025 &lt;a href="https://gasa.org/knowledge-base/blog/global-scams-on-the-rise-over-half-of-adults-worldwide-report-scam-encounters"&gt;report&lt;/a&gt; from the &lt;a href="https://gasa.org/"&gt;Global Anti-Scam Alliance&lt;/a&gt; (GASA), 57% of surveyed adults experienced a scam in the past year, resulting in a global consumer loss of $442 billion. Because the consequences of these scams that use sophisticated social engineering tactics are so severe, we have carefully engineered the advanced flow to provide the critical time and space needed to break the cycle of coercion.&lt;br /&gt;&lt;/span&gt;&lt;/name&gt;&lt;h3 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;How the advanced flow works for users&lt;/span&gt;&lt;/name&gt;&lt;/h3&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Enable developer mode in system settings&lt;/b&gt;: Activating this is &lt;/span&gt;&lt;a href="https://www.android.com/intl/en_uk/articles/enable-android-developer-settings/" style="font-family: inherit;"&gt;simple&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;. This prevents accidental triggers or "one-tap" bypasses often used in high-pressure scams.&lt;/span&gt;&lt;/name&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Confirm you aren't being coached: &lt;/b&gt;There is a quick check to make sure that no one is talking you into turning off your security. While power users know how to vet apps, scammers often pressure victims into disabling protections.&lt;/span&gt;&lt;/name&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Restart your phone and reauthenticate: &lt;/b&gt;This cuts off any remote access or active phone calls a scammer might be using to watch what you’re doing.&lt;/span&gt;&lt;/name&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Come back after the protective waiting period and verify: &lt;/b&gt;There is a one-time, one-day wait and then you can confirm that this is really you who’s making this change with our biometric authentication (fingerprint or face unlock) or device PIN. Scammers rely on manufactured urgency, so this breaks their spell and gives you time to think.&lt;/span&gt;&lt;/name&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Install apps:&lt;/b&gt; Once you confirm you understand the risks, you’re all set to install apps from unverified developers, with the option of enabling for 7 days or indefinitely. For safety, you’ll still see a warning that the app is from an unverified developer, but you can just tap “Install Anyway.”&lt;/span&gt;&lt;/name&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/name&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis2qzrN3la1xfuFPvwKStg8R76u58AZnJ4OoDwO-87e0lPMQKBvNrK8mCePsc-NztvxPG0dkbvAS0XUllxofkeq0EgQu839z8r_8Bip07wL81sQyxwawTqPc2qMFuHiAIupMi8xLsTpXnDZdrmgccr8RyiD1w51Ruc1UXCPHeOzXjpnA-4QoO0xGMopQk/s1920/Blog%20Post_Static_v2b.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1080" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis2qzrN3la1xfuFPvwKStg8R76u58AZnJ4OoDwO-87e0lPMQKBvNrK8mCePsc-NztvxPG0dkbvAS0XUllxofkeq0EgQu839z8r_8Bip07wL81sQyxwawTqPc2qMFuHiAIupMi8xLsTpXnDZdrmgccr8RyiD1w51Ruc1UXCPHeOzXjpnA-4QoO0xGMopQk/s16000/Blog%20Post_Static_v2b.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style="text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-family: inherit;"&gt;A secure Android for every developer&lt;/span&gt;&lt;/span&gt;&lt;/name&gt;&lt;/h4&gt;We know a "one size fits all" approach doesn't work for our diverse ecosystem. We want to ensure that identity verification isn't a barrier to entry, so we’re providing different paths to fit your specific needs. &lt;br /&gt;&lt;br /&gt;In addition to the advanced flow we’re building free, limited distribution accounts for students and hobbyists. This allows you to share apps with a small group (up to 20 devices) without needing to provide a government-issued ID or pay a registration fee. This ensures Android remains an open platform for learning and experimentation while maintaining robust protections for the broader community. &lt;br /&gt;&lt;br /&gt;Limited distribution accounts and advanced flow for users will be available in August before the new developer verification requirements take effect.&lt;br /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;/p&gt;&lt;/name&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;Visit our &lt;a href="https://developer.android.com/developer-verification"&gt;website&lt;/a&gt; for more details. We look forward to sharing more in the coming days and weeks. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://android-developers.googleblog.com/2026/03/android-developer-verification.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEhfuDCN-ydp1pEzz98sEaYM9xaev8lWd_vGbCg13oO7OMpNj6JeuyS7JO6hpHZGj6Iyo92nA36FEP9lE4fL62qqhNbdQWH0NeV5F2asMGgJI1VZOWzuyyRbQ_76VL2bDZxIAzT_PDeY_N4yC9vrNFqOw1m5H3ufQlQGBna8iQaOMb-I9iOaWwiz1xiUKgQ=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-1428204216774805640</guid><pubDate>Mon, 16 Mar 2026 17:00:00 +0000</pubDate><atom:updated>2026-03-17T12:14:03.174-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Design</category><title>Get inspired and take your apps to desktop</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEhmbWvPkRt-Ct7L8pQz2o6A0UAVHyyow0Dem-d85O6LzWeET1eLqdAvckAPqfRgX7pqc6tQHNkuOcHrY2Ir57rOqLBjhDxYcIvns9W8_I-n5fHRDp-YoVvmLjOkrQdMQgdw23zdC3HTtIKcU58VAIz_RHLwd23fQPvmhiZVuWxnmYzDjKFGIGwzi9fqTsE" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEhmbWvPkRt-Ct7L8pQz2o6A0UAVHyyow0Dem-d85O6LzWeET1eLqdAvckAPqfRgX7pqc6tQHNkuOcHrY2Ir57rOqLBjhDxYcIvns9W8_I-n5fHRDp-YoVvmLjOkrQdMQgdw23zdC3HTtIKcU58VAIz_RHLwd23fQPvmhiZVuWxnmYzDjKFGIGwzi9fqTsE" style="display: none;" /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="font-family: inherit; text-align: left;"&gt;Posted by Ivy Knight,&amp;nbsp;&lt;span style="color: #1b1c1d; white-space-collapse: preserve;"&gt;Senior Design Advocate, Android&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhrg94X_qNlnyeb0QcUNKI1xfiw-qy7g2DM9V7Ip3VgYoWTDHbCRj4QmKkfxC1OwoILcrDxajr7Q7Xo1Xn7bobS3umgXflfNOuFksunH2ahRy_yPwBuurv36_Yba6JYEymt_9ji8vzln4CUucOJTX7lF1q1Ck6AQMmxhImThWf4FOTSBP8Bixd5Y1cUJMQ" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1000" data-original-width="2000" src="https://blogger.googleusercontent.com/img/a/AVvXsEhrg94X_qNlnyeb0QcUNKI1xfiw-qy7g2DM9V7Ip3VgYoWTDHbCRj4QmKkfxC1OwoILcrDxajr7Q7Xo1Xn7bobS3umgXflfNOuFksunH2ahRy_yPwBuurv36_Yba6JYEymt_9ji8vzln4CUucOJTX7lF1q1Ck6AQMmxhImThWf4FOTSBP8Bixd5Y1cUJMQ=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We're thrilled to announce major updates to our design resources, giving you the comprehensive guidance you need to create polished, adaptive Android apps across all form factors! We now have &lt;/span&gt;&lt;a href="http://developer.android.com/design/ui/desktop" style="text-decoration-line: none;"&gt;&lt;span face="Roboto, sans-serif" style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Desktop Experience guidance&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; and a refreshed &lt;/span&gt;&lt;a href="http://developer.android.com/design/ui/gallery" style="text-decoration-line: none;"&gt;&lt;span face="Roboto, sans-serif" style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Android Design Gallery&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt;"&gt;&lt;span style="font-family: inherit; font-size: x-large; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;New Desktop Experience Design Guidance&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Your users are engaging with Android apps on more diverse devices than ever before—from phones and foldables to laptops and external monitors. A "desktop experience" occurs anytime your app is in a desktop-like mode, typically involving a non-touch input device like a keyboard or mouse, or another display such as a monitor (read more in the &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2026/03/android-devices-extend-seamlessly-to.html" style="text-decoration-line: none;"&gt;&lt;span face="Roboto, sans-serif" style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;connected display announcement&lt;/span&gt;&lt;/a&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;). This means designing for &lt;/span&gt;&lt;a href="https://developer.android.com/design/ui/mobile/guides/layout-and-content/adapt-layout" style="text-decoration-line: none;"&gt;&lt;span face="Roboto, sans-serif" style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;larger screens&lt;/span&gt;&lt;/a&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; and accommodating additional input states. These new design experiences are meant to maximize productivity for your users with higher information density, multi-tasking capabilities.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Dive into desktop experience guidance to help optimize your app with desktop design principles, input interaction guidance, and system UI considerations.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgOmkVFC5RkytvQMSLQlBu0XMlHn6oijfHaz3baPZdgOSSg7Urb2j6P8RvoUAVo8fCKvx7q4bbm3gnu64BlDaZ8h2CqDKAJ4KGr4YLdxXeMzUJ-usn2TVjG9YnV5DFhQpgmIiaxUYa0XTVWRvob1gTEGAokB7CjpqY4PUCpqJegkKRdjaInLblaVxyjed8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1040" data-original-width="2048" src="https://blogger.googleusercontent.com/img/a/AVvXsEgOmkVFC5RkytvQMSLQlBu0XMlHn6oijfHaz3baPZdgOSSg7Urb2j6P8RvoUAVo8fCKvx7q4bbm3gnu64BlDaZ8h2CqDKAJ4KGr4YLdxXeMzUJ-usn2TVjG9YnV5DFhQpgmIiaxUYa0XTVWRvob1gTEGAokB7CjpqY4PUCpqJegkKRdjaInLblaVxyjed8=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;span id="docs-internal-guid-e9b0755d-7fff-fa48-ae0a-4e14eba9adc0"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;The new guidance includes foundational guides where you can learn design principles that make desktop experiences unique, such as how multitasking is at the core of desktop experiences.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span face="Roboto, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span&gt;&lt;span face="Roboto, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgIO7TSNbCGvoDI0k5MQa39ohEOUGbzbv8nNdwXFrE4AmyG9yMIJ3HiFu-zx6GGhbXWUzgs07v3DE5J29soqvuolVecrsUaJR8gCb_AzK5iP6sWa9O42AjEj87GYUNAQwW6mGiJhzZky1BAgjrJnSWpOJr7wt24Ct2WggkKPqlUV8t1pUOFXyG94uASg2g" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1040" data-original-width="2048" src="https://blogger.googleusercontent.com/img/a/AVvXsEgIO7TSNbCGvoDI0k5MQa39ohEOUGbzbv8nNdwXFrE4AmyG9yMIJ3HiFu-zx6GGhbXWUzgs07v3DE5J29soqvuolVecrsUaJR8gCb_AzK5iP6sWa9O42AjEj87GYUNAQwW6mGiJhzZky1BAgjrJnSWpOJr7wt24Ct2WggkKPqlUV8t1pUOFXyG94uASg2g=s16000" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;When your app is in a desktop experience, keep in mind crucial interaction experiences, such as how to best design around unique input interactions, like choosing cursors from system provided cursors.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;For specialized actions not covered by system icons, consider creating a custom cursor icon, while ensuring it remains easy for users to find on the page.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; font-size: 11pt; text-align: center;"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgEhWteuBze3cY9e7HNKRX1ir5UVccl4NjHdIfFxqjb2SGb0hgyMNUeJZW65gJLYdqnDj9veYfZh1xMEjvBBhwVM8ZrGJAyNgRkamEmfITnsFV5s0GO9UP_qdpWX2e5H0AGxUC_IEauuskTDWEaBa14yFsqycTj5q4_HRulZHuk15geED5boeGgFnj8AX8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="804" data-original-width="2048" src="https://blogger.googleusercontent.com/img/a/AVvXsEgEhWteuBze3cY9e7HNKRX1ir5UVccl4NjHdIfFxqjb2SGb0hgyMNUeJZW65gJLYdqnDj9veYfZh1xMEjvBBhwVM8ZrGJAyNgRkamEmfITnsFV5s0GO9UP_qdpWX2e5H0AGxUC_IEauuskTDWEaBa14yFsqycTj5q4_HRulZHuk15geED5boeGgFnj8AX8=s16000" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-size: 11pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="docs-internal-guid-be0d8ec8-7fff-5f08-c433-5ed4ad2e143b"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;A desktop experience brings more multitasking features, like windowing, so expect your app to take on a variety of dimensions with a header bar.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; font-family: Roboto, sans-serif; font-size: 11pt; text-align: center;"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEg2xyFeKzVfo_nnizc6rOBNHYfG-6v8MgbMljICuqo0d4CHDMcM5X0cJNb2PX6Qsg-THC-SJk8CSrD3vY4Ug1WwXwyAXl9jNlXiX_ogB-jgSC0IdKZRcQ0Ugin3BIvyzdIAy3fFUAZvoAq1AXPFwjg7DmfBXm3Xu5id9-VMyHqUI4nHRJuoNzG5kdq5Yi4" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="494" data-original-width="2048" src="https://blogger.googleusercontent.com/img/a/AVvXsEg2xyFeKzVfo_nnizc6rOBNHYfG-6v8MgbMljICuqo0d4CHDMcM5X0cJNb2PX6Qsg-THC-SJk8CSrD3vY4Ug1WwXwyAXl9jNlXiX_ogB-jgSC0IdKZRcQ0Ugin3BIvyzdIAy3fFUAZvoAq1AXPFwjg7DmfBXm3Xu5id9-VMyHqUI4nHRJuoNzG5kdq5Yi4=s16000" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span id="docs-internal-guid-4c8cd88f-7fff-c3df-ec20-2c87ed5d286c"&gt;&lt;span style="background-color: white; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Desktops have much larger screens than mobile, and users typically interact using a mouse which has finer precision than a finger on a touch screen. This means you can present a UI with higher information density so your users can be more productive!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Roboto, sans-serif; font-size: 11pt; text-align: center;"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: white; color: #444746; font-size: 10.5pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Roboto, sans-serif; font-size: 11pt; text-align: center;"&gt;&lt;span face="Roboto, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: white; color: #444746; font-size: 10.5pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhPjTP-UG0hDACuXZXk_s-2x2F0pX8i5QavMhhV-eXgBBbsFAZs6LcYSgAqzvjAs6aJbi8Yg_AdbLDu74MS7XaSRMaYsHqHNKTOOH87zrLxudU3u77WFtwNQm_1UuCmU-Qv1-njDz144lySMOZ73v07sjKM7qIOn09gAzanEXvZ1gBEfNYuEZJdWzRUYJY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1396" data-original-width="2048" src="https://blogger.googleusercontent.com/img/a/AVvXsEhPjTP-UG0hDACuXZXk_s-2x2F0pX8i5QavMhhV-eXgBBbsFAZs6LcYSgAqzvjAs6aJbi8Yg_AdbLDu74MS7XaSRMaYsHqHNKTOOH87zrLxudU3u77WFtwNQm_1UuCmU-Qv1-njDz144lySMOZ73v07sjKM7qIOn09gAzanEXvZ1gBEfNYuEZJdWzRUYJY=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/name&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Want to get started quickly? Check out the walkthrough to go from mobile to desktop and design along with the updated &lt;/span&gt;&lt;a href="https://www.figma.com/community/file/1504631597454929506/design-an-adaptive-layout-with-material-design" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Adaptive Design lab&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-2c4282db-7fff-4961-bf1e-948f24dff3e8"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;For more on criteria that makes a differentiated quality app, read the newly updated &lt;/span&gt;&lt;a href="https://developer.android.com/docs/quality-guidelines/adaptive-app-quality" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;adaptive app quality guidelines&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; and &lt;/span&gt;&lt;a href="https://developer.android.com/adaptive-apps" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;adaptive developer guidance&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Introducing the Android Design Gallery&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: inherit;"&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Looking for inspiration? We've launched the &lt;/span&gt;&lt;a href="http://developer.android.com/design/ui/gallery" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Android Design Gallery&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;! This new resource is a living catalog of inspirational examples across multiple verticals, form factors, and UX patterns. We'll be continually adding new inspirational examples, so check back often to see the latest and greatest in Android design.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span&gt;&lt;span face="Roboto, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span&gt;&lt;span face="Roboto, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span&gt;&lt;span face="Roboto, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEg-5GkwnFP6qV3JNKJu7qPPCpko_iYAWh7v7Vq7Mqh1Nf-iYhERv2OZiHmqSCRXHxfZvAL7NA41EmlRr770ygS-Gig8lKeXN7_xl8tQWu9oVYGWnNMsmtrHBvWBX74IBYvq_fQ8M9mlsivGq1khxGVWCNzYDa6gsANZetp8UBlNQVn3xtQ9ePzHhYyhmAo" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1000" data-original-width="2000" src="https://blogger.googleusercontent.com/img/a/AVvXsEg-5GkwnFP6qV3JNKJu7qPPCpko_iYAWh7v7Vq7Mqh1Nf-iYhERv2OZiHmqSCRXHxfZvAL7NA41EmlRr770ygS-Gig8lKeXN7_xl8tQWu9oVYGWnNMsmtrHBvWBX74IBYvq_fQ8M9mlsivGq1khxGVWCNzYDa6gsANZetp8UBlNQVn3xtQ9ePzHhYyhmAo=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://android-developers.googleblog.com/2026/03/Get-inspired-and-take-your-apps-to-desktop.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEhmbWvPkRt-Ct7L8pQz2o6A0UAVHyyow0Dem-d85O6LzWeET1eLqdAvckAPqfRgX7pqc6tQHNkuOcHrY2Ir57rOqLBjhDxYcIvns9W8_I-n5fHRDp-YoVvmLjOkrQdMQgdw23zdC3HTtIKcU58VAIz_RHLwd23fQPvmhiZVuWxnmYzDjKFGIGwzi9fqTsE=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-6414050793855762752</guid><pubDate>Fri, 13 Mar 2026 17:00:00 +0000</pubDate><atom:updated>2026-03-17T12:11:04.775-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Product News</category><title>Room 3.0 - Modernizing the Room</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEg8gcR_wvFw952Oay_MFUwk5Pj9dK-Ja003RfUpedOtoxkHBzHMlZmf345lm1zjvyrnb6-UNyQDEPSkxL6PvGoypZU4mwZelZ8m71og7VrAciosPaZhVDk624K9b7EftFseuGtQ8xmR9C0IZf_-dMrKBqi_-q_kvSlTVtwHMFeJXpACwMfR7Pz-Z5f7uNo" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEg8gcR_wvFw952Oay_MFUwk5Pj9dK-Ja003RfUpedOtoxkHBzHMlZmf345lm1zjvyrnb6-UNyQDEPSkxL6PvGoypZU4mwZelZ8m71og7VrAciosPaZhVDk624K9b7EftFseuGtQ8xmR9C0IZf_-dMrKBqi_-q_kvSlTVtwHMFeJXpACwMfR7Pz-Z5f7uNo" style="display: none;" /&gt;&lt;div&gt;&lt;span&gt;&lt;span style="color: #1b1c1d; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;i&gt;&lt;span style="font-family: inherit;"&gt;Posted by Daniel Santiago Rivera, Software Engineer&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="color: #1b1c1d; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;i&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="color: #1b1c1d; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;i&gt;&lt;span style="font-family: inherit;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjRf3SI7fdOOau6mzOYnSqRng5ILGrQh96vj_efpOe9uzu7vo2weii05IoKa0KyycxPcjkbMSGTzRwY53LQEZ6n_4KdZYoUCedMWRyOMtJ8fEnnHg1nZHGhLhl4wvj7zWOXfEIQKIrP9-fp-TTmbBC3KhEmJrZCUG4mUGz7nbCbCMRksmcd96WiKJL7suw" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="476" data-original-width="1600" src="https://blogger.googleusercontent.com/img/a/AVvXsEjRf3SI7fdOOau6mzOYnSqRng5ILGrQh96vj_efpOe9uzu7vo2weii05IoKa0KyycxPcjkbMSGTzRwY53LQEZ6n_4KdZYoUCedMWRyOMtJ8fEnnHg1nZHGhLhl4wvj7zWOXfEIQKIrP9-fp-TTmbBC3KhEmJrZCUG4mUGz7nbCbCMRksmcd96WiKJL7suw=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The first alpha of Room 3.0 has been released! Room 3.0 is a major breaking version of the library that focuses on Kotlin Multiplatform (KMP) and adds support for JavaScript and WebAssembly (WASM) on top of the existing Android, iOS and JVM desktop support. &lt;br /&gt;&lt;br /&gt;In this blog we outline the breaking changes, the reasoning behind Room 3.0, and the various things you can do to migrate from Room 2.0.&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Breaking changes&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Room 3.0 includes the following breaking API changes: &lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Dropping SupportSQLite APIs:&lt;/b&gt; Room 3.0 is fully backed by the &lt;a href="https://developer.android.com/kotlin/multiplatform/sqlite#sqlite-driver"&gt;androidx.sqlite driver APIs&lt;/a&gt;. The SQLiteDriver APIs are KMP-compatible and removing Room’s dependency on Android's API simplifies the API surface for Android since it avoids having two possible backends.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;No more Java code generation:&lt;/b&gt; Room 3.0 exclusively generates Kotlin code. This aligns with the evolving Kotlin-first paradigm but also simplifies the codebase and development process, enabling faster iterations.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Focus on KSP:&lt;/b&gt; We are also dropping support for Java Annotation Processing (AP) and KAPT. Room 3.0 is solely a KSP (Kotlin Symbol Processing) processor, allowing for better processing of Kotlin codebases without being limited by the Java language.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Coroutines first:&lt;/b&gt; Room 3.0 embraces Kotlin coroutines, making its APIs coroutine-first. Coroutines is the KMP-compatible asynchronous framework and making Room be asynchronous by nature is a critical requirement for supporting web platforms.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;A new package&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To prevent compatibility issues with existing Room 2.x implementations and for libraries with transitive dependencies to Room (for example, WorkManager), Room 3.0 resides in a new package which means it also has a new maven group and artifact ids. For example, &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;androidx.room:room-runtime&lt;/span&gt;&amp;nbsp;has become &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;androidx.room3:room3-runtime&lt;/span&gt;&amp;nbsp;and classes such as &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;androidx.room.RoomDatabase&lt;/span&gt;&amp;nbsp;will now be located at &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;android.room3.RoomDatabase&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Kotlin and Coroutines First&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With no more Java code generation, Room 3.0 also requires KSP and the Kotlin compiler even if the codebase interacting with Room is in Java. It is recommended to have a multi-module project where Room usage is concentrated and the Kotlin Gradle Plugin and KSP can be applied without affecting the rest of the codebase.&lt;br /&gt;&lt;br /&gt;Room 3.0 also requires Coroutines and more specifically DAO functions have to be suspending unless they are returning a reactive type, such as a Flow. Room 3.0 disallows blocking DAO functions. See the &lt;a href="https://developer.android.com/kotlin/coroutines"&gt;Coroutines on Android documentation&lt;/a&gt; on getting started integrating Coroutines into your application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Migration to SQLiteDriver APIs&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the shift away from SupportSQLite, apps will need to migrate to the SQLiteDriver APIs. This migration is essential to leveraging the full benefits of Room 3.0, including allowing the use of the bundled SQLite library via the &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 14.6667px; white-space-collapse: preserve;"&gt;BundledSQLiteDriver&lt;/span&gt;. You can start migrating to the driver APIs today with Room 2.7.0+. We strongly encourage you to avoid any further usage of SupportSQLite. If you migrate your Room integrations to SQLiteDriver APIs, then the transition to Room 3.0 is easier since the package change mostly involves updating symbol references (imports) and might require minimal changes to call-sites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For a brief overview of the SQLiteDriver APIs, check out the &lt;a href="https://developer.android.com/kotlin/multiplatform/sqlite#sqlite-driver"&gt;SQLiteDriver APIs documentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For more details on how to migrate Room to use SQLiteDriver APIs, check out the official &lt;a href="https://developer.android.com/kotlin/multiplatform/room#migrate-from-support-sqlite"&gt;documentation to migrate from SupportSQLite&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Room SupportSQLite wrapper&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We understand completely removing SupportSQLite might not be immediately feasible for all projects. To ease this transition, Room 2.8.0, the latest version of the Room 2.0 series, introduced a new artifact called &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;androidx.room:room-sqlite-wrapper&lt;/span&gt;. This artifact offers a compatibility API that allows you to convert a &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 14.6667px; white-space-collapse: preserve;"&gt;RoomDatabase&lt;/span&gt;&amp;nbsp;into a &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 14.6667px; white-space-collapse: preserve;"&gt;SupportSQLiteDatabase&lt;/span&gt;, even if the SupportSQLite APIs in the database have been disabled due to a &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 14.6667px; white-space-collapse: preserve;"&gt;SQLiteDriver &lt;/span&gt;being installed. This provides a temporary bridge for developers who need more time to fully migrate their codebase. This artifact continues to exist in Room 3.0 as &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;androidx.room3:room3-sqlite-wrapper &lt;/span&gt;to enable the migration to Room 3.0 while still supporting critical SupportSQLite usage.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For example, invocations of&amp;nbsp;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;Database.openHelper.writableDatabase &lt;/span&gt;can be replaced by&amp;nbsp;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;roomDatabase.getSupportWrapper()&lt;/span&gt;&amp;nbsp;and a wrapper would be provided even if &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;setDriver()&lt;/span&gt;&amp;nbsp;is called on Room’s builder.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For more details check out the &lt;a href="https://developer.android.com/kotlin/multiplatform/room#migrate-room-sqlite-wrapper"&gt;room-sqlite-wrapper documentation&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Room and SQLite Web Support&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Support for the Kotlin Multiplatform targets JS and WasmJS and brings some of the most significant API changes. Specifically, many APIs in Room 3.0 are suspend functions since proper support for web storage is asynchronous. The SQLiteDriver APIs have also been updated to support the Web and a new web asynchronous driver is available in &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 14.6667px; white-space-collapse: preserve;"&gt;androidx.sqlite:sqlite-web&lt;/span&gt;. It is a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API"&gt;Web Worker&lt;/a&gt; based driver that enables persisting the database in the Origin private file system (OPFS).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For more details on how to set up Room for the Web check out the &lt;a href="https://developer.android.com/jetpack/androidx/releases/room3#3.0.0-alpha01"&gt;Room 3.0 release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Custom DAO Return Types&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Room 3.0 introduces the ability to add custom integrations to Room similar to RxJava and Paging. Through a new annotation API called &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;@DaoReturnTypeConverter&lt;/span&gt;&amp;nbsp;you can create your own integration such that Room’s generated code becomes accessible at runtime, this enables&amp;nbsp;&amp;nbsp;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;@Dao &lt;/span&gt;functions having their custom return types without having to wait for the Room team to add the support. Existing integrations are migrated to use this functionality and thus will now require for those who rely on it to add the converters to the &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;@Database&lt;/span&gt;&amp;nbsp;or &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;@Dao&lt;/span&gt;&amp;nbsp;definitions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For example, the Paging converter will be located in the &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;android.room3:room3-paging &lt;/span&gt;artifact and it's called &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;PagingSourceDaoReturnTypeConverter&lt;/span&gt;. Meanwhile for &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;LiveData&lt;/span&gt;&amp;nbsp;the converter is in &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;android.room3:room3-livedata&lt;/span&gt;&amp;nbsp;and is called &lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; white-space-collapse: preserve;"&gt;LiveDataReturnTypeConverter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For more details check out the DAO Return Type Converters section in the &lt;a href="https://developer.android.com/jetpack/androidx/releases/room3#3.0.0-alpha01"&gt;Room 3.0 release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Maintenance mode of Room 2.x&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since the development of Room will be focused on Room 3, the current Room 2.x version enters maintenance mode. This means that no major features will be developed but patch releases (2.8.1, 2.8.2, etc.) will still occur with bug fixes and dependency updates. The team is committed to this work until Room 3 becomes stable.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Final thoughts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are incredibly excited about the potential of Room 3.0 and the opportunities it unlocks for the Kotlin ecosystem. Stay tuned for more updates as we continue this journey!&lt;br /&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/room-30-modernizing-room.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEg8gcR_wvFw952Oay_MFUwk5Pj9dK-Ja003RfUpedOtoxkHBzHMlZmf345lm1zjvyrnb6-UNyQDEPSkxL6PvGoypZU4mwZelZ8m71og7VrAciosPaZhVDk624K9b7EftFseuGtQ8xmR9C0IZf_-dMrKBqi_-q_kvSlTVtwHMFeJXpACwMfR7Pz-Z5f7uNo=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-7285083120625706023</guid><pubDate>Fri, 13 Mar 2026 13:00:00 +0000</pubDate><atom:updated>2026-03-13T09:02:37.416-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android Developer Story</category><category domain="http://www.blogger.com/atom/ns#">case study</category><category domain="http://www.blogger.com/atom/ns#">JetpackCompose</category><category domain="http://www.blogger.com/atom/ns#">TikTok</category><title>TikTok reduces code size by 58% and improves app performance for new features with Jetpack Compose</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Z60YCSMY9q_UJiIs8kRtosnM1KKnKAebXEJ3dxmHmGOIFLcnaLDMWEYNs8v__mDZ0IU6zc5oYqcp0XFlfci4QHz22QQC3ZWQCnSjMjcMb-WJl5cR7-TK9Veca0tT__RlpTlEMdSHykoADDTmMTfbYdAUU2pMFzORNKwTQRXkhIP8vLo_aEPeb7s91kE/s1280/AANDDM_TikTokCompose_Header%20(1).png" property="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Z60YCSMY9q_UJiIs8kRtosnM1KKnKAebXEJ3dxmHmGOIFLcnaLDMWEYNs8v__mDZ0IU6zc5oYqcp0XFlfci4QHz22QQC3ZWQCnSjMjcMb-WJl5cR7-TK9Veca0tT__RlpTlEMdSHykoADDTmMTfbYdAUU2pMFzORNKwTQRXkhIP8vLo_aEPeb7s91kE/s1280/AANDDM_TikTokCompose_Header%20(1).png"&gt;&lt;/meta&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p style="font-style: italic;"&gt;&lt;em&gt;Posted by Ajesh R Pai, Developer Relations Engineer &amp;amp; Ben Trengrove, Developer Relations Engineer&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Z60YCSMY9q_UJiIs8kRtosnM1KKnKAebXEJ3dxmHmGOIFLcnaLDMWEYNs8v__mDZ0IU6zc5oYqcp0XFlfci4QHz22QQC3ZWQCnSjMjcMb-WJl5cR7-TK9Veca0tT__RlpTlEMdSHykoADDTmMTfbYdAUU2pMFzORNKwTQRXkhIP8vLo_aEPeb7s91kE/s1280/AANDDM_TikTokCompose_Header%20(1).png" style="clear: left; float: left; font-style: italic; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Z60YCSMY9q_UJiIs8kRtosnM1KKnKAebXEJ3dxmHmGOIFLcnaLDMWEYNs8v__mDZ0IU6zc5oYqcp0XFlfci4QHz22QQC3ZWQCnSjMjcMb-WJl5cR7-TK9Veca0tT__RlpTlEMdSHykoADDTmMTfbYdAUU2pMFzORNKwTQRXkhIP8vLo_aEPeb7s91kE/s16000/AANDDM_TikTokCompose_Header%20(1).png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-c2ee2dcc-7fff-9b3c-e6d4-e0dff1cda8ae"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically&amp;amp;" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;TikTok&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; is a global short-video platform known for its massive user base and innovative features. The team is constantly releasing updates, experiments, and new features for their users. Faced with the challenge of maintaining velocity while managing technical debt, the TikTok Android team turned to &lt;/span&gt;&lt;a href="https://developer.android.com/compose" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Jetpack Compose&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-45011a77-7fff-0d0b-a6b6-9997c9eb4244"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;The team wanted to enable faster, higher-quality iteration of product requirements. By leveraging Compose, the team sought to improve engineering efficiency by writing less code and reducing cognitive load, while also achieving better performance and stability. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span id="docs-internal-guid-f8f1e788-7fff-4161-60ea-09e36f8c01b6"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Streamlining complex UI to accelerate developer productivity&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-4a74ae24-7fff-ec85-2545-703dedad706f" style="font-family: inherit;"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;TikTok pages are often more complex than they appear, containing numerous layered conditional requirements. This complexity often resulted in difficult-to-maintain, sub-optimally structured View hierarchies and excessive View nesting, which caused performance degradation due to an increased number of measure passes.&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span id="docs-internal-guid-04088b7f-7fff-b3ee-201b-50b01201810e"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Compose offered a direct solution to this structural problem. &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-38fa3967-7fff-29d6-837a-13e64321a1d7"&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Furthermore, Compose’s &lt;/span&gt;&lt;a href="https://developer.android.com/develop/ui/compose/performance/phases" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;measurement strategy&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; helps reduce &lt;/span&gt;&lt;a href="https://developer.android.com/topic/performance/rendering/optimizing-view-hierarchies#double" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: italic; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;double taxation&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, making measure performance easier to optimize.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-b0643245-7fff-175f-9ece-994e856f2bc3"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;To improve developer productivity, TikTok’s central Design System team provides a component library for teams working on different app features.&amp;nbsp; The team observed that Development in Compose is simple; leveraging small composables is highly effective, while incorporating large UI blocks with conditional logic is both straightforward and has minimal overhead.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span id="docs-internal-guid-191bb6b1-7fff-13bd-dccb-767aac30e0d5"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA5bTNaPSetoHYdXSt87tK8sN4vcWlLcSNZgpJa_Y80EIBUGvkHpny1TMzC3UGGCc3O5-TyON2MwzFtdVvX1zXVG1b3ql8Pbc5jmLnlFvaNcv8kte8wRwGeUYOzhjtGgIo1QK9Umk8hClhZ9HUzE7PcSJNXa-ivQyLwD2IeT6YJR8nWWyoalFCl1FZNmc/s1280/AANDDM_TikTokCompose_Quote%20(1).png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA5bTNaPSetoHYdXSt87tK8sN4vcWlLcSNZgpJa_Y80EIBUGvkHpny1TMzC3UGGCc3O5-TyON2MwzFtdVvX1zXVG1b3ql8Pbc5jmLnlFvaNcv8kte8wRwGeUYOzhjtGgIo1QK9Umk8hClhZ9HUzE7PcSJNXa-ivQyLwD2IeT6YJR8nWWyoalFCl1FZNmc/s16000/AANDDM_TikTokCompose_Quote%20(1).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span id="docs-internal-guid-0d8802ec-7fff-4d3e-5cec-1172303c0d67"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Building a path forward through strategic migration&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt;By strategically adopting Jetpack Compose, TikTok was able to stay on top of technical debt, while also continuing to focus on creating great experiences for their users. The ability of Compose to handle conditional logic cleanly and streamline composition allowed the team to &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt;achieve up to a 78% reduction in page loading time on new or fully rewritten pages. &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt;This improvement was 20–30% in smaller cases, and 70–80% for full rewrites and new features. They also were able to &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt;reduce their code size by 58%&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt;,&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-align: center; vertical-align: baseline; white-space-collapse: preserve;"&gt;when compared to the same feature built in Views. &lt;/span&gt;&lt;span style="white-space-collapse: preserve;"&gt;The team has further shared a couple of learnings:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;TikTok team’s overall strategy was to incrementally migrate specific user journeys. This gave them an opportunity to migrate, confirm measurable benefits, then scale to more screens. They started with using Compose to simplify the overall structure in the QR code feature and saw the improvements. The team later expanded the migration to the Login and Sign-up experiences.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;The team shared some additional learnings:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;While checking performance during migration, the TikTok team found that using many small&lt;/span&gt;&lt;span style="background-color: transparent; color: #6aa84f; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;ComposeViews&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: #6aa84f; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;to replace elements inside a single &lt;/span&gt;&lt;a href="https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;ViewHolder&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, caused composition overhead. They achieved better results by expanding the migration to use one single ComposeView for the entire ViewHolder.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;When migrating a Fragment inside ViewPager, which has custom height logic and conditional logic to hide and show ui based on experiments, the performance wasn’t impacted. In this case, migrating the ViewPager to Composable performed better than migrating the Fragment.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-023e08df-7fff-2263-45b1-eb5bdef8fc12"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Jun Shen really likes that Compose "reduces the amount of code required for feature development, improves testability, and accelerates delivery". The team plans to steadily increase Compose adoption, making it their preferred framework in the long term. Jetpack Compose proved to be a powerful solution for improving both their developer experience and production metrics at scale.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt; text-align: left;"&gt;&lt;span id="docs-internal-guid-640ead5f-7fff-78f4-9477-4647d84e6543" style="font-weight: normal;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Get Started with Jetpack Compose&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span id="docs-internal-guid-69785354-7fff-a59a-b543-9031d037006b"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Learn more about how &lt;/span&gt;&lt;a href="https://developer.android.com/compose" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Jetpack Compose &lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;can help your team. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="font-style: italic;"&gt;&lt;/p&gt;&lt;/name&gt;</description><link>http://android-developers.googleblog.com/2026/03/tiktok-reduces-code-size-by-58.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Z60YCSMY9q_UJiIs8kRtosnM1KKnKAebXEJ3dxmHmGOIFLcnaLDMWEYNs8v__mDZ0IU6zc5oYqcp0XFlfci4QHz22QQC3ZWQCnSjMjcMb-WJl5cR7-TK9Veca0tT__RlpTlEMdSHykoADDTmMTfbYdAUU2pMFzORNKwTQRXkhIP8vLo_aEPeb7s91kE/s72-c/AANDDM_TikTokCompose_Header%20(1).png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-6594497695777420524</guid><pubDate>Wed, 11 Mar 2026 20:02:00 +0000</pubDate><atom:updated>2026-03-11T16:19:06.064-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android Developer</category><category domain="http://www.blogger.com/atom/ns#">Google Play</category><title>Level Up: Test Sidekick and prepare for upcoming program milestones</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEhHqPM2-RBM5j3cV3eESiQZ3eXq48YuwIq9h6IPFnanzV_FvkHTbTJPmQYC4LnXXTlIi44lD1xrRa2Iewr2TjbBbuQRkVe4ifLqKp0bL532NPC-MbNHQ_71Dy_Iz6YzAqqaL7MS5ZY1EipwhR9wfmsMRTQM8x4E2uIjC3o302FoAxifgxNTRADw4OBZabE" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEhHqPM2-RBM5j3cV3eESiQZ3eXq48YuwIq9h6IPFnanzV_FvkHTbTJPmQYC4LnXXTlIi44lD1xrRa2Iewr2TjbBbuQRkVe4ifLqKp0bL532NPC-MbNHQ_71Dy_Iz6YzAqqaL7MS5ZY1EipwhR9wfmsMRTQM8x4E2uIjC3o302FoAxifgxNTRADw4OBZabE" style="display: none;" /&gt;&lt;div class="separator"&gt;&lt;/div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="text-align: left; white-space-collapse: preserve;"&gt;Posted by Maru Ahues Bouza, PM Director, Games on Google Play&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhPiaEGrykHBl7WXNcPWhTCF0JfOOnhqYGUAMFW0tsUtUaiyOwqTMgLdDha8pwu3715ITpQNfaeGoc315T8eor5dBFDsXaBiiwQB8mXjf-rVMCdltiirly2WHpWsdfTX9LMHwESG6tyiDFByUW5HugC3rThlyF97BX1sFw0x45_kAi-ijEbG1s-GAEyCHI" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1253" data-original-width="4209" src="https://blogger.googleusercontent.com/img/a/AVvXsEhPiaEGrykHBl7WXNcPWhTCF0JfOOnhqYGUAMFW0tsUtUaiyOwqTMgLdDha8pwu3715ITpQNfaeGoc315T8eor5dBFDsXaBiiwQB8mXjf-rVMCdltiirly2WHpWsdfTX9LMHwESG6tyiDFByUW5HugC3rThlyF97BX1sFw0x45_kAi-ijEbG1s-GAEyCHI=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="docs-internal-guid-d80a8b48-7fff-127d-2630-18731d28c907"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Last September, we shared our vision for the future of Google Play Games grounded in a core belief: the best way to drive your game’s success is to deliver a &lt;/span&gt;&lt;a href="https://blog.google/products-and-platforms/platforms/google-play/curation-update-september-2025/" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;world-class player experience&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. We launched the &lt;/span&gt;&lt;a href="https://play.google.com/console/about/levelup/" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Google Play Games Level Up&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; program to recognize and reward great gaming experiences, while providing you with a powerful toolkit and new promotional opportunities to grow your games.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;The momentum since our announcement has been incredibly positive, with more than 600 million gamers now using Play Games Services every month. Developers are also finding success, with one-third of all game installs on the Play Store now coming from editorially-driven organic discovery. In fact, in 2025, &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Level Up features have driven over 2.5 billion incremental acquisitions for featured games, in addition to an average uplift of 25% in installs during the featuring windows&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Today, we're inviting you to start testing Play Games Sidekick to keep your players in the action, sharing new Play Console updates to optimize your reach, and helping you prepare for our upcoming program milestones.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span id="docs-internal-guid-496e5b99-7fff-73af-339d-56bd75972499"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Boost retention and immersion with Play Games Sidekick&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit; white-space-collapse: preserve;"&gt;Play Games Sidekick is a helpful in-game overlay that gives players instant access to relevant gaming information—like rewards, offers, achievements, and quest progress— keeping them immersed while driving higher engagement for developers.&amp;nbsp; It serves as a seamless bridge to the highly visible "You" tab, connecting your game to 160 million monthly active users already engaging there and doubles as an active gaming companion that enhances the player experience with helpful, AI-generated Game Tips.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/name&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhgliaPtU36k4b-7W7xcXYiWDTTPYZ-lqkXKLZ5xZ4BKSceFaS6thnQ81sF0AI1g-3L9azg1KEmwovns6qUYmZyClqcZwhigSsERTFvCVc5FjOX2-RhS4SoQ0cP2GaseLcvbN86J26rzL4IgAeydgf7mCl15lyLvZfmInWW35ww93rRsAcGZPb4ninRwEM" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="608" data-original-width="1080" src="https://blogger.googleusercontent.com/img/a/AVvXsEhgliaPtU36k4b-7W7xcXYiWDTTPYZ-lqkXKLZ5xZ4BKSceFaS6thnQ81sF0AI1g-3L9azg1KEmwovns6qUYmZyClqcZwhigSsERTFvCVc5FjOX2-RhS4SoQ0cP2GaseLcvbN86J26rzL4IgAeydgf7mCl15lyLvZfmInWW35ww93rRsAcGZPb4ninRwEM=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span id="docs-internal-guid-bd40bc46-7fff-7bc5-989b-da699c726847"&gt;&lt;span style="font-family: inherit;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Deep Rock Galactic: Survivor keeps players in the action &lt;/span&gt;&lt;span style="font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;with Play Games Sidekick &lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-8a77e67e-7fff-6b59-00d4-bb9f834d0425"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Today, Sidekick &lt;/span&gt;&lt;a href="https://play.google.com/store/apps/editorial?id=mc_games_editorialmd_gdc_sidekick_fcp" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;officially debuts in over 90 games&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, with the experience expanding to all Level Up titles later this year. But you don’t need to wait for the broader rollout to get your game ready. You can now&lt;/span&gt;&lt;a href="https://developer.android.com/games/pgs/play-games-sidekick#sidekick-beta" style="text-decoration-line: none;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;enable Sidekick through Play Console&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; to preview and test how your players will interact with features like Achievements, Streaks, Play Points Coupons, and Game Tips.&amp;nbsp; Upon completing your testing, be sure to push Sidekick for production to ensure your game meets the Level Up user experience guidelines.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEi3Oo-tJ4o55mkvY8Dbama3Tv2qh7ddFzmJMm2jRpgzf3LlpJ35YJn0rwXdW6I5KD5K1YArfp11mU1b3BXGYUzpoDhYw8pWkY8W_fact_5m-T_fxCbBDvniaevhTfAgsLKqc8Wr_fWITI1v9wJcwBG99gmyApc9EX7d5hvR0KVRrW2VLwzOckMuBGUv-NA" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1169" data-original-width="1440" height="519" src="https://blogger.googleusercontent.com/img/a/AVvXsEi3Oo-tJ4o55mkvY8Dbama3Tv2qh7ddFzmJMm2jRpgzf3LlpJ35YJn0rwXdW6I5KD5K1YArfp11mU1b3BXGYUzpoDhYw8pWkY8W_fact_5m-T_fxCbBDvniaevhTfAgsLKqc8Wr_fWITI1v9wJcwBG99gmyApc9EX7d5hvR0KVRrW2VLwzOckMuBGUv-NA=w640-h519" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Enable Play Games Sidekick in Play Console to begin testing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-0acee31a-7fff-f1af-cba7-3c4eb9d60ca7"&gt;&lt;b&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Optimize reach and operations with new Play Console updates&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;We are also rolling out two new Play Console updates to help you optimize your reach and streamline operations: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-7f236cc3-7fff-2dd6-c580-986688aa194a"&gt;&lt;span style="font-family: inherit;"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span id="docs-internal-guid-7f236cc3-7fff-2dd6-c580-986688aa194a"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Pre-reg device breakdowns:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; To aid launch decisions, you can now analyze the &lt;/span&gt;&lt;a href="https://play.google.com/console/developers/app/devices/dashboard" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;device distribution of your pre-registered audience&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; by key device attributes including Android version, RAM and SoC. This enables you to optimize game performance, minimum specs, and marketing spend for the players already waiting for your game. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;div class="separator" style="clear: both; font-size: 11pt; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhpGp_HUeKg8-QqeGHxAMoKuvGAkcKDKlNxwZYDphfEyDvb6_c9eDwHnoI9DVGx6YRAa4wKvostFCYpO_rtajNBuQEAtaT2IQ016TCks63QuVslph8f3KBvAbLlfbDk6QRl-Uj6tjDQltnVfwlcp_GKhBnALPCwtVRkobCAlWiw2-d3H17FDRTRsKMrCiY" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="608" data-original-width="1080" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEhpGp_HUeKg8-QqeGHxAMoKuvGAkcKDKlNxwZYDphfEyDvb6_c9eDwHnoI9DVGx6YRAa4wKvostFCYpO_rtajNBuQEAtaT2IQ016TCks63QuVslph8f3KBvAbLlfbDk6QRl-Uj6tjDQltnVfwlcp_GKhBnALPCwtVRkobCAlWiw2-d3H17FDRTRsKMrCiY=w640-h360" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-466f6ae7-7fff-0b34-5ddf-ede1dda47c68"&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-family: inherit;"&gt;Identify launch-day risks and optimize performance for your players &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;div style="font-style: italic; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;with new pre-registration device breakdowns&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ul style="font-style: italic; text-align: left;"&gt;&lt;li&gt;&lt;span id="docs-internal-guid-a6fd208f-7fff-9573-3c68-9b0344860389"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;Real-time feedback:&amp;nbsp; &lt;/span&gt;&lt;span style="font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;With&lt;/span&gt;&lt;a href="https://play.google.com/console/about/levelupplus/" style="text-decoration-line: none;"&gt;&lt;span style="color: black; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="color: #1155cc; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;Level Up+&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;span style="font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;our tier for high-performing games, qualifying titles can unlock&lt;/span&gt;&lt;a href="https://play.google.com/console/about/programs/promotionalcontent/" style="text-decoration-line: none;"&gt;&lt;span style="color: black; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="color: #1155cc; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;promotional content&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; featuring and tools like deep-links and audience targeting. While submissions must meet Play’s&lt;/span&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/12929944" style="text-decoration-line: none;"&gt;&lt;span style="color: black; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="color: #1155cc; font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;quality guidelines&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;, you no longer have to wait 24 hours to learn about issues. You can now get immediate feedback on quality whenever possible.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-c9aca957-7fff-b02d-9086-b1657270ae84"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Your 2026 checklist: Securing your Level Up benefits&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Today, all games on Google Play qualify for Google Play Games Level Up. However, in order to maintain access to Level Up benefits like Play Points offers, expanded APK size limits, Play Store collections and campaigns consideration, or access to high-visibility surfaces like You tab and Sidekick, you’ll need to &lt;/span&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;ensure your game meets user experience guidelines by their upcoming milestones:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;By July 2026:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span id="docs-internal-guid-1307cf82-7fff-128c-e8dd-9c498729b411"&gt;&lt;span style="font-family: inherit;"&gt;&lt;ul style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span id="docs-internal-guid-1307cf82-7fff-128c-e8dd-9c498729b411"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;Integrate &lt;/span&gt;&lt;span id="docs-internal-guid-7420fd60-7fff-e84e-f525-47d094969d01"&gt;&lt;a href="https://developer.android.com/games/pgs/play-games-sidekick" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Play Games Sidekick&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; to offer a quick and easy entry point to access rewards, offers, and achievements through an in-game overlay.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="docs-internal-guid-1307cf82-7fff-128c-e8dd-9c498729b411"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;Implement &lt;/span&gt;&lt;a href="https://developer.android.com/games/pgs/achievements" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;achievements&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; with Play Games Services, to support authentication with the modern Gamer Profile, and to keep players engaged across the lifespan of your game.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;By November 2026:&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span id="docs-internal-guid-0c9cdbdb-7fff-b0a4-2314-a4866ffa78bf"&gt;&lt;span style="font-family: inherit;"&gt;&lt;ul style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span id="docs-internal-guid-0c9cdbdb-7fff-b0a4-2314-a4866ffa78bf"&gt;&lt;b style="font-weight: bold;"&gt;Implement&amp;nbsp;&lt;span id="docs-internal-guid-09ad9a3d-7fff-7e26-f6c4-70a3bf7d4bca" style="font-weight: normal;"&gt;&lt;a href="https://developer.android.com/games/pgs/savedgames" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;cloud save&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;to enable progress sync across devices. &lt;/span&gt;&lt;/name&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/span&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Last week, &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2026/03/a-new-era-for-choice-and-openness.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;we announced that we’re working on an expanded Level Up program&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; that builds on our successful foundation to further improve gaming experiences. The update will introduce new requirements that will unlock additional benefits like lower service fees. Engaging with the program now ensures your work is strategically aligned with these future updates. We’ll share more details in the coming months.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;In the meantime, the path to your first program milestone begins today. By prioritizing these &lt;/span&gt;&lt;/span&gt;&lt;a href="https://play.google.com/console/about/levelup/#user-experience-guidelines" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;user experience guidelines&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt; now, you’re investing in the long-term value of your game and ensuring it’s built to thrive for every player. Head over to Play Console to start testing Sidekick and take the next step in your Level Up journey.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/level-up-your-game.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEhHqPM2-RBM5j3cV3eESiQZ3eXq48YuwIq9h6IPFnanzV_FvkHTbTJPmQYC4LnXXTlIi44lD1xrRa2Iewr2TjbBbuQRkVe4ifLqKp0bL532NPC-MbNHQ_71Dy_Iz6YzAqqaL7MS5ZY1EipwhR9wfmsMRTQM8x4E2uIjC3o302FoAxifgxNTRADw4OBZabE=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-4177946298080295317</guid><pubDate>Wed, 11 Mar 2026 20:02:00 +0000</pubDate><atom:updated>2026-03-11T16:17:00.173-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android Developer</category><category domain="http://www.blogger.com/atom/ns#">Google Play</category><title>Expanding our stage for PC and paid titles </title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEg6KHrDYp7F3Kk_iyF8JjavlleRAoBbKovhQ56XptIG4vRMsOKbJ6m23h-6paC4NrRrT_1Lc1jaXzOoJilIK3N0TNdhX6b7XLO_dPg-FmqxGxhGRBK7kLrGZP8Q0mKxku-592Yu_pCSG8xijIl0y2_nXrZ61llwg2qG5bx0WJ5EyGT3VQHR30Vm4LJAHp4" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEg6KHrDYp7F3Kk_iyF8JjavlleRAoBbKovhQ56XptIG4vRMsOKbJ6m23h-6paC4NrRrT_1Lc1jaXzOoJilIK3N0TNdhX6b7XLO_dPg-FmqxGxhGRBK7kLrGZP8Q0mKxku-592Yu_pCSG8xijIl0y2_nXrZ61llwg2qG5bx0WJ5EyGT3VQHR30Vm4LJAHp4" style="display: none;" /&gt;&lt;p&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;Posted by Aurash Mahbod, VP and GM, Games on Google Play&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQCnW_W5brtfrRBx87MJQvsKy_acuTekwnqekWqZk79j9keauWbJpxUX6vxc9zZgGySW9KlcwqsXtVVTdivw6zSgRFA58a4-aDHS70x39WxYx3xwrpw_qf1iZlyaWQkDnh5ZfivECG2-ytZmMEZbB_3wq5Pjaf4WDEn5w0B96DLEPXUyh_vN9Hhmp_QvA/s7194/Blog-Banner%20NO%20IP%20(1).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="2141" data-original-width="7194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQCnW_W5brtfrRBx87MJQvsKy_acuTekwnqekWqZk79j9keauWbJpxUX6vxc9zZgGySW9KlcwqsXtVVTdivw6zSgRFA58a4-aDHS70x39WxYx3xwrpw_qf1iZlyaWQkDnh5ZfivECG2-ytZmMEZbB_3wq5Pjaf4WDEn5w0B96DLEPXUyh_vN9Hhmp_QvA/s16000/Blog-Banner%20NO%20IP%20(1).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Play is proud to be the home of over 200,000 games—many of which defined the mobile-first era. But as cross-platform becomes the standard for players, we are evolving our ecosystem to match the scale of your ambitions. In recent years, we focused on elevating Android gaming quality while significantly &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/03/making-google-play-best-place-to-grow-pc-games.html" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;deepening our support for native PC titles&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="docs-internal-guid-3c4a8c60-7fff-5ffe-8019-122d303b193d"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We know that maximizing your game’s reach across different platforms is complex. The &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2026/03/level-up-your-game.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Level Up program&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;serves as your strategic roadmap, helping you prioritize optimizations that drive great experiences on Android. Building on this foundation, we’re doubling down on our investment to make Play the most accessible home for &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;every&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;category of play&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. We’re adding new tools for paid games and making the PC game discovery to purchase seamless. Keep reading to learn more about how we’re creating a &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;bigger stage for your games&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="450" src="https://www.youtube.com/embed/tuXjvBXjkw8" width="100%" youtube-src-id="tuXjvBXjkw8"&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="docs-internal-guid-10ad9e78-7fff-adeb-991b-3196a2590f9c"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Scale your discovery across mobile and PC platforms&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Building a bigger stage starts with making your games easier to find—and easier to buy—no matter which device your players prefer. We’re expanding your reach by bringing cross-platform discovery directly to the mobile storefront.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;With the new &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;PC section &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;in the Games tab, your PC titles gain high visibility placement among our most active mobile players.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="docs-internal-guid-9ed00bbc-7fff-f4ca-7f9a-6d30835317d1"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;The &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;PC badge &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ensures your cross-platform investment is recognized. This creates more opportunities to acquire players on mobile and transition them seamlessly to your high-fidelity PC experience.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipoz7AMpBS0gGND0i0wEXa0OfUNfblztjHAYD131yP9Q4igZXsbd_bw1JQvDPznDmJ9u7_FBg1_RbgxwU2qITXy0ChjotQacgowE2b_U5X3nJDypjL5Qw506X9uNNOJE8hGQan_LmhhfbTL8gBVoq8ly2DuyRYg9psw6m1P3g5uvDpsz6jyncukSx8HNE/s960/wishlist%20white%2016x9%20(2).gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="540" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipoz7AMpBS0gGND0i0wEXa0OfUNfblztjHAYD131yP9Q4igZXsbd_bw1JQvDPznDmJ9u7_FBg1_RbgxwU2qITXy0ChjotQacgowE2b_U5X3nJDypjL5Qw506X9uNNOJE8hGQan_LmhhfbTL8gBVoq8ly2DuyRYg9psw6m1P3g5uvDpsz6jyncukSx8HNE/s16000/wishlist%20white%2016x9%20(2).gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-c5efb680-7fff-cc34-1618-ffe873dfcf5a"&gt;&lt;div style="text-align: center;"&gt;&lt;i style="font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; white-space-collapse: preserve;"&gt;PC in the Games tab and PC badging expands your game’s reach&lt;/i&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span id="docs-internal-guid-4f00b0f5-7fff-4c99-2782-4d6057953739"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;With ‘&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;buy once play anywhere&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;’ pricing, we’re making it easier to sell your games across different devices.&amp;nbsp; If you choose to opt-in your mobile game for Google Play Games on PC, you can now offer a single price that covers both mobile and PC versions. We’re rolling out this feature in EAP with select games including &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Brotato: Premium&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;For PC-only games, players can now complete the &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;full purchase journey on Google Play Games on PC&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; with the same trusted security and privacy standards they expect from Google Play.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihc5_oMa2rIG6t681thpgdTzE_Wl6uTG4kFdVYKYHQfMGm1-qZatla37FsxIJKyOzM_e17U2_nY6PCIqvw90VXRK-x1V3Nu-fBPDtkU-xKJQAdc257cQBFD5YQ7u6cfHRrTELB4WFBRSA5RvIrL4k8aaTIyumn1ZRLJjbzoKSPotxna-xOB64yL4KeiIM/s960/Buy%20Once%20Play%20Anywhere%20(1)%20(1).gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="540" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihc5_oMa2rIG6t681thpgdTzE_Wl6uTG4kFdVYKYHQfMGm1-qZatla37FsxIJKyOzM_e17U2_nY6PCIqvw90VXRK-x1V3Nu-fBPDtkU-xKJQAdc257cQBFD5YQ7u6cfHRrTELB4WFBRSA5RvIrL4k8aaTIyumn1ZRLJjbzoKSPotxna-xOB64yL4KeiIM/s16000/Buy%20Once%20Play%20Anywhere%20(1)%20(1).gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-b69aa441-7fff-24e9-196a-1c6cb9e91eb0"&gt;&lt;div style="text-align: center;"&gt;&lt;i style="font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; white-space-collapse: preserve;"&gt;'&lt;/i&gt;&lt;i style="font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; white-space-collapse: preserve;"&gt;Buy&lt;/i&gt;&lt;i style="font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; white-space-collapse: preserve;"&gt; once play anywhere’ pricing to sell your games across devices&lt;/i&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-8cec9260-7fff-a07d-4d09-8f18ec18dad7"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Lower the purchase barrier with Game Trials&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;To help you convert high-intent buyers with less friction, we’re introducing &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Game Trials&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, a feature that enables players to experience your game for a limited time before making a purchase on mobile. Accessible directly from your game’s store listing, Game Trials provides a fast-track for players to start exploring your world with a single tap. Game trials are now in testing with select titles and we’ll roll it out to more titles soon.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;To ensure this is &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;low maintenance&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; for you, Game Trials is added directly into your Android App Bundle. This enables you to offer a high quality trial without the burden of a separate codebase or a demo version of your app.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Play ensures trials are &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;secure and seamless&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;. Game Trials are once per user and protects your game while the trial is active. When it ends, players can purchase your game and keep their progress.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;We’re also working on tools that will give you more &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;control&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;—such as specifying a custom time limit or an in-game event to conclude the trial.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEj-xQhowj-kUiN_9ZjibkD3uThK0gg3Migv1uPiAbcQ8h_LA7kWcB-jbLjxlYLhKFmJxblqg5Ry6RZsd4LcRqH4wcKHYwJ1UTZhKIiN-AH_A4P2syCwQn-9c-xQPcZlqkjsqkGqNP6DpiEG4tut3rDxrLTnfW_0auCmC-H67jNnE4DHRcdMpzCrX_HIsXM" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="540" data-original-width="960" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEj-xQhowj-kUiN_9ZjibkD3uThK0gg3Migv1uPiAbcQ8h_LA7kWcB-jbLjxlYLhKFmJxblqg5Ry6RZsd4LcRqH4wcKHYwJ1UTZhKIiN-AH_A4P2syCwQn-9c-xQPcZlqkjsqkGqNP6DpiEG4tut3rDxrLTnfW_0auCmC-H67jNnE4DHRcdMpzCrX_HIsXM" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span id="docs-internal-guid-e3a67817-7fff-cf89-ac44-a2118f6463ce"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;i&gt;Game Trial for DREDGE to help convert high-intent buyers&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Diversify your revenue with a dedicated player community on Play Pass&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;&lt;span id="docs-internal-guid-b221101e-7fff-4471-933b-a9e754398e55"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Play Pass&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; is another way to diversify revenue and grow your player audience. It has been a strong launchpad for indie hits such as &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Isle of Arrows&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Slay the Spire&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Dead Cells&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. With Play Pass, you can reach highly dedicated players seeking a more curated gaming experience, free of ads and in-app purchases. To help you deepen engagement, paid titles on Play Pass can now opt in to &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Play Games on PC&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: #222222; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;— making it easy for players to find and play your games on a larger screen. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Later this year, you can nominate your game through a streamlined opt-in process directly in Play Console.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0mu1B2Nb7dkiusLT0_4QLzlJ8Eqzv0bI6r6iz10XGBXKbo9K87qv9FuhYhXXkmyUqrTLSMJ5xcIfHO1Me9pdHK9SVtJY5lNtUrjUOJfm9DNIf4ZrW_CwdgrrYrq4fgaOkGuQGwjnOGmVGPh00giL8z-c8kCD-0XMPzhphuN4ddQzn7B8NcUblllqkG5Y/s1313/Blog-Quote%2001.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="732" data-original-width="1313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0mu1B2Nb7dkiusLT0_4QLzlJ8Eqzv0bI6r6iz10XGBXKbo9K87qv9FuhYhXXkmyUqrTLSMJ5xcIfHO1Me9pdHK9SVtJY5lNtUrjUOJfm9DNIf4ZrW_CwdgrrYrq4fgaOkGuQGwjnOGmVGPh00giL8z-c8kCD-0XMPzhphuN4ddQzn7B8NcUblllqkG5Y/s16000/Blog-Quote%2001.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh11Inautn7skXE7Q4zL7DObdhyphenhyphenKiGNdFV2GUYafSdYJZ71g9rGKepZdtDeJfA3zJkavYiIRXWYQy5thyphenhyphenE9SwdfbvLAkK88UFtVIajWdmQUg2KyE75mD1yPD5HMxWrV60rdvJOcTWnfY3Cj0l0b5DULmZsuuVrlNev1y5ldl78dys-Jf2Dra38FCQ1z534/s1313/Blog-Quote%2002.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="732" data-original-width="1313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh11Inautn7skXE7Q4zL7DObdhyphenhyphenKiGNdFV2GUYafSdYJZ71g9rGKepZdtDeJfA3zJkavYiIRXWYQy5thyphenhyphenE9SwdfbvLAkK88UFtVIajWdmQUg2KyE75mD1yPD5HMxWrV60rdvJOcTWnfY3Cj0l0b5DULmZsuuVrlNev1y5ldl78dys-Jf2Dra38FCQ1z534/s16000/Blog-Quote%2002.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Drive long term sales with Wishlists and Discounts&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span id="docs-internal-guid-62a34d75-7fff-af6d-e6cc-ce216d51d69b"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Wishlists &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;and &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Discounts&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; are one of the most effective ways to capture player intent and drive long term sales. To support players at every stage of their purchase journey, we’re integrating them directly into Play. Players can save titles to their wishlist and manage them from library settings. To keep your game top-of-mind, players will receive automated notifications for your latest discounts — starting with mobile and expanding soon to PC games.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTQuI3Clp4krABi-bTQPP8pQDG-Kitr-EiGY1XonSqDmg1QaBd5Uep6WIRw-MfIIbEryR_g1WO-SMQZVP7uwR2DlRuOlcZb-onSuemn0v-xsgKpmYP5acMPziNuSaSW9PP45eB_DQ7tJ8oK5pVKe24WuQLFMyd_VW_hF3RCOXNiU8Sevv6rOz72UZX5g/s1920/Wishlist%20with%20Monument%20Valley.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1080" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTQuI3Clp4krABi-bTQPP8pQDG-Kitr-EiGY1XonSqDmg1QaBd5Uep6WIRw-MfIIbEryR_g1WO-SMQZVP7uwR2DlRuOlcZb-onSuemn0v-xsgKpmYP5acMPziNuSaSW9PP45eB_DQ7tJ8oK5pVKe24WuQLFMyd_VW_hF3RCOXNiU8Sevv6rOz72UZX5g/s16000/Wishlist%20with%20Monument%20Valley.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-d6b8ee2d-7fff-e6e6-abc8-50422f50198a"&gt;&lt;div style="text-align: center;"&gt;&lt;i style="font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; white-space-collapse: preserve;"&gt;Wishlist and discount notifications drives long term sales, rolling out today&lt;/i&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;How leading studios are finding a new path to success on Play&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span id="docs-internal-guid-7b2a5427-7fff-3d01-a2f7-4da42a9d0570"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We’re thrilled to welcome &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sledding Game&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;9 Kings&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Potion Craft, Moonlight Peaks, an&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;d &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Low Budget Repairs&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to Play &lt;a href="#fn1" id="ref1"&gt;[1]&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. It marks an exciting expansion of our catalog and a step forward in our mission to build a bigger gaming ecosystem for all developers. This growth is fueled by our developer community, whose feedback continues to shape our roadmap and help us better support your success.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3kVPg47UJYqtY29ksPkEzo6qi7FProXJo9cRnfDA5npCh3WA3PyN2nefsixaXArpA3H3Fv0eKoE-CvVCujeFvwMHH3aAYps0VTA6sNwrQvMFf4eXcSDWffYHJXd8Mqzz7Gn-hNkLFUx7mXhoHq7jJWQkE7AblV26U2ZYYqnawYC2VHNen1KoLF4kDFU/s960/New%20Game%20Title%20Cards%20(1).gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="540" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3kVPg47UJYqtY29ksPkEzo6qi7FProXJo9cRnfDA5npCh3WA3PyN2nefsixaXArpA3H3Fv0eKoE-CvVCujeFvwMHH3aAYps0VTA6sNwrQvMFf4eXcSDWffYHJXd8Mqzz7Gn-hNkLFUx7mXhoHq7jJWQkE7AblV26U2ZYYqnawYC2VHNen1KoLF4kDFU/s16000/New%20Game%20Title%20Cards%20(1).gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;i style="font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; white-space-collapse: preserve;"&gt;Sledding Game, 9 Kings, Potion Craft, Moonlight Peaks, and Low Budget Repairs is coming to Play. &lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;That mission brings us to GDC and the &lt;/span&gt;&lt;a href="https://gdconf.com/awards-overview/" style="font-family: inherit; text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Independent Games Festival (IGF) Awards&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="#fn2" id="ref2"&gt;[2]&lt;/a&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, where the next generation of games awaits! This year, we’re inviting you to come along for the ride as we go backstage to chat with the finalists and winners, sharing the moments of triumph and the creative stories behind their development. &lt;/span&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Not joining us at GDC?&lt;/span&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; You can take the next step in your journey to &lt;/span&gt;&lt;a href="https://play.google.com/console/about/programs/new-to-play/" style="font-family: inherit; text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;launch your game on Google Play today&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJelMM88HZbMdWGbSZ52u5ygHJDWNuhIWwS8BdFmtbTmcvvgoDcJNRGTC98wWbMD5karacY2GSQxa7-iW4lOdin72SG0Lj83tL864yVkNGaecQ0L1Yn6K9niZAOAYvjQzO2F1kzPhz5gQepMCIYZQgOf9sUldapGHwYh_UwbnG0SeiF6vOYZjy9cGV6H4/s1313/Blog-Quote%2003.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="732" data-original-width="1313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJelMM88HZbMdWGbSZ52u5ygHJDWNuhIWwS8BdFmtbTmcvvgoDcJNRGTC98wWbMD5karacY2GSQxa7-iW4lOdin72SG0Lj83tL864yVkNGaecQ0L1Yn6K9niZAOAYvjQzO2F1kzPhz5gQepMCIYZQgOf9sUldapGHwYh_UwbnG0SeiF6vOYZjy9cGV6H4/s16000/Blog-Quote%2003.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-size: x-small;"&gt;1.&amp;nbsp;&lt;/span&gt;&lt;span face="Arial, sans-serif" style="font-size: 10pt; white-space-collapse: preserve;"&gt;Sledding Game, 9 Kings, Potion Craft, and Moonlight Peaks are coming to Google Play in 2026. Low Budget Repairs is scheduled for release in 2027. &lt;a href="#ref1" id="fn1"&gt;[Back]&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span face="Arial, sans-serif" style="white-space-collapse: preserve;"&gt;2.&lt;/span&gt;&lt;span face="Arial, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span face="Arial, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Independent Games Festival (IGF) Awards is hosted by Game Developers Conference (GDC) and requires a valid &lt;/span&gt;&lt;a href="https://gdconf.com/passes-pricing/" style="text-decoration-line: none;"&gt;&lt;span face="Arial, sans-serif" style="color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;GDC pass&lt;/span&gt;&lt;/a&gt;&lt;span face="Arial, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; for entry. &lt;a href="#ref2" id="fn2"&gt;[Back]&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://android-developers.googleblog.com/2026/03/building-a-bigger-stage.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEg6KHrDYp7F3Kk_iyF8JjavlleRAoBbKovhQ56XptIG4vRMsOKbJ6m23h-6paC4NrRrT_1Lc1jaXzOoJilIK3N0TNdhX6b7XLO_dPg-FmqxGxhGRBK7kLrGZP8Q0mKxku-592Yu_pCSG8xijIl0y2_nXrZ61llwg2qG5bx0WJ5EyGT3VQHR30Vm4LJAHp4=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-4869795524503408170</guid><pubDate>Tue, 10 Mar 2026 23:00:00 +0000</pubDate><atom:updated>2026-03-11T07:31:00.292-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Product News</category><title>Boosting Android Performance: Introducing AutoFDO for the Kernel</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEgZ9Foucs6Tse-xYRusArQZXBRqo2gVKjuSkRthBVzaZHwTsmAO0Tdr2be4dc7eiztwjYkJu-ovH81l3Mo6kCIcAf6fy0Gqm2_oFSLu_rvJxqjOOw4AOv75z7JR0aDGeyVHttbgptofW06086khahzQoRD70yxFFE04XL8SLgIqZkor9JYQj8mClhJprDM" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEgZ9Foucs6Tse-xYRusArQZXBRqo2gVKjuSkRthBVzaZHwTsmAO0Tdr2be4dc7eiztwjYkJu-ovH81l3Mo6kCIcAf6fy0Gqm2_oFSLu_rvJxqjOOw4AOv75z7JR0aDGeyVHttbgptofW06086khahzQoRD70yxFFE04XL8SLgIqZkor9JYQj8mClhJprDM" style="display: none;" /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="text-align: left;"&gt;Posted by&amp;nbsp;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #1b1c1d; white-space-collapse: preserve;"&gt;Yabin Cui, &lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #1b1c1d; white-space-collapse: preserve;"&gt;Software Engineer&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;p&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #1b1c1d; font-size: 11pt; white-space-collapse: preserve;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgZouspJuAK1hiYB3SOpSV12Vtx5kkLWWeeLorM6lwTCDx2sIzLyK4meq7iB-E764EDli1XgiDWaD7FjeXDsRGr5WecURE2EVV4ieHCHRwvHFOnNlTPhYMDcdeFKm5PBF4_VGTJOG5XjJf9BzF2wvVzdxo34vOhJgz6LnIBaNa0wea-IVrCGRfFI4dhfpo" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="2507" data-original-width="8419" src="https://blogger.googleusercontent.com/img/a/AVvXsEgZouspJuAK1hiYB3SOpSV12Vtx5kkLWWeeLorM6lwTCDx2sIzLyK4meq7iB-E764EDli1XgiDWaD7FjeXDsRGr5WecURE2EVV4ieHCHRwvHFOnNlTPhYMDcdeFKm5PBF4_VGTJOG5XjJf9BzF2wvVzdxo34vOhJgz6LnIBaNa0wea-IVrCGRfFI4dhfpo=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/name&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;We are the Android LLVM toolchain team. One of our top priorities is to improve Android performance through optimization techniques in the LLVM ecosystem. We are constantly searching for ways to make Android faster, smoother, and more efficient.&amp;nbsp;&lt;/span&gt;While much of our optimization work happens in userspace, the kernel remains the heart of the system. Today, we’re excited to share how we are bringing &lt;a href="https://research.google/pubs/autofdo-automatic-feedback-directed-optimization-for-warehouse-scale-applications/"&gt;Automatic Feedback-Directed Optimization (AutoFDO)&lt;/a&gt; to the Android kernel to deliver significant performance wins for users.&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="color: #1f1f1f; white-space: pre;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;What is AutoFDO?&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;During a standard software build, the compiler makes thousands of small decisions, such as whether to inline a function and which branch of a conditional is likely to be taken, based on static code hints.&lt;/span&gt;While these heuristics are useful, they don't always accurately predict code execution during real-world phone usage.&lt;br /&gt;&lt;br /&gt;AutoFDO changes this by using real-world execution patterns to guide the compiler. These patterns represent the most common instruction execution paths the code takes during actual use, captured by recording the CPU's branching history. While this data can be collected from fleet devices, for the kernel we synthesize it in a lab environment using representative workloads, such as running the top 100 most popular apps. We use a sampling profiler to capture this data, identifying which parts of the code are 'hot' (frequently used) and which are 'cold'.&amp;nbsp;&lt;/span&gt;When we rebuild the kernel with these profiles, the compiler can make much smarter optimization decisions tailored to actual Android workloads.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;To understand the impact of this optimization, consider these key facts:&lt;br /&gt;&lt;/span&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;On Android, the kernel accounts for about 40% of CPU time.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;We are already using AutoFDO to optimize native executables and libraries in the userspace, achieving about 4% cold app launch improvement and a 1% boot time reduction.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style="text-align: left;"&gt;&lt;span style="color: #1f1f1f; white-space: pre;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Real-World Performance Wins&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;We have seen impressive improvements across key Android metrics by leveraging profiles from controlled lab environments. These profiles were collected using app crawling and launching, and measured on Pixel devices across the 6.1, 6.6, and 6.12 kernels.&lt;br /&gt;&lt;br /&gt;The most noticeable improvements are listed below. Details on the AutoFDO profiles for these kernel versions can be found in the respective Android kernel repositories for &lt;a href="https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/gki/aarch64/afdo/"&gt;android16-6.12&lt;/a&gt; and &lt;a href="https://android.googlesource.com/kernel/common/+/refs/heads/android15-6.6/android/gki/aarch64/afdo/"&gt;android15-6.6&lt;/a&gt; kernels.&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; margin-left: 1em; margin-right: 1em; vertical-align: baseline;"&gt;&lt;span face="&amp;quot;Work Sans&amp;quot;, sans-serif" style="color: #1f1f1f; font-size: medium; font-weight: 700; white-space-collapse: preserve;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjtci3mLCc_GGuPr1gfSePimxXfUI1grqA9t7P2sFkCxJOKrrUV15xaF_PigMi7faJ_pFeN5hWYh5Rprptb1SiNDNVVvIl-a96BDw14nPyRU233gW2pK5xUU9OsLY5AauTDdAWjzHnQ_Xv78pb-v8Q4FxuDOnFAhhCqgDNCt-IFGLLufruRg3RdXBFiigs" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1811" data-original-width="3037" height="382" src="https://blogger.googleusercontent.com/img/a/AVvXsEjtci3mLCc_GGuPr1gfSePimxXfUI1grqA9t7P2sFkCxJOKrrUV15xaF_PigMi7faJ_pFeN5hWYh5Rprptb1SiNDNVVvIl-a96BDw14nPyRU233gW2pK5xUU9OsLY5AauTDdAWjzHnQ_Xv78pb-v8Q4FxuDOnFAhhCqgDNCt-IFGLLufruRg3RdXBFiigs=w640-h382" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1 style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span id="docs-internal-guid-7bcaac6d-7fff-0bbd-d33e-1f1fef657e40"&gt;&lt;/span&gt;&lt;/h1&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;These aren't just theoretical numbers. They translate to a snappier interface, faster app switching, extended battery life, and an overall more responsive device for the end user.&lt;div class="separator" style="clear: both;"&gt;&lt;span id="docs-internal-guid-6dc00779-7fff-a6b4-49e8-8d561c2d0948"&gt;&lt;h1 dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 24pt;"&gt;&lt;span face="&amp;quot;Work Sans&amp;quot;, sans-serif" style="color: #1f1f1f; font-size: x-large; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;How It Works: The Pipeline&lt;/span&gt;&lt;/h1&gt;&lt;/span&gt;Our deployment strategy involves a sophisticated pipeline to ensure profiles stay relevant and performance remains stable.&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;div class="separator" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEjoL1JktZ8i47JLyp1xsBdgJbunmtCLZp-e41Qg8TgaBI7__jAvRXd3XYc-86HSm3e1ZqouHNSWr26hljLdJ_nO7H1UYS918D_93Iw2xxf0oYoX_5tnvYMd0-fCyXWQfNXwymh-nf0ikBwU4_1tHLN2MxTF5sWwh8NLYG63CsLYtHqWbsNkL8KCLBPj-gI=w640-h360" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-674f415f-7fff-2e15-e912-2f8ec5467c4a"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;/p&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Step 1: Profile Collection&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;While we rely on our internal test fleet to profile userspace binaries, we shifted to a controlled lab environment for the &lt;/span&gt;&lt;a href="https://source.android.com/docs/core/architecture/kernel/generic-kernel-image" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Generic Kernel Image (GKI)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. Decoupling profiling from the device release cycle allows for flexible, immediate updates independent of deployed kernel versions. Crucially, tests confirm that this lab-based data delivers performance gains comparable to those from real-world fleets.&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Tools &amp;amp; Environment:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We flash test devices with the latest kernel image and use &lt;/span&gt;&lt;a href="https://android.googlesource.com/platform/system/extras/+/refs/heads/android16-qpr2-release/simpleperf/doc/" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;simpleperf&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; to capture instruction execution streams. This process relies on hardware capabilities to &lt;/span&gt;&lt;a href="https://android.googlesource.com/platform/prebuilts/simpleperf/+/refs/heads/mirror-goog-main-prebuilts/doc/collect_etm_data_for_autofdo.md" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;record branching history&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;, specifically utilizing &lt;/span&gt;&lt;a href="https://developer.arm.com/documentation/102856/0100/Embedded-Trace-Extension?lang=en" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;ARM Embedded Trace Extension (ETE)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; and &lt;/span&gt;&lt;a href="https://developer.arm.com/documentation/102856/0100/Trace-Buffer-Extension" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;ARM Trace Buffer Extension (TRBE)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; on Pixel devices.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Workloads: &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;We construct a representative workload using the top 100 most popular apps from the &lt;/span&gt;&lt;a href="https://android.googlesource.com/platform/test/app_compat/csuite/" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Android App Compatibility Test Suite (C-Suite)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;. To capture the most accurate data, we focus on:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="2" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: circle; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developer.android.com/topic/performance/vitals/launch-time" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;App Launching&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; Optimizing for the most visible user delays&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="2" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: circle; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://developer.android.com/studio/test/other-testing-tools/app-crawler" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;AI-Driven App Crawling&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; Simulating contiguous, evolving user interactions&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="2" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: circle; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;System-Wide Monitoring:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; Capturing not only foreground app activities, but also critical background workloads and inter-process communications&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Validation:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; This synthesized workload shows an &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;85% similarity&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; to execution patterns collected from our internal fleet.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Targeted Data:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; By repeating these tests sufficiently, we capture high-fidelity execution patterns that accurately represent real-world user interaction with the most popular applications. Furthermore, this extensible framework allows us to seamlessly integrate additional workloads and benchmarks to broaden our coverage.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;/p&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Step 2: Profile Processing&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We post-process the raw trace data to ensure it is clean, effective, and ready for the compiler.&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Aggregation:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We consolidate data from multiple test runs and devices into a single system view.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Conversion: &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;We &lt;/span&gt;&lt;a href="https://android.googlesource.com/platform/prebuilts/simpleperf/+/refs/heads/mirror-goog-main-prebuilts/doc/collect_etm_data_for_autofdo.md#a-complete-example_kernel" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;convert&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; raw traces into the AutoFDO profile format, filtering out unwanted symbols as needed.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Profile Trimming:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We trim profiles to remove data for "cold" functions, allowing them to use standard optimization. This prevents regressions in rarely used code and avoids unnecessary increases in binary size.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;/p&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Step 3: Profile Testing&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Before deployment, profiles undergo rigorous verification to ensure they deliver consistent performance wins without stability risks.&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Profile &amp;amp; Binary Analysis:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We strictly compare the new profile's content (including hot functions, sample counts, and profile size) against previous versions. We also use the profile to build a new kernel image, analyzing binaries to ensure that changes to the text section are consistent with expectations.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Performance Verification:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We run targeted benchmarks on the new kernel image. This confirms that it maintains the performance improvements established by previous baselines.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;/p&gt;&lt;h4 style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Continuous Updates&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Code naturally "drifts" over time, so a static profile would eventually lose its effectiveness. To maintain peak performance, we run the pipeline continuously to drive regular updates:&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Regular Refresh:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We refresh profiles in &lt;/span&gt;&lt;a href="https://source.android.com/docs/core/architecture/kernel/android-common" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Android kernel LTS branches&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; ahead of each GKI release, ensuring every build includes the latest profile data.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;div style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Future Expansion:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We are currently delivering these updates to the &lt;span style="color: #188038;"&gt;android16-6.12&lt;/span&gt; and &lt;span style="color: #188038;"&gt;android15-6.6&lt;/span&gt; branches and will expand support to newer GKI versions, such as the upcoming &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #188038; text-wrap-mode: wrap;"&gt;android17-6.18.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;div&gt;&lt;span id="docs-internal-guid-8a798ebc-7fff-0d6a-2784-1b52cbf704dc"&gt;&lt;div&gt;&lt;h1 style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span face="Work Sans, sans-serif" style="color: #1f1f1f; font-size: x-large;"&gt;&lt;span style="font-family: inherit; white-space-collapse: preserve;"&gt;&lt;b&gt;Ensuring Stability&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span id="docs-internal-guid-d43d1853-7fff-f35f-1799-ab58dc3a1260"&gt;&lt;span style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;A common question with profile-guided optimization is whether it introduces stability risks. Because AutoFDO primarily influences compiler heuristics, such as function inlining and code layout, rather than altering the source code's logic, it preserves the functional integrity of the kernel. This technology has already been proven at scale, serving as a standard optimization for Android platform libraries, ChromeOS, and Google’s own server infrastructure for years.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span&gt;&lt;span face="&amp;quot;Work Sans&amp;quot;, sans-serif" style="color: #1f1f1f; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-226a7529-7fff-3807-ba5d-0ed126851919"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;To further guarantee consistent behavior, we apply a "conservative by default" strategy. Functions not captured in our high-fidelity profiles are optimized using standard compiler methods. This ensures that the "cold" or rarely executed parts of the kernel behave exactly as they would in a standard build, preventing performance regressions or unexpected behaviors in corner cases.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span face="Work Sans, sans-serif" style="color: #1f1f1f; font-size: x-large;"&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;b&gt;Looking Ahead&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: #1f1f1f; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We are currently deploying AutoFDO across the &lt;/span&gt;&lt;span style="color: #188038; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;android16-6.12&lt;/span&gt;&lt;span style="color: #1f1f1f; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; and &lt;/span&gt;&lt;span style="color: #188038; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;android15-6.6&lt;/span&gt;&lt;span style="color: #1f1f1f; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; branches. Beyond this initial rollout, we see several promising avenues to further enhance the technology:&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Expanded Reach:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We look forward to deploying AutoFDO profiles to newer GKI kernel versions and additional build targets beyond the current &lt;/span&gt;&lt;span style="color: #188038; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;aarch64&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; support.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;GKI Module Optimization:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; Currently, our optimization is focused on the main kernel binary (&lt;/span&gt;&lt;span style="color: #188038; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;vmlinux&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;). Expanding AutoFDO to GKI modules could bring performance benefits to a larger portion of the kernel subsystem.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Vendor Module Support:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; We are also interested in supporting AutoFDO for vendor modules built using the &lt;/span&gt;&lt;a href="https://android.googlesource.com/kernel/build/+/refs/heads/main/kleaf/docs/ddk/main.md" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Driver Development Kit (DDK)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;. With support already available in our build system (&lt;/span&gt;&lt;a href="https://android.googlesource.com/kernel/build/+/refs/heads/main/kleaf/docs/kleaf.md" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Kleaf&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;) and profiling tools (&lt;/span&gt;&lt;a href="https://android.googlesource.com/platform/prebuilts/simpleperf/+/refs/heads/mirror-goog-main-prebuilts/doc/collect_etm_data_for_autofdo.md#A-complete-example_kernel-module-using-DDK" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;simpleperf&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;), this allows vendors to apply these same optimization techniques to their specific hardware drivers.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Broader Profile Coverage:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; There is potential to collect profiles from a wider range of Critical User Journeys (CUJs) to optimize them.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: #1f1f1f; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;By bringing AutoFDO to the Android kernel, we’re ensuring that the very foundation of the OS is optimized for the way you use your device every day.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span face="&amp;quot;Work Sans&amp;quot;, sans-serif" style="color: #1f1f1f; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/BoostingAndroid PerformanceIntroducingAutoFDO.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEgZ9Foucs6Tse-xYRusArQZXBRqo2gVKjuSkRthBVzaZHwTsmAO0Tdr2be4dc7eiztwjYkJu-ovH81l3Mo6kCIcAf6fy0Gqm2_oFSLu_rvJxqjOOw4AOv75z7JR0aDGeyVHttbgptofW06086khahzQoRD70yxFFE04XL8SLgIqZkor9JYQj8mClhJprDM=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-369873081353502592</guid><pubDate>Thu, 05 Mar 2026 18:03:00 +0000</pubDate><atom:updated>2026-03-06T07:48:49.662-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Media</category><category domain="http://www.blogger.com/atom/ns#">media3</category><category domain="http://www.blogger.com/atom/ns#">playback</category><category domain="http://www.blogger.com/atom/ns#">Preload Manager</category><title>Instagram and Facebook deliver instant playback and boost user engagement with Media3 PreloadManager</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEhXB1ZjhWJDefiDDfvJ95aSz_iWOvSXzkQVz1evjcKv55c3vJxaH7FOB0Uc59fze9dDoT2Z72nnWwC3uArzCP6M4Utl7_rZBJ-yhp13TUprrloyEc3UkixW8QDs1HVFrSqGTlXeumIzX06hR20HHqQFCk929EoEeN89Vxi37T7RKO-tDtzyeptShh7Ps7Y" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;i&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;Posted by&amp;nbsp;&lt;span style="white-space-collapse: preserve;"&gt;Mayuri Khinvasara Khabya, Developer Relations Engineer&lt;span style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;em style="background-color: white; box-sizing: inherit; color: #202124; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;(&lt;a href="https://www.linkedin.com/in/mayurikhinvasara" style="box-sizing: inherit; color: #1769e0; outline: 0px; text-decoration-color: rgb(23, 105, 224); text-decoration-line: initial; word-break: break-word;" target="_blank"&gt;LinkedIn&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://x.com/mayuri_k" style="box-sizing: inherit; color: #1769e0; outline: 0px; text-decoration-color: rgb(23, 105, 224); text-decoration-line: initial; word-break: break-word;" target="_blank"&gt;X&lt;/a&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEjvqIJhh25TyRVuCZCT-R3zfl9dQJus8N-NBHrgYMi-QjkC9KeuxbL4yI8hyehLJJUTa09306fj53Em4BrpTY81jLJfw_eNKR5oaU5LuAb_X9t2m329xwu5bi-bDqE0ergu5AXCPFjeRNJZial6lnuMk8AtA-Nh9J2EZYiQlM8WU5ja_1Z3em1ki1KIILI=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/name&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;In the dynamic world of social media, user attention is won or lost quickly. Meta apps (Facebook and Instagram) are among the world's largest social platforms and serve billions of users globally. For Meta, delivering videos seamlessly isn't just a feature, it's the core of their user experience. Short-form videos, particularly Facebook Newsfeed and Instagram Reels, have become a primary driver of engagement. They enable creative expression and rapid content consumption; connecting and entertaining people around the world.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;This blog post takes you through the journey of how Meta transformed video playback for billions by delivering true instant playback.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;The latency gap in short form videos&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Short-form videos lead to highly fast paced interactions as users quickly scroll through their feeds. Delivering a seamless transition between videos in an ever-changing feed introduces unique hurdles for instantaneous playback. Hence we need solutions that go beyond traditional disk caching and standard reactive playback strategies.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;The path forward with Media3 PreloadManager&lt;/b&gt;&lt;/span&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;To address the shifts in consumption habits from rise in short form content and the limitations of traditional long form playback architecture, Jetpack Media3 introduced &lt;/span&gt;&lt;a href="https://developer.android.com/media/media3/exoplayer/preloading-media/preloadmanager/create" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;PreloadManager&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. This component allows developers to move beyond disk caching, offering granular control and customization to keep media ready in memory before the user hits play. Read this &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/09/introducing-preloading-with-media3.html" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;blog series&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; to understand technical details about media playback with PreloadManager.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;How Meta achieved true instant playback&lt;/b&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;Existing Complexities&lt;/b&gt;&lt;/span&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Previously, Meta used a combination of warmup (to get players ready) and prefetch (to cache content on disk) for video delivery. While these methods helped improve network efficiency, they introduced significant challenges. Warmup required instantiating multiple player instances sequentially, which consumed significant memory and limited preloading to only a few videos. This high resource demand meant that a more scalable robust solution could be applied to deliver the instant playback expected on modern, fast-scrolling social feeds.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;Integrating Media3 PreloadManager&lt;/b&gt;&lt;/span&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To achieve truly instant playback, Meta's Media Foundation Client team integrated the Jetpack Media3 PreloadManager into Facebook and Instagram. They chose the &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; white-space-collapse: preserve;"&gt;DefaultPreloadManager&lt;/span&gt;&lt;span style="color: black; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; to unify their preloading and playback systems.&lt;/span&gt;&lt;span style="color: black; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&lt;span style="color: black; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;This integration required refactoring Meta's existing architecture to enable efficient resource sharing between the &lt;/span&gt;&lt;span id="docs-internal-guid-a17eab99-7fff-651b-2a81-4767ebd56a67"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;PreloadManager&lt;/span&gt;&lt;/span&gt;&lt;span id="docs-internal-guid-f09cc210-7fff-85c0-05b0-24d6fa73f097" style="font-family: inherit;"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;and &lt;/span&gt;&lt;span id="docs-internal-guid-7bf01f62-7fff-7e26-4e3b-8a8b01308fbc"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;ExoPlayer&lt;/span&gt;&lt;/span&gt;&lt;span id="docs-internal-guid-b190b565-7fff-9ec6-7adb-3c6a5be9a05a" style="font-family: inherit;"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;instances. This strategic shift provided a key architectural advantage: the ability to parallelize preloading tasks and manage many videos using a single player instance. This dramatically increased preloading capacity while eliminating the high memory complexities of their previous approach.&lt;/span&gt;&lt;/div&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhWJcwv1tyxDVkxTZGKgkxjZRJkqLaECAJEsrvn6zTCWbvAW6zGMc2jms8D89r1Zb1RtWCh4z0Cpg0gbQopXELi0j23zSdHbZWkwzJjbzCl5Fx8pGvrEHXrkUCLcrqs8iPgNIYWOomkx1k1oDzSurm6gvTrK9FdZdjxlhfRtGEwBTROO53edROKBxADbUU" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/a/AVvXsEhWJcwv1tyxDVkxTZGKgkxjZRJkqLaECAJEsrvn6zTCWbvAW6zGMc2jms8D89r1Zb1RtWCh4z0Cpg0gbQopXELi0j23zSdHbZWkwzJjbzCl5Fx8pGvrEHXrkUCLcrqs8iPgNIYWOomkx1k1oDzSurm6gvTrK9FdZdjxlhfRtGEwBTROO53edROKBxADbUU=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b id="docs-internal-guid-2593bf55-7fff-4aae-da61-85468d168885" style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 0pt;"&gt;&lt;span id="docs-internal-guid-001cb2df-7fff-9b32-3834-d7bd9cd59281" style="font-weight: normal;"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Optimization and Performance Tuning&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;The team then performed extensive testing and iterations to optimize performance across Meta's diverse global device ecosystem. Initial aggressive preloading sometimes caused issues, including increased memory usage and scroll performance slowdowns. To solve this, they fine-tuned the implementation by using careful memory measurements, considering device fragmentation, and tailoring the system to specific UI patterns.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;span id="docs-internal-guid-9dac049a-7fff-c4a3-8129-2a9063978181"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;Fine tuning implementation to specific UI patterns&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Meta applied different preloading strategies and tailored the behavior to match the specific UI patterns of each app:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Facebook Newsfeed&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;: The UI prioritizes the video currently coming into view. The manager preloads only the current video to ensure it starts the moment the user pauses their scroll. This "&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;current-only&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;" focus minimizes data and memory footprints in an environment where users may see many static posts between videos. &lt;/span&gt;&lt;span style="background-color: white; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;While the system is presently designed to preload just the video in view, it can be adjusted to also preload upcoming (future) videos.&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Instagram Reels&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;: This is a pure video environment where users swipe vertically. For this UI, the team implemented an "&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;adjacent preload&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;" strategy. The PreloadManager keeps the videos immediately after the current Reel ready in memory. This bi-directional approach ensures that whether a user swipes up or down, the transition remains instant and smooth. The result was a dramatic improvement in the Quality of Experience (QoE) including improvements in Playback Start and Time to First Frame for the user.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 4pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span id="docs-internal-guid-7e8c5981-7fff-f0a4-dfea-2d61bbce9e6f"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-family: inherit;"&gt;Scaling for a diverse global device ecosystem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Scaling a high-performance video stack across billions of devices requires more than just aggressive preloading; it requires intelligence. Meta faced initial challenges with memory pressure and scroll lag, particularly on mid-to-low-end hardware. To solve this, they built a &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Device Stress Detection&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; system around the Media3 implementation. The apps now monitor I/O and CPU signals in real-time. If a device is under heavy load, preloading is paused to prioritize UI responsiveness.&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;b id="docs-internal-guid-a92d63fa-7fff-560f-32f8-4244032f7693" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This device-aware optimization ensures that the benefit of instant playback doesn't come at the cost of system stability, allowing even users on older hardware to experience a smoother, uninterrupted feed.&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; color: black; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="separator" style="clear: both; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-align: center; vertical-align: baseline;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgSUviCSWAgpOLDDIfVs8SWxCZ_AHZqqHk4t7FSBFYZmrlsYPd1JBRTVg72S0SviQLOaAMUNoBaAcBmywW6jQ0SocI7n1KdlVrRUkux1qT9Jcb0rzfgk_I2L8arv9OPVyCz8JtDYoOXM3YHuu0mXrGm5hr-6zQdgQQjZS7gJ8ZlgooF5kZd80O4dR3S6Qg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEgSUviCSWAgpOLDDIfVs8SWxCZ_AHZqqHk4t7FSBFYZmrlsYPd1JBRTVg72S0SviQLOaAMUNoBaAcBmywW6jQ0SocI7n1KdlVrRUkux1qT9Jcb0rzfgk_I2L8arv9OPVyCz8JtDYoOXM3YHuu0mXrGm5hr-6zQdgQQjZS7gJ8ZlgooF5kZd80O4dR3S6Qg=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;p style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; color: black; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; color: black; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Architectural wins and code health&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Beyond the user-facing metrics, the migration to Media3 &lt;/span&gt;&lt;span id="docs-internal-guid-3d2ee295-7fff-2b0d-c892-eaeed5cb4dab" style="color: black;"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;PreloadManager&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;offered long-term architectural benefits. While the integration and tuning process needed multiple iterations to balance performance, the resulting codebase is more maintainable. The team found that the&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span id="docs-internal-guid-f1024bc2-7fff-4364-7fb5-86701ad07826" style="color: black;"&gt;&lt;span style="color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;PreloadManager &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;API integrated cleanly with the existing Media3 ecosystem, allowing for better resource sharing. For Meta, the adoption of Media3 PreloadManager was a strategic investment in the future of video consumption.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;By adopting preloading and adding device-intelligent gates, they successfully increased total watch time on their apps and improved the overall engagement of their global community.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Resulting impact on Instagram and Facebook&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The proactive architecture delivered immediate and measurable improvements across both platforms.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Facebook experienced &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;faster playback starts, decreased playback stall rates and a reduction in bad sessions&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; (like rebuffering, delayed start time, lower quality,etc) which overall resulted in higher watch time.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Instagram saw &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;faster playback starts and an increase in total watch time. Eliminating join latency &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;(the interval from the user's action to the first frame display) directly increased engagement metrics. The &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;fewer interruptions&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; due to reduced buffering meant users watched more content, which showed through engagement metrics.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: transparent; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHKGlhXkZNwanihjyCEOX3GU61jpJIY16O1znAWsT7j7eIwu0kgU36wNtzl6I5VY_Dho-yiLpqS5JYs51PnwVe52L_ndfBVEW45Ad26prAF_U2CF87Wea3swAcM5IijTVtqe430gmNFsM6zR8rrREnLKNEQ6ExkGWByaDKRAVeb6xsLlofjYFpZWvQlqs/w640-h360/ANDDM_MetaxMedia3_Inline.gif" /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Key engineering learnings at scale&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="docs-internal-guid-2ddc677a-7fff-cf8d-e8ed-5ffb75b95a68"&gt;&lt;p dir="ltr" style="background-color: transparent; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;As media consumption habits evolve, the demand for instant experiences will continue to grow. Implementing proactive memory management and optimizing for scale and device diversity ensures your application can meet these expectations efficiently.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="background-color: transparent; font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="background-color: transparent; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Prioritize intelligent preloading&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="background-color: transparent; line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Focus on delivering a reliable experience by minimizing stutters and loading times through preloading. Rather than simple disk caching, leveraging memory-level preloading ensures that content is ready the moment a user interacts with it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="background-color: transparent; font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="background-color: transparent; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Align your implementation with UI patterns&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="background-color: transparent; line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Customize preloading behavior as per your apps’s UI. For example, use a "current-only" focus for mixed feeds like Facebook to save memory, and an "adjacent preload" strategy for vertical environments like Instagram Reels.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 6pt; margin-top: 18pt; vertical-align: baseline;"&gt;&lt;span id="docs-internal-guid-6027ad33-7fff-946b-fcd1-4dd7d1164b31"&gt;&lt;div&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEjozGGon2E-_mvmUhNGbWXIM6eiS7lvfuVz_O0T4BZBmyQ-mln4swGcqeB2Mcmww2_HvTOTSPAZGOnR4UOCtQ_aMPmEoEOUKBEMWNQpZDoBRsSJ6BOwYgrNXUDbQJv-Nsk1UCq6HZ_gkZZr6QZjSMA8SBaGlZrCbnJrzgHVaTU9YXCJil8_-S7OpTIqh4s=w557-h640" /&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="docs-internal-guid-1b48a74f-7fff-d2ee-ac17-2a1085b98d9e" style="background-color: transparent; font-size: 12pt; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; text-decoration-line: none; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Leverage Media3 for long-term code health&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Integrating with Media3 APIs rather than a custom caching solution allows for better resource sharing between the player and the &lt;/span&gt;&lt;span id="docs-internal-guid-aa7b43f3-7fff-7df4-1ecf-0efa25aa28fa"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;PreloadManager&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;, enabling you to manage multiple videos with a single player instance. This results in a future-proof codebase that is easier for engineering teams to not only maintain and optimize over time but also benefit from the latest feature updates.&lt;/span&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Implement device aware optimizations&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;&lt;span style="font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Broaden your market reach by testing on various devices, including mid-to-low-end models. Use real-time signals like CPU, memory, and I/O to adapt features and resource usage dynamically.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/h2&gt;&lt;/div&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;h1 style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; line-height: 1.38; margin-bottom: 6pt; margin-top: 18pt; text-align: left; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span id="docs-internal-guid-5f0b6af6-7fff-54d2-5a9e-85a47531bdb6" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Learn More&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;To get started and learn more, visit&lt;/span&gt;&lt;a href="https://www.google.com/search?q=https://developer.android.com/guide/topics/media/media3/exoplayer/preload-manager" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Explore the Media3 &lt;/span&gt;&lt;a href="https://developer.android.com/media/media3/exoplayer/preloading-media/preloadmanager" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;PreloadManager documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Read the&lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/09/introducing-preloading-with-media3.html" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt; blog series&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; for advanced technical and implementation details.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="2" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: circle; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://android-developers.googleblog.com/2025/09/introducing-preloading-with-media3.html" style="text-decoration-line: none;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Part 1: Introducing Preloading with Media3&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="2" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: circle; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;a href="https://android-developers.googleblog.com/2025/09/a-deep-dive-into-media3-preloadmanager.html" style="text-decoration-line: none;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Part 2: A deep dive into Media3's PreloadManager&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Check out the &lt;/span&gt;&lt;a href="https://github.com/android/socialite" style="text-decoration-line: none;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;sample app&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; to see preloading in action.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p dir="ltr" style="background-color: transparent; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Now you know the secrets for instant playback. Go try them out!&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: transparent; color: black; font-family: inherit; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-line: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/name&gt;&lt;/div&gt;</description><link>http://android-developers.googleblog.com/2026/03/instagram-and-facebook-deliver-instant.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEjvqIJhh25TyRVuCZCT-R3zfl9dQJus8N-NBHrgYMi-QjkC9KeuxbL4yI8hyehLJJUTa09306fj53Em4BrpTY81jLJfw_eNKR5oaU5LuAb_X9t2m329xwu5bi-bDqE0ergu5AXCPFjeRNJZial6lnuMk8AtA-Nh9J2EZYiQlM8WU5ja_1Z3em1ki1KIILI=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-3306140509508298691</guid><pubDate>Thu, 05 Mar 2026 14:03:00 +0000</pubDate><atom:updated>2026-03-05T09:18:53.544-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">Android Bench</category><category domain="http://www.blogger.com/atom/ns#">Gemini</category><category domain="http://www.blogger.com/atom/ns#">LLM</category><title>Elevating AI-assisted Android development and improving LLMs with Android Bench</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM9Lw9I9lO2TvhpJPv1mSMJWa6kL_wDlPFWQttGnvuRrdxU5ZUGKL5kenVxnax2XdpzB6rUCwMv9SSlkczltnJSS2wlYRbHJMwGfwioGFahoyt4FiS4IxqETrhSDR0fxQ1wOlO9v74nLKSWMHlSa-mOqzd9ku6NY9zqf_3EgbfnNyVSSNansvhzLmv_pk/s1235/Android_Bench_MetadataCard_dark_v2.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM9Lw9I9lO2TvhpJPv1mSMJWa6kL_wDlPFWQttGnvuRrdxU5ZUGKL5kenVxnax2XdpzB6rUCwMv9SSlkczltnJSS2wlYRbHJMwGfwioGFahoyt4FiS4IxqETrhSDR0fxQ1wOlO9v74nLKSWMHlSa-mOqzd9ku6NY9zqf_3EgbfnNyVSSNansvhzLmv_pk/s1235/Android_Bench_MetadataCard_dark_v2.png" style="display: none;" /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: white; color: #202124; font-size: 10pt; font-style: italic; white-space-collapse: preserve;"&gt;Posted by Matthew McCullough, VP of Product Management, Android Developer&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img alt="" data-original-height="1254" data-original-width="4210" src="https://blogger.googleusercontent.com/img/a/AVvXsEjjrFCLIkfhJMOhRG5Dv6I_U81PgMsl5EfIIxyebdP0v5KOmscclKSv5nboK_fILjxmW0M2lRtKImKVBr5EwfH8HxGTh4t0P8Uaxums2gMDm-qYhpv7GFyzkHb1N0PjPgo1zFX1t-d3FzWEfMvzup09kVl4otUKI7qXYkmihxz98T4sZM7Kt4qiFXB9Xb8=s16000" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/name&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We want to make it faster and easier for you to build high-quality Android apps, and one way we’re helping you be more productive is by putting AI at your fingertips. We know you want AI that truly understands the nuances of the Android platform, which is why we’ve been measuring how LLMs perform Android development tasks. Today we released the first version of &lt;/span&gt;&lt;a href="http://d.android.com/bench" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Android Bench&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, our official leaderboard of LLMs for Android development.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Our goal is to provide model creators with a benchmark to evaluate LLM capabilities for Android development. By establishing a clear, reliable baseline for what high quality Android development looks like, we’re helping model creators identify gaps and accelerate improvements—which empowers developers to work more efficiently with a wider range of helpful models to choose for AI assistance—which ultimately will lead to higher quality apps across the Android ecosystem.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Designed with real-world Android development tasks&lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We created the benchmark by curating a task set against a range of common Android development areas. It is composed of real challenges of varying difficulty, sourced from public GitHub Android repositories. Scenarios include resolving breaking changes across Android releases, domain-specific tasks like networking on wearables, and migrating to the latest version of Jetpack Compose, to name a few.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Each evaluation attempts to have an LLM fix the issue reported in the task, which we then verify using unit or instrumentation tests. This model-agnostic approach allows us to measure a model’s ability to navigate complex codebases, understand dependencies, and solve the kind of problems you encounter every day.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We validated this methodology with several LLM makers, including JetBrains. &lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;/name&gt;&lt;blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit; font-size: medium;"&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;“&lt;/span&gt;&lt;span style="font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Measuring AI’s impact on Android is a massive challenge, so it’s great to see a framework that’s this sound and realistic. While we’re active in benchmarking ourselves, Android Bench is a unique and welcome addition. This methodology is exactly the kind of rigorous evaluation Android developers need right now.”&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; &lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;/name&gt;&lt;/blockquote&gt;&lt;blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-size: medium; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;- Kirill Smelov, Head of AI Integrations at JetBrains.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;/name&gt;&lt;/blockquote&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;The first Android Bench results&lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;For this initial release, we wanted to purely measure model performance and not focus on agentic or tool use. The models were able to successfully complete 16-72% of the tasks. This is a wide range that demonstrates some LLMs already have a strong baseline for Android knowledge, while others have more room for improvement. Regardless of where the models are at now, we’re anticipating continued improvement as we encourage LLM makers to enhance their models for Android development.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;The LLM with the highest average score for this first release is Gemini 3.1 Pro, followed closely by Claude Opus 4.6. You can try all of the models we evaluated for AI assistance for your Android projects by using API keys in the latest stable version of &lt;/span&gt;&lt;a href="http://d.android.com/studio" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Android Studio&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://d.android.com/bench" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="780" data-original-width="1230" src="https://blogger.googleusercontent.com/img/a/AVvXsEgB5Z_MUOVYvlhPDBVcMmDV-j2BnelyjSAmLHNWHlFpxGMMe31OholXWyC8mRYgmhYkYIKQ-XFsimkWumUP_gD3ka3dpq3FQlENoHNMs0WuKYyxwuDbuPOKcZkC3kgBzH0ItdYojvERccEuusnflIE2xlcmYOHFXUgQVXYeG3TvZY58P1h3ui_uYf09jx8=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/name&gt;&lt;/name&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Providing developers and LLM makers with transparency&lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We value an open and transparent approach, so we made &lt;/span&gt;&lt;a href="http://d.android.com/bench/methodology" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;our methodology&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, dataset, and test harness &lt;/span&gt;&lt;span id="docs-internal-guid-405670bd-7fff-0bcb-0b90-664d3f8e4f47"&gt;&lt;a href="https://github.com/android-bench/android-bench" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;publicly available on GitHub&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;One challenge for any public benchmark is the risk of data contamination, where models may have seen evaluation tasks during their training process. We have taken measures to ensure our results reflect genuine reasoning rather than memorization or guessing, including a thorough manual review of agent trajectories, or the integration of a canary string to discourage training.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Looking ahead, we will continue to evolve our methodology to preserve the integrity of the dataset, while also making improvements for future releases of the benchmark—for example, growing the quantity and complexity of tasks.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We’re looking forward to how &lt;/span&gt;&lt;a href="http://d.android.com/bench" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Android Bench&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; can improve AI assistance long-term. Our vision is to close the gap between concept and quality code. We're building the foundation for a future where no matter what you imagine, you can build it on Android.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://android-developers.googleblog.com/2026/03/elevating-ai-assisted-androi.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM9Lw9I9lO2TvhpJPv1mSMJWa6kL_wDlPFWQttGnvuRrdxU5ZUGKL5kenVxnax2XdpzB6rUCwMv9SSlkczltnJSS2wlYRbHJMwGfwioGFahoyt4FiS4IxqETrhSDR0fxQ1wOlO9v74nLKSWMHlSa-mOqzd9ku6NY9zqf_3EgbfnNyVSSNansvhzLmv_pk/s72-c/Android_Bench_MetadataCard_dark_v2.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-5874645757217138760</guid><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><atom:updated>2026-03-05T16:02:20.347-08:00</atom:updated><title>Battery Technical Quality Enforcement is Here:  How to Optimize Common Wake Lock Use Cases</title><description>&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEgRm9lMeuDuwYAvqKSYCHyVs4CLxaExuj_bede6zhfp_58-RjXoeJZA1ijfeSiEZxwqeIzX7nBOsFQKAIqrzcKA6XwR3XuAKuMm5r7C716YN_0c_pl7p56nZyRMgJK0EdbZDhnYKXrfHfiT1bUh4YZIxIWz2ueW_LwWcbMHO-rg_GJh2qeQhc_BaGPvHe4" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEgRm9lMeuDuwYAvqKSYCHyVs4CLxaExuj_bede6zhfp_58-RjXoeJZA1ijfeSiEZxwqeIzX7nBOsFQKAIqrzcKA6XwR3XuAKuMm5r7C716YN_0c_pl7p56nZyRMgJK0EdbZDhnYKXrfHfiT1bUh4YZIxIWz2ueW_LwWcbMHO-rg_GJh2qeQhc_BaGPvHe4" style="display: none;" /&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="text-align: left;"&gt;Posted by Alice Yuan, Senior Developer Relations Engineer&lt;/i&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfZatQInwILXV3U2FjUJUucu3-Z4aqYt6yT8HkQHpYo-Hd8JWVMaKbI7ffYIf4WLHKG9ZROPVpRZIsLTk8wCyKO6oQdYF-x4Z8VQXzWGWHId-cLIEcak5bEgDa1qkbBiJOk6FiDRw01g9a2zFrhUVweZrTayY5t2WnDe1oOYM5syLGJMm6S2ISkBIOt9I/s1600/Android_Battery%20Performance%20Blog.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="477" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfZatQInwILXV3U2FjUJUucu3-Z4aqYt6yT8HkQHpYo-Hd8JWVMaKbI7ffYIf4WLHKG9ZROPVpRZIsLTk8wCyKO6oQdYF-x4Z8VQXzWGWHId-cLIEcak5bEgDa1qkbBiJOk6FiDRw01g9a2zFrhUVweZrTayY5t2WnDe1oOYM5syLGJMm6S2ISkBIOt9I/s16000/Android_Battery%20Performance%20Blog.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;In recognition that excessive battery drain is top of mind for Android users, Google has been taking significant steps to help developers build more power-efficient apps. On &lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;March 1st, 2026&lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, Google Play Store began rolling out the &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/11/raising-bar-on-battery-performance.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;wake lock technical quality treatments&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; to improve battery drain. This treatment will roll out gradually to impacted apps over the following weeks. Apps that consistently exceed the "Excessive Partial Wake Lock" threshold in Android vitals may see tangible impacts on their store presence, including &lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;warnings on their store listing&lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; and exclusion from discovery surfaces such as recommendations.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="border: none; display: inline-block; height: 401px; margin-left: 1em; margin-right: 1em; overflow: hidden; width: 448px;"&gt;&lt;img height="401" src="https://blogger.googleusercontent.com/img/a/AVvXsEjxi5LN9jJL5ahEjAeFcxwmXqCGq8ubaTWRboN_VNk8I3WiisScaezwEuoKVw6__OXCH3peSSRoC9xuexlelx32CCK8rXusqjAQCFlwo4YSBJTOMkR8_GZ7BS91k_k9AFpOf0iUsWhnkW1vlH5mL_LQGRP86sYHLuV0GK3PQuEwgBDpRyzsdHFBnc7dkKE" style="margin-left: 0px; margin-top: 0px;" width="448" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span id="docs-internal-guid-cf77c5b5-7fff-a6f7-9a5e-3bc02f610d51"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-dbab5e9f-7fff-8bf9-f4d3-5e964864affa"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face="Google Sans, sans-serif" style="font-size: 11pt;"&gt;&lt;span id="docs-internal-guid-edeee6d2-7fff-ebcb-d009-ae67e9a2b867"&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Users may see a warning on your store listing if your app exceeds the bad behavior threshold. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This initiative elevated battery efficiency to a core vital metric alongside stability metrics like crashes and ANRs. The "bad behavior threshold" is defined as holding a non-exempted partial wake lock for at least &lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;two hours&lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; on average while the screen is off in more than &lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;5% of user sessions &lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;in the &lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;past 28 days&lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. A wake lock is exempted if it is a system held wake lock that offers clear user benefits that cannot be further optimized, such as audio playback, location access, or user-initiated data transfer. You can view the full definition of excessive wake locks in our &lt;/span&gt;&lt;a href="https://developer.android.com/topic/performance/vitals/excessive-wakelock" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Android vitals documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-0d099af6-7fff-5434-1a0a-07846203dadc"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;As part of our ongoing initiative to improve battery life across the Android ecosystem, we have analyzed thousands of apps and how they use partial wake locks. While wake locks are sometimes necessary, we often see apps holding them inefficiently or unnecessarily, when more efficient solutions exist. This blog will go over the most common scenarios where excessive wake locks occur and our recommendations for optimizing wake locks. &lt;/span&gt;&lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;We have already seen measurable success from partners like &lt;/span&gt;&lt;/span&gt;&lt;span id="docs-internal-guid-01b0a609-7fff-8fcf-6818-4b3826032c14"&gt;&lt;a href="https://android-developers.googleblog.com/2026/03/how-whoop-decreased-excessive-partial.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;WHOOP&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, who leveraged these recommendations to optimize their background behavior.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;span id="docs-internal-guid-85a256ce-7fff-bfe5-3a54-16ce5c66a035"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;b&gt;Using a foreground service vs partial wake locks&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;We’ve often seen developers struggle to understand the difference between two concepts when doing background execution: foreground service and partial wake locks.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;A foreground service is a lifecycle API that signals to the system that an app is performing user-perceptible work and should not be killed to reclaim memory, but it does not automatically prevent the CPU from sleeping when the screen turns off. In contrast, a partial wake lock is a mechanism specifically designed to keep the CPU running even while the screen is off.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;While a foreground service is often necessary to continue a user action, a manual acquisition of a partial wake lock is only necessary in conjunction with a foreground service for the duration of the CPU activity. In addition, you don't need to use a wake lock if you're already utilizing an API that keeps the device awake.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-0711d2c9-7fff-ea39-0755-5ebf367c3949"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Refer to the flow chart in &lt;/span&gt;&lt;span id="docs-internal-guid-2fe7ecf4-7fff-faee-a101-8bb2aa9cc7d5"&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/awake" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Choose the right API to keep the device awake&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; to ensure you have a strong understanding of what tool to use to avoid acquiring a wake lock in scenarios where it’s not necessary.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;span id="docs-internal-guid-72fab7c4-7fff-4ed5-2f8e-192f92fd25ce"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;b&gt;Third party libraries acquiring wake locks&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;It is common for an app to discover that it is flagged for excessive wake locks held by a third-party SDK or system API acting on its behalf. To identify and resolve these wake locks, we recommend the following steps:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-029cd934-7fff-b838-6f5b-bd28022e37b4"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Check Android vitals:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Find the exact name of the offending wake lock in the &lt;/span&gt;&lt;a href="https://play.google.com/console/developers/app/vitals/metrics/details?metric=EXCESSIVE_BACKGROUND_WAKELOCKS&amp;amp;days=28" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;excessive partial wake locks dashboard&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Cross-reference this name with the &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/awake/wakelock/identify-wls" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: italic; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Identify wake locks created by other APIs&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; guidance to see if it was created by a known system API or Jetpack library. If it is, you may need to optimize your usage of the API and can refer to the recommended guidance.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Capture a System Trace:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; If the wake lock cannot be easily identified, reproduce the wake lock issue locally using a system trace and inspect it with the Perfetto UI. You can learn more about how to do this in the &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/09/guide-to-excessive-wake-lock-usage.html" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: italic; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Debugging other types of excessive wake locks&lt;/span&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;section of this blog post&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Evaluate Alternatives:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; If an inefficient third-party library is responsible and cannot be configured to respect battery life, consider communicating the issue with the SDK's owners, finding an alternative SDK or building the functionality in-house.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span id="docs-internal-guid-e7829bd2-7fff-e757-db2f-b41300969ae4"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;Common wake lock scenarios&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Below is a breakdown of some of the specific use cases we have reviewed, along with the recommended path to optimize your wake lock implementation.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span id="docs-internal-guid-0798b311-7fff-5c92-997f-7931ec3ddd0c"&gt;&lt;span style="font-family: inherit;"&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;User-Initiated Upload or Download&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Example use cases:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Video streaming apps where the user triggers a download of a large file for offline access.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Media backup apps where the user triggers uploading their recent photos via a notification prompt.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;b&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How to reduce wake locks:&lt;/span&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Do not acquire a manual wake lock. Instead, use the &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/uidt" style="text-decoration-line: none; white-space: normal;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;User-Initiated Data Transfer (UIDT) API&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;. This is the designated path for long running data transfer tasks initiated by the user, and it is exempted from excessive wake lock calculations.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;One-Time or Periodic Background Syncs&lt;/b&gt;&lt;/span&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Example use cases:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;An app performs periodic background syncs to fetch data for offline access.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Pedometer apps that fetch step count periodically.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;How to reduce wake locks:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Do not acquire a manual wake lock. Use &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/persistent" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;WorkManager&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; configured for one-time or periodic work.&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;WorkManager&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; respects system health by batching tasks and has a minimum periodic interval (15 minutes), which is generally sufficient for background updates.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-da6da5e8-7fff-b729-1a27-8dc5527b1848"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;If you identify wake locks created by &lt;/span&gt;&lt;span style="color: #188038; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;WorkManager&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; or JobScheduler with high wake lock usage, it may be because you’ve misconfigured your worker to not complete in certain scenarios. Consider &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/observe#stop-reason" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;analyzing the worker stop reasons&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;, particularly if you’re seeing high occurrences of &lt;/span&gt;&lt;a href="https://developer.android.com/reference/androidx/work/WorkInfo#STOP_REASON_TIMEOUT()" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;STOP_REASON_TIMEOUT&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span face="Google Sans, sans-serif" style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style="color: #333333; line-height: 16.25px; margin: 0px;"&gt;workManager.getWorkInfoByIdFlow(syncWorker.id)
  .collect { workInfo -&amp;gt;
      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (workInfo != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) {
        &lt;span style="color: blue;"&gt;val&lt;/span&gt; stopReason = workInfo.stopReason
        logStopReason(syncWorker.id, stopReason)
      }
  }&lt;/pre&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In addition to logging worker stop reasons, refer to our documentation on &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/testing/persistent/debug" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;debugging your workers&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Also, consider collecting and analyzing &lt;/span&gt;&lt;a href="https://developer.android.com/topic/performance/tracing/on-device" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;system traces &lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;to understand when wake locks are acquired and released.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-15843601-7fff-6173-53c4-7d37a6a5d7b7"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Finally, check out our &lt;/span&gt;&lt;span id="docs-internal-guid-674a5f52-7fff-330b-9b5f-1ceab4dbcae7"&gt;&lt;a href="https://android-developers.googleblog.com/2026/03/how-whoop-decreased-excessive-partial.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;case study with WHOOP&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;, where they were able to discover an issue with configuration of their workers and reduce their wake lock impact significantly.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Bluetooth Communication&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Example use cases:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Companion device app prompts the user to pair their Bluetooth external device.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Companion device app listens for hardware events on an external device and user visible change in notification.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Companion device app’s user initiates a file transfer between the mobile and bluetooth device.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Companion device app performs occasional firmware updates to an external device via Bluetooth.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How to reduce wake locks:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Use &lt;/span&gt;&lt;a href="https://developer.android.com/develop/connectivity/bluetooth/companion-device-pairing" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;companion device pairing&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to pair Bluetooth devices to avoid acquiring a manual wake lock during Bluetooth pairing.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Consult the&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;a href="https://developer.android.com/develop/connectivity/bluetooth/ble/background" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: italic; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Communicate in the background&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; guidance to understand how to do background Bluetooth communication.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Using &lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;WorkManager&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; is often sufficient if there is no user impact to a delayed communication. If a manual wake lock is deemed necessary, only hold the wake lock for the duration of Bluetooth activity or processing of the activity data.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span face="Google Sans, sans-serif" style="font-size: 11pt;"&gt;&lt;span id="docs-internal-guid-b19d3efd-7fff-c922-fc55-d091075031ab"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Location Tracking&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Example use cases:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Fitness apps that cache location data for later upload such as plotting running routes&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Food delivery apps that pull location data at a high frequency to update progress of delivery in a notification or widget UI.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How to reduce wake locks:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="background-color: transparent; color: #202124; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Consult our guidance to &lt;/span&gt;&lt;a href="https://developer.android.com/develop/sensors-and-location/location/battery/optimize" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: italic; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Optimize location usage&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Consider implementing timeouts, leveraging location request batching, or utilizing passive location updates to ensure battery efficiency.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" style="background-color: transparent; color: #202124; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;When &lt;/span&gt;&lt;a href="https://developer.android.com/develop/sensors-and-location/location/request-updates" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;requesting location updates&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; using the FusedLocationProvider or LocationManager APIs, the system automatically triggers a device wake-up during the location event callback. This brief, system-managed wake lock is exempted from excessive partial wake lock calculations.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-708d9ff2-7fff-50f9-2e79-96155638bc7a"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Avoid acquiring a separate, continuous wake lock for caching location data, as this is redundant. Instead, persist location events in memory or local storage and leverage &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/persistent" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;WorkManager&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; to process them at periodic intervals.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="color: #333333; line-height: 16.25px; margin: 0px;"&gt;&lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;fun&lt;/span&gt; onCreate(savedInstanceState: Bundle?) {
    locationCallback = &lt;span style="color: blue;"&gt;object&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;LocationCallback&lt;/span&gt;() {
        &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;fun&lt;/span&gt; onLocationResult(locationResult: LocationResult?) {
            locationResult ?: &lt;span style="color: blue;"&gt;return&lt;/span&gt;
            &lt;span style="color: green;"&gt;// System wakes up CPU for short duration&lt;/span&gt;
            &lt;span style="color: blue;"&gt;for&lt;/span&gt; (location &lt;span style="color: blue;"&gt;in&lt;/span&gt; locationResult.locations){
                &lt;span style="color: green;"&gt;// Store data in memory to process at another time&lt;/span&gt;
            }
        }
    }
}&lt;/pre&gt;&lt;/div&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;High Frequency Sensor Monitoring&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Example use cases:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Pedometer apps that passively collect steps, or distance traveled.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Safety apps that monitor the device sensors for rapid changes in real time, to provide features such as crash detection or fall detection.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How to reduce wake locks:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-294cbf9b-7fff-0860-d884-664dd3b68244"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If using &lt;/span&gt;&lt;a href="https://developer.android.com/reference/android/hardware/SensorManager" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;SensorManager&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, reduce usage to periodic intervals and only when the user has explicitly granted access through a UI interaction. High frequency sensor monitoring can drain the battery heavily due to the number of CPU wake-ups and processing that occurs.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If you’re tracking step counts or distance traveled, rather than using SensorManager, leverage &lt;/span&gt;&lt;a href="https://developer.android.com/health-and-fitness/guides/recording-api" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Recording API&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; or consider utilizing &lt;/span&gt;&lt;a href="https://developer.android.com/health-and-fitness/health-connect/features/steps" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Health Connect&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to access historical and aggregated device step counts to capture data in a battery-efficient manner.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If you’re registering a sensor with &lt;/span&gt;&lt;a href="https://developer.android.com/reference/android/hardware/SensorManager" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;SensorManager&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, specify a &lt;/span&gt;&lt;a href="https://developer.android.com/reference/android/hardware/SensorManager#registerListener(android.hardware.SensorEventListener,%20android.hardware.Sensor,%20int)" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;maxReportLatencyUs&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; of 30 seconds or more to leverage &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;sensor batching&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to minimize the frequency of CPU interrupts. When the device is subsequently woken by another trigger such as a user interaction, location retrieval, or a scheduled job, the system will immediately dispatch the cached sensor data.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span face="Google Sans, sans-serif" style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style="color: #333333; line-height: 16.25px; margin: 0px;"&gt;&lt;span style="color: blue;"&gt;val&lt;/span&gt; accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

sensorManager.registerListener(&lt;span style="color: blue;"&gt;this&lt;/span&gt;,
                 accelerometer,
                 samplingPeriodUs, &lt;span style="color: green;"&gt;// How often to sample data&lt;/span&gt;
                 maxReportLatencyUs &lt;span style="color: green;"&gt;// Key for sensor batching &lt;/span&gt;
              )&lt;/pre&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span face="Google Sans, sans-serif" style="font-size: 11pt;"&gt;&lt;span id="docs-internal-guid-46c9c981-7fff-af0e-ef24-185203cf0871"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;If your app requires both location and sensor data, synchronize their event retrieval and processing. By piggybacking sensor readings onto the brief wake lock the system holds for location updates, you avoid needing a wake lock to keep the CPU awake. Use a worker or a short-duration wake lock to handle the upload and processing of this combined data.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span id="docs-internal-guid-e38c5ccc-7fff-e088-b4ed-ba7270a6bde2"&gt;&lt;h3 dir="ltr" style="line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: x-large;"&gt;Remote Messaging&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Example use cases:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Video or sound monitoring companion apps that need to monitor events that occur on an external device connected using a local network.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Messaging apps that maintain a network socket connection with the desktop variant.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;How to reduce wake locks:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;"&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;If the network events can be processed on the server side, use &lt;/span&gt;&lt;a href="https://firebase.google.com/docs/cloud-messaging/android/receive-messages" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;FCM&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; to receive information on the client. You may choose to schedule an &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started/define-work#expedited" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap-mode: wrap; vertical-align: baseline;"&gt;expedited worker&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; if additional processing of FCM data is required.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;If events must be processed on the client side via a socket connection, a wake lock is not needed to listen for event interrupts. &lt;span id="docs-internal-guid-0cb8eca2-7fff-6154-d1de-493b87bc98fe"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;When data packets arrive at the Wi-Fi or Cellular radio, the radio hardware triggers a hardware interrupt in the form of a kernel wake lock. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;You may then choose to schedule a worker or acquire a wake lock to process the data.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="docs-internal-guid-e38c5ccc-7fff-e088-b4ed-ba7270a6bde2"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;For example, if you’re using &lt;/span&gt;&lt;a href="https://ktor.io/docs/server-sockets.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;ktor-network&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; to listen for data packets on a network socket, you should only acquire a wake lock when packets have been delivered to the client and need to be processed.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="color: #333333; line-height: 16.25px; margin: 0px;"&gt;&lt;span style="color: blue;"&gt;val&lt;/span&gt; readChannel = socket.openReadChannel()
&lt;span style="color: blue;"&gt;while&lt;/span&gt; (!readChannel.isClosedForRead) {
    &lt;span style="color: green;"&gt;// CPU can safely sleep here while waiting for the next packet&lt;/span&gt;
    &lt;span style="color: blue;"&gt;val&lt;/span&gt; packet = readChannel.readRemaining(1024) 
    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!packet.isEmpty) {
         &lt;span style="color: green;"&gt;// Data Arrived: The system woke the CPU and we should keep it awake via manual wake lock (urgent) or scheduling a worker (non-urgent)&lt;/span&gt;
         performWorkWithWakeLock { 
              &lt;span style="color: blue;"&gt;val&lt;/span&gt; data = packet.readBytes()
              &lt;span style="color: green;"&gt;// Additional logic to process data packets&lt;/span&gt;
         }
    }
}&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-458b5830-7fff-4354-53b0-90eb391fe998"&gt;&lt;span style="font-family: inherit;"&gt;&lt;h2 dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 14pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-size: x-large;"&gt;Summary&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;span id="docs-internal-guid-a7e90a39-7fff-2f3f-daf4-be0abbfdc7f9"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;By adopting these recommended solutions for common use cases like background syncs, location tracking, sensor monitoring and network communication, developers can work towards reducing unnecessary wake lock usage. To continue learning, read our other technical blog post or &lt;/span&gt;&lt;a href="https://youtu.be/-6mEvkLOlno" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;watch our technical video&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; on how to discover and debug wake locks: &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/09/guide-to-excessive-wake-lock-usage.html" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Optimize your app battery using Android vitals wake lock metric&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. Also, consult our &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/awake/wakelock" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;updated wakelock documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. To help us continue improving our technical resources, please share any additional feedback on our guidance in our &lt;/span&gt;&lt;a href="https://forms.gle/8ejo49EUfee7jDMD9" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;documentation feedback survey&lt;/span&gt;&lt;/a&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/name&gt;</description><link>http://android-developers.googleblog.com/2026/03/battery-technical-quality-enforcement.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEgRm9lMeuDuwYAvqKSYCHyVs4CLxaExuj_bede6zhfp_58-RjXoeJZA1ijfeSiEZxwqeIzX7nBOsFQKAIqrzcKA6XwR3XuAKuMm5r7C716YN_0c_pl7p56nZyRMgJK0EdbZDhnYKXrfHfiT1bUh4YZIxIWz2ueW_LwWcbMHO-rg_GJh2qeQhc_BaGPvHe4=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-4861662909497457519</guid><pubDate>Wed, 04 Mar 2026 18:00:00 +0000</pubDate><atom:updated>2026-03-16T10:33:50.563-07:00</atom:updated><title>How WHOOP decreased excessive partial wake lock sessions by over 90%</title><description>&lt;name content="IMG" twitter:image=""&gt;&lt;p&gt;&lt;em&gt;Posted by Breana Tate, Developer Relations Engineer, Mayank Saini, Senior Android Engineer, Sarthak Jagetia, Senior Android Engineer and Manmeet Tuteja, Android Engineer II&lt;/em&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgjR22o6oHBDrGEmnBiwcfXr0CtFm9B_XAC9zi2OWNlkoqo2uHPLZso_Ql-WIihfxrk_6jdWoKbQpeQRx2WuZnChYSV8hb5lFxqOKYNE6d6HM7WB0w_H3y1JyDSAhccPzPxSrF7_bCWNEP3a_14G8GSM2wKqQw0F52P00VnK70qy5YdFeRLpb1TrhdjzCM" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img alt="" data-original-height="720" data-original-width="1280" height="1" src="https://blogger.googleusercontent.com/img/a/AVvXsEgjR22o6oHBDrGEmnBiwcfXr0CtFm9B_XAC9zi2OWNlkoqo2uHPLZso_Ql-WIihfxrk_6jdWoKbQpeQRx2WuZnChYSV8hb5lFxqOKYNE6d6HM7WB0w_H3y1JyDSAhccPzPxSrF7_bCWNEP3a_14G8GSM2wKqQw0F52P00VnK70qy5YdFeRLpb1TrhdjzCM" width="1" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhceoN21zHelu-2uJuGcwDR94VtNULdeWmskBHNwguztvdqHgWI8vtILj22-FKlpYZs-z_nv0eAk44yHQ38_XNipcBoDHb4bod2vn5bjpKYhePTEK1c7Mopfwc2wizG27Fjn_qgJnLsMrpu5SBsBw9iwXvuOgPQN_7JGrddTssqE3MfMMzN74UWeLGbodM/s1280/ADev_WHOOP_Header_R2.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhceoN21zHelu-2uJuGcwDR94VtNULdeWmskBHNwguztvdqHgWI8vtILj22-FKlpYZs-z_nv0eAk44yHQ38_XNipcBoDHb4bod2vn5bjpKYhePTEK1c7Mopfwc2wizG27Fjn_qgJnLsMrpu5SBsBw9iwXvuOgPQN_7JGrddTssqE3MfMMzN74UWeLGbodM/s16000/ADev_WHOOP_Header_R2.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/name&gt;&lt;span id="docs-internal-guid-ff0391d8-7fff-a787-bf1a-de0840769523"&gt;&lt;span style="color: #1b1c1d;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Building an Android app for a wearable means the real work starts when the screen turns off. &lt;/span&gt;&lt;a href="https://www.whoop.com/us/en/" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;WHOOP&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; helps members understand how their body responds to training, recovery, sleep, and stress, and for the many WHOOP members on &lt;/span&gt;&lt;/span&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.whoop.android&amp;amp;pli=1" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;Android&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-family: inherit;"&gt;, reliable background syncing and connectivity are what make those insights possible.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #1b1c1d;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b id="docs-internal-guid-c3937973-7fff-8ba4-5cde-97732ab6bd01" style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Earlier this year, Google Play &lt;/span&gt;&lt;a href="https://android-developers.googleblog.com/2025/11/raising-bar-on-battery-performance.html" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;released a new metric in Android vitals&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;: Excessive partial wake locks. This metric measures the percentage of user sessions where cumulative, non-exempt wake lock usage exceeds 2 hours in a 24-hour period. The aim of this metric is to help you identify and address possible sources of battery drain, which is crucial for delivering a great user experience.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Beginning March 1, 2026, apps that continue to not meet the quality threshold may be excluded from Google Play discovery surfaces. A warning may also be placed on the Google Play Store listing, indicating the app might use more battery than expected.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;According to Mayank Saini, Senior Android Engineer at WHOOP,&amp;nbsp; this “presented the team with an opportunity to raise the bar on Android efficiency,” after Android vitals flagged the app’s excessive partial wake lock % as 15%—which exceeded the recommended 5% threshold.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8ShPyJCanK9lVRci3W8Oe2GyPiS0itt11EcVNmmR7sAUPtRcD6MONyACe2GpV-A-KIzon5Rbthp94N5WKzHNL4Br7go1L0beQb8qNN9gMtR1rhXvjdFgAOt0xxuv6OSh09D8CoX1gAKYB-9L2Nm2Z_F1wXiVGE8JWQ4FcBmTJ-5I5e8zfW1n6-VunxJ8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/a/AVvXsEi8ShPyJCanK9lVRci3W8Oe2GyPiS0itt11EcVNmmR7sAUPtRcD6MONyACe2GpV-A-KIzon5Rbthp94N5WKzHNL4Br7go1L0beQb8qNN9gMtR1rhXvjdFgAOt0xxuv6OSh09D8CoX1gAKYB-9L2Nm2Z_F1wXiVGE8JWQ4FcBmTJ-5I5e8zfW1n6-VunxJ8=s16000" /&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;The team viewed the Android vitals metric as a clear signal that their background work was holding the CPU awake longer than necessary. Resolving this would allow them to continue to deliver a great user experience while simultaneously decreasing wasted background time and maintaining reliable and timely Bluetooth connectivity and syncing.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b id="docs-internal-guid-636a363f-7fff-535b-10ab-d102826b22b6" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Identifying the issue&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To figure out where to get started, the team first turned to Android vitals for more insight into which wake locks were affecting the metric. By consulting the &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Android vitals excessive partial wake locks dashboard&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, they were able to identify the biggest contributor to excessive partial wake locks as one of their WorkManager workers (identified in the dashboard as &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: #38761d; font-family: 'Google Sans Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;androidx.work.impl.background.systemjob.SystemJobService&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;).&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt; To support the WHOOP “always-on experience”, the app uses WorkManager for background tasks like periodic syncing and delivering recurring updates to the wearable.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;While the team &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;was&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; aware that WorkManager &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/awake/wakelock/identify-wls#workmanager" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;acquires a wake lock&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; while executing tasks in the background, they previously did not have visibility into how all of their background work (beyond just WorkManager) was distributed until the introduction of the excessive partial wake locks metric in Android vitals.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;With the dashboard identifying WorkManager as the main contributor, the team was then able to focus their efforts on identifying &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;which&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; of their workers was contributing the most and work towards resolving the issue.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Making use of internal metrics and data to better narrow down the cause&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;WHOOP already had internal infrastructure set up to monitor WorkManager metrics. They periodically monitor:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Average Runtime: For how long does the worker run?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Timeouts: How often is the worker timing out instead of completing?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Retries: How often does the worker retry if the work timed out or failed?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Cancellations: How often was the work cancelled?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Tracking more than just worker successes and failures gives the team visibility into their work’s efficiency.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The internal metrics flagged &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;high average runtime&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; for a select few workers, enabling them to narrow the investigation down even further.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In addition to their internal metrics, the team also used &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Android Studio’s &lt;/span&gt;&lt;a href="https://developer.android.com/studio/inspect/task" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 700; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Background Task Inspector&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to inspect and debug the workers of interest, with a specific focus on associated wake locks, to align with the metric flagged in Android vitals.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Investigation: Distinguishing between worker variants&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b id="docs-internal-guid-897900b9-7fff-8f86-f7e8-c226580a4a21" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;WHOOP uses both &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started/define-work#schedule_one-time_work" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;one-time&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started/define-work#schedule_periodic_work" style="text-decoration: none;"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;periodic&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; scheduling for some workers. This allows the app to reuse the same Worker logic for identical tasks with the same success criteria, differing only in timing.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Using their internal metrics made it possible to narrow their search to a specific worker, but they couldn't tell if the bug occurred when the worker was one-time, periodic, or both. So, they rolled out an update to use WorkManager’s&lt;/span&gt;&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;&lt;a href="https://developer.android.com/reference/androidx/work/WorkRequest.Builder#setTraceTag(kotlin.String)" style="text-decoration: none;"&gt;&lt;span style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-family: 'Google Sans Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre;"&gt;setTraceTag&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre;"&gt; method&lt;/span&gt;&lt;/a&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;to distinguish between the one-time and periodic variants of the same Worker.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;This extra detail would allow them to definitively identify which Worker variant (periodic or one-time) was contributing the most to sessions with excessive partial wake locks. However, the team was surprised when the data revealed that neither variant appeared to be contributing more than the other.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Manmeet Tuteja, Android Engineer II at WHOOP said “that split also helped us confirm the issue was happening in &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;both&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; variants, which pointed away from scheduling configuration and toward a shared business logic problem inside the worker implementation.”&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEie5dsZanXFbZ6K-fQ2dnP__fzlY4Fnm5tBv4MCYPQmlqZ5ISOVA6b5PiyBuUl3B-fvtb75xkBcWXXSuOZSVCbNPwiW3TtowUIBhCor_fUo76hq2hpixi0liBphSL-I8rzadeApiA9Q0VVwFph8gNIFezsKzllNAZA77RL8ectmSd484T_15IRcBZlr8MU" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/a/AVvXsEie5dsZanXFbZ6K-fQ2dnP__fzlY4Fnm5tBv4MCYPQmlqZ5ISOVA6b5PiyBuUl3B-fvtb75xkBcWXXSuOZSVCbNPwiW3TtowUIBhCor_fUo76hq2hpixi0liBphSL-I8rzadeApiA9Q0VVwFph8gNIFezsKzllNAZA77RL8ectmSd484T_15IRcBZlr8MU=s16000" /&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Diving deeper on worker behavior and fixing the root cause&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b id="docs-internal-guid-25d97de1-7fff-cc76-25d7-74f27d7e2e20" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;With the knowledge that they needed to take a look at logic &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;within&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; the worker,&amp;nbsp; the team re-examined worker behavior for the workers that had been flagged during their investigation. Specifically, they were looking for instances in which work may have been getting stuck and not completing.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;All of this culminated in finding the root cause of the excessive wake locks:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;A CoroutineWorker that was designed to wait for a connection to the WHOOP sensor before proceeding.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;If the work started with no sensor connected, &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;whoopSensorFlow&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;–which indicates if the sensor is connected– was &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;null&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;The &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;SensorWorker&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt; &lt;/span&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;didn’t treat this as an early-exit condition and kept running, effectively waiting indefinitely for a connection. As a result, WorkManager held a partial wake lock until the work timed out, leading to high background wake lock usage and frequent, unwanted rescheduling of the &lt;/span&gt;&lt;span style="background-color: transparent; color: #188038; font-family: 'Roboto Mono',monospace; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;SensorWorker&lt;/span&gt;&lt;span face="'Google Sans',sans-serif" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b style="font-weight: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;To address this, the WHOOP team updated the worker logic to check the connection status before attempting to execute the core business logic.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span id="docs-internal-guid-da954541-7fff-5cc2-096b-2cbb56423f48"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;span style="font-family: inherit;"&gt;If the sensor isn’t available, the worker exits, avoiding a timeout scenario and releasing the wake lock. The following code snippet shows the solution:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style="color: #333333; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 16.25px; margin: 0px; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;pre style="line-height: 16.25px; margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SensorWorker&lt;/span&gt;(appContext: Context, params: WorkerParameters): CoroutineWorker(appContext, params) {
   &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;suspend&lt;/span&gt; &lt;span style="color: blue;"&gt;fun&lt;/span&gt; doWork(): Result {
      ...
      &lt;span style="color: green;"&gt;// Check the sensor state and perform work or return failure&lt;/span&gt;
       &lt;span style="color: blue;"&gt;return&lt;/span&gt; whoopSensorFlow.replayCache
            .firstOrNull()
            ?.let { cachedData -&amp;gt;
                processSensorData(cachedData)
                Result.success()
            } ?: run {
                Result.failure()
            }
}&lt;/pre&gt;&lt;/pre&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Achieving a 90% decrease in sessions with excessive partial wake locks&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;b id="docs-internal-guid-65d3af4f-7fff-8eb4-7842-866cdf036df6" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;After rolling out the fix, the team continued to monitor the Android vitals dashboard to confirm the impact of the changes.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Ultimately, WHOOP saw their &lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;excessive partial wake lock percentage drop from 15% to less than 1%&lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt; just 30 days&lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;after implementing the changes to their Worker. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="separator" style="clear: both; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCcOlOGJBxpPNNGCAHbcdFTWgP7LUXqGbY5cGuDDvoOUFTmKgZ2GASeLpZXxPzJ4rLKdr2hSCN1dycoEWHftKZQ_RrQv13KfaO4wPAZ0yhiKaPK4yE8dLnT-ENQsHdZSo3pUMZ9-ExmEu5OqjdQvjGYeX_f5S1UKH1RzTobn6RRkmICNNiifwcvD9DHng/s16000/Screenshot%202026-02-11%20at%201.04.26%E2%80%AFPM.png" /&gt;&lt;/div&gt;&lt;span&gt;&lt;span style="color: #1b1c1d;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;As a result of the changes, the team has seen fewer instances of work timing out without completing, resulting in lower average runtimes.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span id="docs-internal-guid-50b04817-7fff-7def-6ba4-eda930fcbdaf"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;The WHOOP team’s advice to other developers that want to improve their background work’s efficiency:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgf_ps2Fq9afkcrnq9CZjcXebTmRgjwxdhdDQgAmvaLebjgXyO6nDBvu1ZmA7_1h04Q2zjYFaMHQvVlfNhancQgVQ4pcdlVf3XEYpKRK-zfLhZe9nj0R4V4Yo51uspVisq-1BGRXHt9tXNMU98WndYxfHpK754OPDi05d21psUbl1br23YdPLDnPA8CKKY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/a/AVvXsEgf_ps2Fq9afkcrnq9CZjcXebTmRgjwxdhdDQgAmvaLebjgXyO6nDBvu1ZmA7_1h04Q2zjYFaMHQvVlfNhancQgVQ4pcdlVf3XEYpKRK-zfLhZe9nj0R4V4Yo51uspVisq-1BGRXHt9tXNMU98WndYxfHpK754OPDi05d21psUbl1br23YdPLDnPA8CKKY=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;span id="docs-internal-guid-64ba21fc-7fff-12f1-ba6c-e4d9fdd09ff5"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span id="docs-internal-guid-be10031f-7fff-0bcf-4cf9-2e390d84fcdd"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;Want to dive deeper into the details and hear more insights from the developers? Check out the &lt;/span&gt;&lt;a href="https://engineering.prod.whoop.com/android-wake-locks" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;WHOOP team's blog&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span&gt;&lt;span style="color: black; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit; font-size: large;"&gt;Get Started&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;If you’re interested in trying to reduce your app’s excessive partial wake locks or trying to improve worker efficiency, view your app’s excessive partial wake locks metric in &lt;/span&gt;&lt;a href="https://play.google.com/console/u/0/developers/app/vitals/metrics/overview" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;Android vitals&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;, and review the &lt;/span&gt;&lt;a href="https://developer.android.com/develop/background-work/background-tasks/awake/wakelock" style="text-decoration-line: none;"&gt;&lt;span style="color: #1155cc; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"&gt;wake locks documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt; for more best practices and debugging strategies.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://android-developers.googleblog.com/2026/03/how-whoop-decreased-excessive-partial.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEgjR22o6oHBDrGEmnBiwcfXr0CtFm9B_XAC9zi2OWNlkoqo2uHPLZso_Ql-WIihfxrk_6jdWoKbQpeQRx2WuZnChYSV8hb5lFxqOKYNE6d6HM7WB0w_H3y1JyDSAhccPzPxSrF7_bCWNEP3a_14G8GSM2wKqQw0F52P00VnK70qy5YdFeRLpb1TrhdjzCM=s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6755709643044947179.post-966277362259495434</guid><pubDate>Wed, 04 Mar 2026 14:40:00 +0000</pubDate><atom:updated>2026-03-04T13:04:23.996-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Product News</category><title>A new era for choice and openness </title><description>&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYH7UBThBDnlrGadLFadOayw3V6C9YgAcXauX3WmjvzWquDhDxdhdAEA9HMs3Qrpms4a5e5HW9bOi5hOiJzE2qAYvk0FXVNsP9LmW3QU94T2jwv6QYlPC9A4ack8MdcxoJfq1oTAIF0Zh72xP63l0xuqUvPMM1coeEdhBPE8zy2LnEtWF1pKCyn1_7dw8/s5460/Urgent-play-banner.ai%20(1).png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYH7UBThBDnlrGadLFadOayw3V6C9YgAcXauX3WmjvzWquDhDxdhdAEA9HMs3Qrpms4a5e5HW9bOi5hOiJzE2qAYvk0FXVNsP9LmW3QU94T2jwv6QYlPC9A4ack8MdcxoJfq1oTAIF0Zh72xP63l0xuqUvPMM1coeEdhBPE8zy2LnEtWF1pKCyn1_7dw8/s5460/Urgent-play-banner.ai%20(1).png" style="display: none;" /&gt;

&lt;name content="IMG" twitter:image=""&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="font-family: inherit; text-align: left;"&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="font-family: inherit; text-align: left;"&gt;Posted by&amp;nbsp;&lt;span style="color: #1b1c1d; white-space-collapse: preserve;"&gt;Sameer Samat, President of Android Ecosystem&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: justify;"&gt;&lt;i style="font-family: inherit; text-align: left;"&gt;&lt;span style="color: #1b1c1d; white-space-collapse: preserve;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: justify;"&gt;&lt;i style="font-family: inherit; text-align: left;"&gt;&lt;span style="color: #1b1c1d; white-space-collapse: preserve;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhjP67PG_uZFpCgYqwMzC-PmjaM5mhOFX_kMw7B-zyV7c785DKqOVDvm4GpEoE26dzItiUcBmYqB3IfdqI_lqmKBTRWTlEk4eM0Mu9VcHqsFzN1VQsmTMq_JX2IbhB8dSOVfJsuOHgrBmdGbrlrkmRy11aRNXtSZtFe5Fd0r-bOO7Ja79gP6W9b9HX_psw" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="769" data-original-width="1418" src="https://blogger.googleusercontent.com/img/a/AVvXsEhjP67PG_uZFpCgYqwMzC-PmjaM5mhOFX_kMw7B-zyV7c785DKqOVDvm4GpEoE26dzItiUcBmYqB3IfdqI_lqmKBTRWTlEk4eM0Mu9VcHqsFzN1VQsmTMq_JX2IbhB8dSOVfJsuOHgrBmdGbrlrkmRy11aRNXtSZtFe5Fd0r-bOO7Ja79gP6W9b9HX_psw=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;div style="font-style: italic;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span id="docs-internal-guid-93e65ce5-7fff-b61d-bdb4-8adfcf979cfe"&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #1b1c1d; font-family: inherit; white-space-collapse: preserve;"&gt;&lt;span style="color: black;"&gt;Android has always driven innovation in the industry through its unique flexibility and openness. At this important moment, we want to continue leading the way in how developers distribute their apps and games to people on billions of devices across many form factors. A modern platform must be flexible, providing developers and users with choice and openness as well as a safe experience.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #1b1c1d; font-family: inherit; white-space-collapse: preserve;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span id="docs-internal-guid-ac738d89-7fff-14a6-f18c-a35519aa9a2e"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Today we are announcing substantial updates that evolve our business model and build on our long history of openness globally.&amp;nbsp; We’re doing that in three ways: more billing options, a program for registered app stores, and lower fees and new programs for developers.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span id="docs-internal-guid-8b2e7279-7fff-d21a-3f53-5a8297fb5a74"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Expanded billing choice on Google Play for users and developers&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;Google Play is giving developers even more billing choice and freedom in how they handle transactions. Mobile developers will have the option to use their own billing systems in their app alongside Google Play’s billing, or they can guide users outside of their app to their own websites for purchases. Our goal is to offer this flexibility in a way that maximizes choice and safety for users.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Leading the way in store choice&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;We’re introducing a program that makes sideloading qualified app stores even easier. Our new Registered App Stores program will provide a more streamlined installation flow for Android app stores that meet certain quality and safety benchmarks.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Once this change has rolled out, app stores that choose to participate in this optional program will have registered with us and so users who sideload them will have a more simplified installation flow (see graphic below).&amp;nbsp; If a store chooses not to participate, nothing changes for them and they retain the same experience as any other sideloaded app on Android.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;This gives app stores more ways to reach users and gives users more ways to easily and safely access the apps and games they love.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span id="docs-internal-guid-a20fa45d-7fff-a34b-0c5f-b2c1bb4d6273"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;This Registered App Store program will begin outside of the US first, and we intend to bring it to the US as well, subject to court approval.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEiR-ic79bm0-suWMjAFrTYOlEwevSjagIbi2xco9O6VviRfzP9fCAlNVFTCN_OD61agIkh0vFZZnQYFUQLPz_mRudmJ91N-IKWTL9VvJfFVbyQsIU1_i7omiHhEdRel_RhW_mh0HB9BaEZC7m2b61UfUf-G7IGmKquq9JjPIDRwAruOOkLoAhLvEEwNWs4" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="1838" data-original-width="824" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEiR-ic79bm0-suWMjAFrTYOlEwevSjagIbi2xco9O6VviRfzP9fCAlNVFTCN_OD61agIkh0vFZZnQYFUQLPz_mRudmJ91N-IKWTL9VvJfFVbyQsIU1_i7omiHhEdRel_RhW_mh0HB9BaEZC7m2b61UfUf-G7IGmKquq9JjPIDRwAruOOkLoAhLvEEwNWs4=w288-h640" width="288" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span id="docs-internal-guid-e5401625-7fff-99f5-a3e5-28ef7bdf3007"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;"&gt;Lower pricing and new programs to support developers&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"&gt;Google Play’s fees are already the lowest among major app stores, and today we are taking this even further by introducing a new business model that decouples fees for using our billing system and introduces new, lower service fees. Once this rolls out:&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Billing: &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;For those developers who choose to use Google Play’s billing system, they will be charged a market-specific rate separate from the service fee. In the European Economic Area (EEA), UK, and US that rate will be 5%.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Service Fees:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ol style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="2" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: lower-alpha; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;For new installs (first time installs from users after the new fees are launched in a region), we are reducing the in-app purchase (IAP) service fee to 20%.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="2" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: lower-alpha; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;We are launching an Apps Experience Program and revamping our Google Play Games Level Up program to incentivize building great software experiences across Android form factors associated with clear quality benchmarks and enhanced user benefits.&amp;nbsp; Those developers who choose to participate in these programs will have even lower rates. Participating IAP developers will have a 20% service fee for transactions from existing installs and a 15% fee on transactions from new app installs.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="2" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: lower-alpha; text-wrap-mode: nowrap; vertical-align: baseline;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt; text-align: left;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Our service fee for recurring subscriptions will be 10%.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: center;"&gt;&lt;span style="border: none; display: inline-block; height: 309px; margin-left: 1em; margin-right: 1em; overflow: hidden; width: 624px;"&gt; &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjJKdulmeivx1g4aMwV18oEaeaWypXX7PaEFbMdVzo9SRv6G5jRiAUiSZW33xbudHBnCP7HFZb9OCkEfYwDjg5KnR7f16p3SC3VHGVyMaHbESb4H74wTZiafe3m-nwBbhf7PUSshxjUNu46_gFjRSf80_RpswmZUeQb_9sB9Wd6TATf9wbjSpr2BslK7P4" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="992" data-original-width="2000" src="https://blogger.googleusercontent.com/img/a/AVvXsEjJKdulmeivx1g4aMwV18oEaeaWypXX7PaEFbMdVzo9SRv6G5jRiAUiSZW33xbudHBnCP7HFZb9OCkEfYwDjg5KnR7f16p3SC3VHGVyMaHbESb4H74wTZiafe3m-nwBbhf7PUSshxjUNu46_gFjRSf80_RpswmZUeQb_9sB9Wd6TATf9wbjSpr2BslK7P4=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/name&gt;&lt;div style="font-style: italic;"&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;br /&gt;&lt;/name&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEiL4ZAgJoKLuEtiiOAAX_nXAMmD497R869bs_N8f37vvEMCJGLyOMBFF9JX_ZpKhWutfoIfmEvSRM6-W1g4CQOk1SNoC8VHmhNchM7Llj2Y1UNfyr7PhZdB_fUwLQalM_kLznrDIhkI85VJssLlvmuzOffNuBehyWIG6XuchrEhkY3vhf7bJY-PDCrgtxk" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="992" data-original-width="2000" src="https://blogger.googleusercontent.com/img/a/AVvXsEiL4ZAgJoKLuEtiiOAAX_nXAMmD497R869bs_N8f37vvEMCJGLyOMBFF9JX_ZpKhWutfoIfmEvSRM6-W1g4CQOk1SNoC8VHmhNchM7Llj2Y1UNfyr7PhZdB_fUwLQalM_kLznrDIhkI85VJssLlvmuzOffNuBehyWIG6XuchrEhkY3vhf7bJY-PDCrgtxk=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;name content="IMG" twitter:image=""&gt;&lt;span id="docs-internal-guid-8ff7f691-7fff-f769-c661-62a4bbdd06f8"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit; font-size: medium;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Rollout timelines&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;This is a significant evolution, and we plan to share additional details in the coming months. To make sure we have enough time to build the necessary technical infrastructure, enable a seamless transition for developers, and ensure alignment with local regulations, these updated fees will roll out on the following staggered schedule:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;By June 30:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; EEA, the United Kingdom and the US.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;By September 30: &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Australia&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;By December 31:&amp;nbsp; &lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt;Korea and Japan&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level="1" dir="ltr" style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"&gt;&lt;p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap-mode: wrap; vertical-align: baseline;"&gt;By September 30, 2027:&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap-mode: wrap; vertical-align: baseline;"&gt; The updates will reach the rest of the world.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;We will also launch the updated Google Play Games Level Up program and new App Experience program by September 30 for EEA, UK, US, and Australia and then it will roll out in line with the rest of the schedule above.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;We plan to launch Registered App Stores with a version of a major Android release by the end of the year.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-family: inherit; font-size: medium;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"&gt;Resolving disputes with Epic Games&lt;/span&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;With these updates, we have also resolved our disputes worldwide with Epic Games.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;"&gt;&lt;span style="font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"&gt;&lt;span style="font-family: inherit;"&gt;We believe these changes will make for a stronger Android ecosystem with even more successful developers and higher-quality apps and games available across more form factors for everyone. We look forward to our continued work with the developer community to build the next generation of digital experiences.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/name&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-style: italic; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</description><link>http://android-developers.googleblog.com/2026/03/a-new-era-for-choice-and-openness.html</link><author>noreply@blogger.com (Android Developers)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYH7UBThBDnlrGadLFadOayw3V6C9YgAcXauX3WmjvzWquDhDxdhdAEA9HMs3Qrpms4a5e5HW9bOi5hOiJzE2qAYvk0FXVNsP9LmW3QU94T2jwv6QYlPC9A4ack8MdcxoJfq1oTAIF0Zh72xP63l0xuqUvPMM1coeEdhBPE8zy2LnEtWF1pKCyn1_7dw8/s72-c/Urgent-play-banner.ai%20(1).png" width="72"/><thr:total>0</thr:total></item></channel></rss>