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

  To use today’s release, upgrade your &lt;a href="https://developer.android.com/develop/ui/compose/bom"&gt;Compose BOM&lt;/a&gt; version to:

&lt;pre&gt;&lt;code&gt;implementation(platform("androidx.compose:compose-bom:2026.04.01"))&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Changes in Compose 1.11.0&lt;/h3&gt;
&lt;h2&gt;Coroutine execution in tests&lt;/h2&gt;
&lt;p&gt;
  We’re introducing a major update to how Compose handles test timing. Following the opt-in period announced in Compose 1.10, the v2 testing APIs are now the default, and the v1 APIs have been deprecated. The key change is a shift in the default test dispatcher. While the v1 APIs relied on &lt;code&gt;&lt;a href="https://developer.android.com/kotlin/coroutines/test#unconfinedtestdispatcher"&gt;UnconfinedTestDispatcher&lt;/a&gt;&lt;/code&gt;, which executed coroutines immediately, the v2 APIs use the &lt;code&gt;&lt;a href="https://developer.android.com/kotlin/coroutines/test#standardtestdispatcher"&gt;StandardTestDispatcher&lt;/a&gt;&lt;/code&gt;. This means that when a coroutine is launched in your tests, it is now queued and does not execute until the virtual clock is advanced.
&lt;/p&gt;

&lt;p&gt;
  This better mimics production conditions, effectively flushing out race conditions and making your test suite significantly more robust and less flaky.
&lt;/p&gt;

&lt;p&gt;
  To ensure your tests align with standard coroutine behavior and to avoid future compatibility issues, we strongly recommend migrating your test suite. Check out our comprehensive&amp;nbsp;&amp;nbsp;&lt;a href="https://developer.android.com/develop/ui/compose/testing/migrate-v2"&gt;migration guide&lt;/a&gt; for API mappings and common fixes.
&lt;/p&gt;

&lt;h2&gt;Shared element improvements and animation tooling&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4CPWGQS1YJIuKDoVHrHVoXkXd1CeRWXew-VTXok2Mvh_Dh1k37F8j9GzSw204ICu2xwVs9CtlYlJyAD-iifjyYL07U0vax-5Y1TUw1oX2_BmEmh0prbjuBzznkJE8hcnkqbpjaBk7_jeolgsMyXNF2gKtzLRJBrxQ-B8yiUXCG3Ekmon0CBAERiVqSjE/s836/sharedElement.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="836" data-original-width="376" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4CPWGQS1YJIuKDoVHrHVoXkXd1CeRWXew-VTXok2Mvh_Dh1k37F8j9GzSw204ICu2xwVs9CtlYlJyAD-iifjyYL07U0vax-5Y1TUw1oX2_BmEmh0prbjuBzznkJE8hcnkqbpjaBk7_jeolgsMyXNF2gKtzLRJBrxQ-B8yiUXCG3Ekmon0CBAERiVqSjE/w180-h400/sharedElement.gif" width="180" /&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;p&gt;
  We’ve also added some handy visual debugging tools for shared elements and &lt;code&gt;Modifier.animatedBounds&lt;/code&gt;. You can now see exactly what’s happening under the hood—like target bounds, animation trajectories, and how many matches are found—making it much easier to spot why a transition might not be behaving as expected. To use the new tooling, simply surround your &lt;code&gt;SharedTransitionLayout&lt;/code&gt; with the &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/animation/package-summary#LookaheadAnimationVisualDebugging(kotlin.Boolean,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Boolean,kotlin.Function0)"&gt;LookaheadAnimationVisualDebugging&lt;/a&gt;&lt;/code&gt; composable. 
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;LookaheadAnimationVisualDebugging(
    overlayColor = Color(0x4AE91E63),
    isEnabled = true,
    multipleMatchesColor = Color.Green,
    isShowKeylabelEnabled = false,
    unmatchedElementColor = Color.Red,
) {
    SharedTransitionLayout {
        CompositionLocalProvider(
            LocalSharedTransitionScope provides this,
        ) {
            // your content
        }
    }
}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Trackpad events&lt;/h2&gt;
&lt;p&gt;
  We’ve revamped Compose support for trackpads, like built-in laptop trackpads, attachable trackpads for tablets, or external/virtual trackpads. Basic trackpad events will now generally be considered &lt;code&gt;PointerType.Mouse&lt;/code&gt; events, aligning mouse and trackpad behavior to better match user expectations. Previously, these trackpad events were interpreted as fake touchscreen fingers of &lt;code&gt;PointerType.Touch&lt;/code&gt;, which led to confusing user experiences. For example, clicking and dragging with a trackpad would scroll instead of selecting. By changing the pointer type these events have in the latest release of Compose, clicking and dragging with a trackpad will no longer scroll.
&lt;/p&gt;

&lt;p&gt;
  We also added support for more complicated trackpad gestures as recognized by the platform since API 34, including &lt;a href="https://developer.android.com/reference/android/view/MotionEvent#CLASSIFICATION_TWO_FINGER_SWIPE"&gt;two finger swipes&lt;/a&gt; and &lt;a href="https://developer.android.com/reference/android/view/MotionEvent#CLASSIFICATION_PINCH"&gt;pinches&lt;/a&gt;. These gestures are automatically recognized by components like &lt;code&gt;Modifier.scrollable&lt;/code&gt; and &lt;code&gt;Modifier.transformable&lt;/code&gt; to have better behavior with trackpads.
&lt;/p&gt;

&lt;p&gt;
  These changes improve behavior for trackpads across built-in components, with redundant touch slop removed, a more intuitive drag-and-drop starting gesture, double-click and triple-click selection in text fields, and desktop-styled context menus in text fields.
&lt;/p&gt;

&lt;p&gt;
  To test trackpad behavior, there are new testing APIs with &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/ui/test/SemanticsNodeInteraction?hl=en#(androidx.compose.ui.test.SemanticsNodeInteraction).performTrackpadInput(kotlin.Function1)"&gt;performTrackpadInput&lt;/a&gt;&lt;/code&gt;, which allow validating the behavior of your apps when being used with a trackpad. If you have custom gesture detectors, validate behavior across input types, including touchscreens, mice, trackpads, and styluses, and ensure support for mouse scroll wheels and trackpad gestures.
&lt;/p&gt;

&lt;table style="border-collapse: collapse; width: 100%;"&gt;
 &lt;/table&gt;&lt;table style="border-collapse: collapse; width: 100%;"&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style="text-align: center;"&gt;Before&lt;/th&gt;
      &lt;th style="text-align: center;"&gt;After&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style="text-align: center; width: 50%;"&gt;
        &lt;div class="separator" style="clear: both;"&gt;
          &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPrtrimI6TGSfomNIoLe6bnkyrwEBYtIc1mehBgJZxnxGl3kxvlPpOZFMyyfbSThY7ECio5BNtswy2gsmXmi1EMdsqbGK9zDnUyK49PUv_Z1LKHyD6vWLIHxQSo75zEQ8m4tsPTyToitGSN3Ciuj2lTYfggHO9Z3CQhTk3ZjkrGLd9gn8JXkMzzwOeKIs/s1600/before%202.gif" style="display: block; padding: 1em 0px; text-align: center;"&gt;
            &lt;img alt="Before" border="0" data-original-height="360" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPrtrimI6TGSfomNIoLe6bnkyrwEBYtIc1mehBgJZxnxGl3kxvlPpOZFMyyfbSThY7ECio5BNtswy2gsmXmi1EMdsqbGK9zDnUyK49PUv_Z1LKHyD6vWLIHxQSo75zEQ8m4tsPTyToitGSN3Ciuj2lTYfggHO9Z3CQhTk3ZjkrGLd9gn8JXkMzzwOeKIs/s16000/before%202.gif" style="height: auto; width: 100%;" /&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;/td&gt;
      &lt;td style="text-align: center; width: 50%;"&gt;
        &lt;div class="separator" style="clear: both;"&gt;
          &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi24EUtKJ-bdapy5LjBehqxDwV1LS9giT6u4K279a5UVO-XkKAuEAbNpCQqbHHaIqn7JOC0fJZ3xNgAds2c0dBTqhbVKcafFhXh4QuMZNMpfqvDsH8s4IJJ4iNzXRGhnGwctzGczKCgf39X308h5WcP3g3dLrQUHlLrIsRgB_9RgAzUwXk8ZvXzUh46qto/s1600/after%203.gif" style="display: block; padding: 1em 0px; text-align: center;"&gt;
            &lt;img alt="After" border="0" data-original-height="360" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi24EUtKJ-bdapy5LjBehqxDwV1LS9giT6u4K279a5UVO-XkKAuEAbNpCQqbHHaIqn7JOC0fJZ3xNgAds2c0dBTqhbVKcafFhXh4QuMZNMpfqvDsH8s4IJJ4iNzXRGhnGwctzGczKCgf39X308h5WcP3g3dLrQUHlLrIsRgB_9RgAzUwXk8ZvXzUh46qto/s16000/after%203.gif" style="height: auto; width: 100%;" /&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2&gt;Composition host defaults (Compose runtime)&lt;/h2&gt;
&lt;p&gt;
  We introduced &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/runtime/HostDefaultProvider"&gt;HostDefaultProvider&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;LocalHostDefaultProvider&lt;/code&gt;, &lt;code&gt;HostDefaultKey&lt;/code&gt;, and &lt;code&gt;ViewTreeHostDefaultKey&lt;/code&gt; to supply host-level services directly through compose-runtime. This removes the need for libraries to depend on compose-ui for lookups, better supporting Kotlin Multiplatform. To link these values to the composition tree, library authors can use &lt;code&gt;compositionLocalWithHostDefaultOf&lt;/code&gt; to create a &lt;code&gt;CompositionLocal&lt;/code&gt; that resolves defaults from the host.
&lt;/p&gt;

&lt;h2&gt;Preview wrappers&lt;/h2&gt;
&lt;p&gt;
  Android Studio custom previews is a new feature that allows you to define exactly how the contents of a Compose preview are displayed.
&lt;/p&gt;

&lt;p&gt;
  By implementing the &lt;code&gt;PreviewWrapperProvider&lt;/code&gt; interface and applying the new &lt;code&gt;@PreviewWrapper&lt;/code&gt; annotation, you can easily inject custom logic, such as applying a specific Theme. The annotation can be applied to a function annotated with &lt;code&gt;@Composable&lt;/code&gt; and &lt;code&gt;@Preview&lt;/code&gt; or &lt;code&gt;@MultiPreview&lt;/code&gt;, offering a generic, easy-to-use solution that works across preview features and significantly reduces repetitive code.
&lt;/p&gt;

&lt;pre&gt;&lt;span id="docs-internal-guid-abe8e28a-7fff-d18a-2ace-96633e0a3887"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;class ThemeWrapper: &lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 10pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;PreviewWrapper&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 10pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Composable&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;override fun Wrap(content: &lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 10pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;@Composable&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt; (() -&amp;gt; Unit)) {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JetsnackTheme {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content()&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 10pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;@PreviewWrapperProvider&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;(ThemeWrapper::class)&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 10pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;@Preview&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 10pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;@Composable&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;private fun ButtonPreview() {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// JetsnackTheme in effect&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Button(onClick = {}) {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text(text = "Demo")&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: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.8; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3&gt;Deprecations and removals&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;As announced in the &lt;a href="https://android-developers.googleblog.com/2025/12/whats-new-in-jetpack-compose-december.html"&gt;Compose 1.10 blog post&lt;/a&gt;, we’re deprecating &lt;code&gt;Modifier.onFirstVisible()&lt;/code&gt;. Its name often led to misconceptions, particularly within lazy layouts, where it would trigger multiple times during scrolling. We recommend migrating to &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/package-summary#(androidx.compose.ui.Modifier).onVisibilityChanged(kotlin.Long,kotlin.Float,androidx.compose.ui.layout.LayoutBoundsHolder,kotlin.Function1)"&gt;Modifier.onVisibilityChanged()&lt;/a&gt;&lt;/code&gt;, which allows for more precise manual tracking of visibility states tailored to your specific use case requirements.
&lt;/li&gt;&lt;li&gt;The &lt;code&gt;ComposeFoundationFlags.isTextFieldDpadNavigationEnabled&lt;/code&gt; flag was removed because D-pad navigation for &lt;code&gt;TextFields&lt;/code&gt; is now always enabled by default. The new behavior ensures that the D-pad events from a gamepad or a TV remote first move the cursor in the given direction. The focus can move to another element only when the cursor reaches the end of the text.
&lt;/li&gt;&lt;/ul&gt;
  &lt;p&gt;&lt;/p&gt;


&lt;h3&gt;Upcoming APIs&lt;/h3&gt;
&lt;p&gt;
  In the upcoming Compose 1.12.0 release, the &lt;code&gt;compileSdk&lt;/code&gt; will be upgraded to &lt;code&gt;compileSdk 37&lt;/code&gt;, with AGP 9 and all apps and libraries that depend on Compose inheriting this requirement. We recommend keeping up to date with the latest released versions, as Compose aims to promptly adopt new &lt;code&gt;compileSdks&lt;/code&gt; to provide access to the latest Android features. Be sure to check out the&amp;nbsp;&lt;a href="https://developer.android.com/build/releases/gradle-plugin#api-level-support"&gt;documentation here&lt;/a&gt; for more information on which version of AGP is supported for different API levels. 
&lt;/p&gt;

&lt;p&gt;
  In Compose 1.11.0, the following APIs are introduced as &lt;code&gt;@Experimental&lt;/code&gt;, and we look forward to hearing your feedback as you explore them in your apps. Note that &lt;code&gt;@Experimental&lt;/code&gt; APIs are provided for early evaluation and feedback and may undergo significant changes or removal in future releases.
&lt;/p&gt;

&lt;h2&gt;Styles (Experimental)&lt;/h2&gt;
&lt;p&gt;
  We are introducing a new experimental foundation API for &lt;a href="https://developer.android.com/develop/ui/compose/styles"&gt;styling&lt;/a&gt;. The Style API is a new paradigm for customizing visual elements of components, which has traditionally been performed with modifiers. It is designed to unlock deeper, easier customization by exposing a standard set of styleable properties with simple state-based styling and animated transitions.&amp;nbsp;With this new API, we’re already seeing promising &lt;a href="https://developer.android.com/develop/ui/compose/styles/performance"&gt;performance benefits&lt;/a&gt;. We plan to adopt Styles in Material components once the Style API stabilizes.&lt;/p&gt;

&lt;p&gt;
  A basic example of overriding a pressed state style background:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@Composable
fun LoginButton(modifier: Modifier = Modifier) {
    Button(
        onClick = {
            // Login logic
        },
        modifier = modifier,
        style = {
            background(
                Brush.linearGradient(
                    listOf(lightPurple, lightBlue)
                )
            )
            width(75.dp)
            height(50.dp)
            textAlign(TextAlign.Center)
            externalPadding(16.dp)

            pressed {
                background(
                    Brush.linearGradient(
                        listOf(Color.Magenta, Color.Red)
                    )
                )
            }
        }
    ){
        Text(
            text = "Login",
        )
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&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/AVvXsEhzKgxY8FG0-Yf5HGCa-4OJeBgqmau8GIIODou5Wc4RFgIbI1nPHnO_wOp24UMUdyLoENyIe6iAby97tQLDRQhKVk5RYUVwBt-d5cuC1dcKYjJUVpYqBCKFugjCT4R-d2Hp_oohdUn1YLtJra-VXwQoU4UNgb5YenVsJ2O8H67NtLeZfMMpLLdp1VPJUhE/s900/styles.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="626" data-original-width="900" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzKgxY8FG0-Yf5HGCa-4OJeBgqmau8GIIODou5Wc4RFgIbI1nPHnO_wOp24UMUdyLoENyIe6iAby97tQLDRQhKVk5RYUVwBt-d5cuC1dcKYjJUVpYqBCKFugjCT4R-d2Hp_oohdUn1YLtJra-VXwQoU4UNgb5YenVsJ2O8H67NtLeZfMMpLLdp1VPJUhE/w400-h278/styles.gif" width="400" /&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: left;"&gt;Check out the &lt;a href="https://developer.android.com/develop/ui/compose/styles" target="_blank"&gt;documentation&lt;/a&gt; and file any bugs &lt;a href="https://www.google.com/url?q=https://issuetracker.google.com/issues/new?component%3D612128&amp;amp;sa=D&amp;amp;source=docs&amp;amp;ust=1776894674938834&amp;amp;usg=AOvVaw1Kl3kZ7NxHRGsmZUWh6iT7" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;

&lt;h2&gt;MediaQuery (Experimental)&lt;/h2&gt;
&lt;p&gt;
  The new &lt;code&gt;&lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive/mediaquery"&gt;mediaQuery&lt;/a&gt;&lt;/code&gt; API provides a declarative and performant way to adapt your UI to its environment. It abstracts complex information retrieval into simple conditions within a &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope"&gt;UiMediaScope&lt;/a&gt;&lt;/code&gt;, ensuring recomposition only happens when needed.
&lt;/p&gt;

&lt;p&gt;
  With support for a wide range of environmental signals—from device capabilities like keyboard types and pointer precision, to contextual states like window size and posture—you can build deeply responsive experiences. Performance is baked in with &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/ui/package-summary#derivedMediaQuery(kotlin.Function1)"&gt;derivedMediaQuery&lt;/a&gt;&lt;/code&gt; to handle high-frequency updates, while the ability to override scopes makes testing and previews seamless across hardware configurations.
&lt;/p&gt;

&lt;p&gt;
  Previously, to get access to certain device properties — like if a device was in &lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/make-your-app-fold-aware#features_of_foldable_displays"&gt;tabletop mode&lt;/a&gt; — you’d need to write a lot of boilerplate to do so: 
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@Composable
fun isTabletopPosture(
    context: Context = LocalContext.current
): Boolean {
    val windowLayoutInfo by
        WindowInfoTracker
            .getOrCreate(context)
            .windowLayoutInfo(context)
            .collectAsStateWithLifecycle(null)

    return windowLayoutInfo.displayFeatures.any { displayFeature -&amp;gt;
        displayFeature is FoldingFeature &amp;amp;&amp;amp;
            displayFeature.state == FoldingFeature.State.HALF_OPENED &amp;amp;&amp;amp;
            displayFeature.orientation == FoldingFeature.Orientation.HORIZONTAL
    }
}

@Composable
fun VideoPlayer() {
    if(isTabletopPosture()) {
        TabletopLayout()
    } else {
        FlatLayout()
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Now, with &lt;code&gt;UIMediaQuery&lt;/code&gt;, you can add the &lt;code&gt;mediaQuery&lt;/code&gt; syntax to query device properties, such as if a device is in tabletop mode:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@OptIn(ExperimentalMediaQueryApi::class)
@Composable
fun VideoPlayer() {
    if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) {
        TabletopLayout()
    } else {
        FlatLayout()
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Check out the &lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive/mediaquery"&gt;documentation&lt;/a&gt; and file any bugs &lt;a href="https://issuetracker.google.com/issues?q=componentid:1876021"&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;Grid (Experimental)&lt;/h2&gt;
&lt;p&gt;
  &lt;code&gt;&lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive/grid"&gt;Grid&lt;/a&gt;&lt;/code&gt; is a powerful new API for building complex, two-dimensional layouts in Jetpack Compose. While &lt;code&gt;Row&lt;/code&gt; and &lt;code&gt;Column&lt;/code&gt; are great for linear designs, &lt;code&gt;Grid&lt;/code&gt; gives you the structural control needed for screen-level architecture and intricate components without the overhead of a scrollable list.
&lt;/p&gt;

&lt;p&gt;
  &lt;code&gt;Grid&lt;/code&gt; allows you to define your layout using tracks, gaps, and cells, offering familiar sizing options like &lt;code&gt;Dp&lt;/code&gt;, percentages, intrinsic content sizes, and flexible "Fr" units. 
&lt;/p&gt;

&lt;pre&gt;&lt;span id="docs-internal-guid-f771cc35-7fff-11ce-f06a-37fd1c308045"&gt;&lt;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;@OptIn&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;(ExperimentalGridApi::&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;class&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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-wrap-mode: wrap; vertical-align: baseline;"&gt;@Composable&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;fun &lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;GridExample() {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;Grid(&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;config = {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;repeat(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;4&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;) { column(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;0&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;25f&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;repeat(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;2&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;) { row(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;0&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;5f&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gap(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;16&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;.dp)&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;) {&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Card1(modifier = Modifier.gridItem(rowSpan = &lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;2&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Card2(modifier = Modifier.gridItem(colmnSpan = &lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;3&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Card3(modifier = Modifier.gridItem(columnSpan = &lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;2&lt;/span&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Card4()&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: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir="ltr" style="line-height: 1.8; margin-bottom: 0pt; margin-top: 0pt;"&gt;&lt;span style="font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;div&gt;&lt;span style="color: #37474f; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 9pt; 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;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  You can place items automatically or explicitly span them across multiple rows and columns for precision. Best of all, it’s highly adaptive—you can dynamically reconfigure your grid tracks and spans to respond to device states like tabletop mode or orientation changes, ensuring your UI looks great across form factors.
&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTDUrQltkehSG0RuoiwDzVefCFsJBOn4I4zVYiee1NMYS5UeNdK9j4rP28myI7IwH8Me12xUDF_O5_MOH2dMWnysVD5dc6yx2Ag454bG1ShjuC_0UlX-bv15SJbW0bjSvrMHGbrit9qaNMa8PsDasFzKaoV1gdep3d7tgdaixqd7zvL-CrGbJ_lRIx7KI/s554/Grid.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="550" data-original-width="554" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTDUrQltkehSG0RuoiwDzVefCFsJBOn4I4zVYiee1NMYS5UeNdK9j4rP28myI7IwH8Me12xUDF_O5_MOH2dMWnysVD5dc6yx2Ag454bG1ShjuC_0UlX-bv15SJbW0bjSvrMHGbrit9qaNMa8PsDasFzKaoV1gdep3d7tgdaixqd7zvL-CrGbJ_lRIx7KI/w400-h398/Grid.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
  Check out the &lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive/grid" target="_blank"&gt;documentation&lt;/a&gt; and&amp;nbsp;file any bugs &lt;a href="https://issuetracker.google.com/issues/new?component=1876021&amp;amp;template=1424126" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;FlexBox (Experimental)&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#FlexBox(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.FlexBoxConfig,kotlin.Function1)"&gt;FlexBox&lt;/a&gt; is a layout container designed for high performance, adaptive UIs. It manages item sizing and space distribution based on available container dimensions. It handles complex tasks like wrapping (&lt;code&gt;wrap&lt;/code&gt;) and multi-axis alignment of items (&lt;code&gt;justifyContent&lt;/code&gt;, &lt;code&gt;alignItems&lt;/code&gt;, &lt;code&gt;alignContent&lt;/code&gt;). It allows items to grow (&lt;code&gt;grow&lt;/code&gt;) or shrink (&lt;code&gt;shrink&lt;/code&gt;) to fill the container.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@OptIn(ExperimentalFlexBoxApi::class)
fun FlexBoxWrapping(){
    FlexBox(
        config = {
            wrap(FlexWrap.Wrap)
            gap(8.dp)
        }
    ) {
        RedRoundedBox()
        BlueRoundedBox()
        GreenRoundedBox(modifier = Modifier.width(350.dp).flex { grow(1.0f) })
        OrangeRoundedBox(modifier = Modifier.width(200.dp).flex { grow(0.7f) })
        PinkRoundedBox(modifier = Modifier.width(200.dp).flex { grow(0.3f) })
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmcEvU3D7gpqW-gwblZmbXvzJo-cxVbSJJN0Q5UA4JACUThZ3x1xMUKKRqezPh4LSIWFcj1agYgdmYRwCovI9lCJ48sHZXNyY5bVi8Ow_WNc7718kc5njqAnSjLCDflE1gWcUiZ-lShOlRHDE3jXQygdCVKQqN2yaGIchpbVZaycj2Os-fVgsOzrrU230/s3092/AnimationGif.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1080" data-original-width="3092" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmcEvU3D7gpqW-gwblZmbXvzJo-cxVbSJJN0Q5UA4JACUThZ3x1xMUKKRqezPh4LSIWFcj1agYgdmYRwCovI9lCJ48sHZXNyY5bVi8Ow_WNc7718kc5njqAnSjLCDflE1gWcUiZ-lShOlRHDE3jXQygdCVKQqN2yaGIchpbVZaycj2Os-fVgsOzrrU230/s16000/AnimationGif.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;Check out the&amp;nbsp;&lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox"&gt;documentation&lt;/a&gt;&amp;nbsp;and file any bugs&amp;nbsp;&lt;a href="https://b.corp.google.com/issues/new?component=1876021&amp;amp;title=%5BFlexBox%5D&amp;amp;pli=1&amp;amp;template=0"&gt;here&lt;/a&gt;.&lt;h2&gt;New SlotTable implementation (Experimental)&lt;/h2&gt;
&lt;p&gt;
  We’ve introduced a new implementation of the &lt;code&gt;SlotTable&lt;/code&gt;, which is disabled by default in this release. &lt;code&gt;SlotTable&lt;/code&gt; is the internal data structure that the Compose runtime uses to track the state of your composition hierarchy, track invalidations/recompositions, store remembered values, and track all metadata of the composition at runtime. This new implementation is designed to improve performance, primarily around random edits.
&lt;/p&gt;

&lt;p&gt;
  To try the new &lt;code&gt;SlotTable&lt;/code&gt;, enable &lt;code&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/runtime/ComposeRuntimeFlags?hl=en#isLinkBufferComposerEnabled()"&gt;ComposeRuntimeFlags.isLinkBufferComposerEnabled&lt;/a&gt;&lt;/code&gt;. 
&lt;/p&gt;

&lt;h3&gt;Start coding today!&lt;/h3&gt;
&lt;p&gt;
  With so many exciting new APIs in Jetpack Compose, and many more coming up, it's never been a better time to &lt;a href="https://developer.android.com/develop/ui/compose/migrate/migrate-xml-views-to-jetpack-compose"&gt;migrate to Jetpack Compose&lt;/a&gt;. As always, we value your feedback and feature requests (especially on &lt;code&gt;@Experimental&lt;/code&gt; features that are still baking) — please file them &lt;a href="https://issuetracker.google.com/issues/new?component=612128"&gt;here&lt;/a&gt;. Happy composing!
&lt;/p&gt;&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/883571858646595033/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/jetpack-compose-april-2026-updates.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/883571858646595033" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/883571858646595033" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/jetpack-compose-april-2026-updates.html" rel="alternate" title="What's new in the Jetpack Compose April '26 release" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZHE0FDmx0vqGgZ6V5OvwB9prJFgTdYZbOOkQ1h8bS_5BuTn3TyomD5gYJdqvcJP2rE5Ju4147sThpKYIiCKXQ3DTw2gQtVjWRM23gzPdpDo5jyblVPbjNRqiVVC9bWW92xNYtARsoCDWuyxAiYRyxtgeAQRqI_t6bTR2PFrdQZCHMgXgU82TBolFXXkw/s72-c/0420%20Compose%201.11%20_%20Blog%20(1).png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2628020676055539899</id><published>2026-04-22T13:00:00.000-07:00</published><updated>2026-04-22T13:00:11.551-07:00</updated><title type="text"> Streamline User Journeys with Verified Email via Credential Manager</title><content type="html">&lt;div class="entry-content"&gt;&lt;i&gt;Posted by Niharika Arora, Senior Developer Relations Engineer and Jean-Pierre Pralle, Product Manager, Credential Manager&lt;/i&gt;&lt;/div&gt;&lt;div class="entry-content"&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/b/R29vZ2xl/AVvXsEgrkwBoNh5swqed4VY1XpXFkClSeuytxVntwZHc1t33e6_N49ra3ja_C4d9m_kE9GUuA2AvXz7696z08MAop8fcK1Ac69MB9QnQcBc4Qy-VYPwjjksvUEVzvSwvFRPocxWEVUv71EodUFWOMgBDiTI7TDTys7kqKMVHCpi4R-yDpzGkJVJpPx5Im1r2Yqk/s8419/Streamline-user-animation-V02%20Blog.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" data-original-height="2507" data-original-width="8419" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrkwBoNh5swqed4VY1XpXFkClSeuytxVntwZHc1t33e6_N49ra3ja_C4d9m_kE9GUuA2AvXz7696z08MAop8fcK1Ac69MB9QnQcBc4Qy-VYPwjjksvUEVzvSwvFRPocxWEVUv71EodUFWOMgBDiTI7TDTys7kqKMVHCpi4R-yDpzGkJVJpPx5Im1r2Yqk/s16000/Streamline-user-animation-V02%20Blog.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="text-align: center;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In the modern digital landscape, the first encounter a user has with an app is often the most critical. Yet, for decades, this initial interaction has been hindered by the friction of traditional verification methods. Today, we're excited to announce a &lt;a href="https://developer.android.com/identity/digital-credentials/email-verification"&gt;new verified email credential issued by Google&lt;/a&gt;, which developers can now retrieve directly from Android’s Credential Manager Digital Credential API.&lt;/p&gt;

  &lt;h2&gt;The Problem: Authentication Friction in the Modern Era&lt;/h2&gt;
  &lt;p&gt;The "current era" of authentication is defined by a trade-off between security and convenience. To ensure that a user owns the email address they provide, you typically rely on One-Time Passwords (OTPs) or "magic links" sent by email or SMS.&lt;/p&gt;
  
  &lt;p&gt;While effective, these traditional steps introduce significant hurdles:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Context switching:&lt;/strong&gt; Users must leave the app, open their inbox or messaging app, find the code, and return, a process where many potential users simply drop off.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Delivery issues:&lt;/strong&gt; While Emails are free, they can be delayed or diverted to spam folders.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Onboarding friction:&lt;/strong&gt; Every extra second spent in the "verification loop" is a second where a user might lose interest, directly impacting conversion rates.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;The Solution: Seamless, Verified Email&lt;/h2&gt;
  &lt;p&gt;Google now issues a cryptographically verified email credential directly to Android devices. This verified email credential is delivered through the &lt;a href="https://developer.android.com/identity/credential-manager"&gt;Credential Manager API&lt;/a&gt;, which is Android's implementation of the&lt;a href="https://www.w3.org/TR/digital-credentials/"&gt; W3C's Digital Credential API&lt;/a&gt; standard.&lt;/p&gt;
  
  &lt;p&gt;For users, this completely removes the need to manually verify their email through external channels. For developers, the API securely delivers these verified user claims for any scenario whether you are building an account creation flow, a recovery process, or a high-risk step-up authentication.&lt;/p&gt;
  
  &lt;p&gt;While this specific verified email address is sourced securely from the user's Google Account on their device, the underlying Digital Credentials API is issuer-agnostic. This fosters an open ecosystem, allowing any holder of a digital credential with an email claim to offer that verification to your app.&lt;/p&gt;

  &lt;h2&gt;User Experience&lt;/h2&gt;
  &lt;p&gt;The beauty of this API lies in its simplicity for the end user. Instead of hunting for OTP codes, the experience is integrated directly into the Android OS:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Initiation:&lt;/strong&gt; The process begins when a user focuses on an email input field or taps a "Sign up" or "Recover account" button. You can also initiate the process on page load.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Transparency:&lt;/strong&gt; A native Android bottom sheet appears, clearly detailing exactly what data is being requested (for example, user’s verified email address).&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;One-tap consent:&lt;/strong&gt; The user simply taps "Agree and continue" to share the data.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Immediate progress:&lt;/strong&gt; Once consent is given, the app receives the data instantly. For sign-up or account recovery flows, you can then seamlessly transition the user into passkey creation, ensuring:
      &lt;ul&gt;
        &lt;li&gt;Users do not have to enter any user information manually, as compared to the traditional username/password registration.&lt;/li&gt;
        &lt;li&gt;Their next login is even faster and more secure.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Use case 1. Sign up&lt;/h2&gt;
  &lt;p&gt;Accelerate onboarding by fetching a verified email the moment the user taps "Sign up". We strongly recommend you pair the verified email retrieval with passkey creation, also part of the Credential Manager API:&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB0XD7gJHIVNibV1Ha-Nc9gt6ZtetHbj3Q-kEdl4T2LdraGEjhjuw2_vIu4oJypeeFIVt17ilknHKW6YtLtqVgGG3bu1STEB57NVaquTUzMitGQ6_Kx0rQFTqVCm9Xh16dpx9dnohMoEay851uoBmmyzbE-8FI6BRpKbr7eLz1f4I-vmV_fjXYIp3FDtc/s11200/%E2%80%A2%20(7).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="5000" data-original-width="11200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB0XD7gJHIVNibV1Ha-Nc9gt6ZtetHbj3Q-kEdl4T2LdraGEjhjuw2_vIu4oJypeeFIVt17ilknHKW6YtLtqVgGG3bu1STEB57NVaquTUzMitGQ6_Kx0rQFTqVCm9Xh16dpx9dnohMoEay851uoBmmyzbE-8FI6BRpKbr7eLz1f4I-vmV_fjXYIp3FDtc/s16000/%E2%80%A2%20(7).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Note: You can also fetch other unverified fields such as a user’s given name, family name, name, profile picture and the hosted domain connected with the verified email.&lt;/em&gt;&lt;/p&gt;

  &lt;h2&gt;Use case 2. Account recovery&lt;/h2&gt;
  &lt;p&gt;Eliminate the frustration of users hunting for recovery codes in their spam folders by allowing them to recover their account using the verified email securely stored on their device.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxvTQN0G2H_TJQ8T4lIMNEdmTbeLZ3NocqBv8ilMHZhPz-2W4lyjSYnByGJgf2H6gVBfUqhz7A8BELqWS1eo6xUnp44lzeHD1nG3n0iqrrnpfV7iyUyIIZv7Arfk8MGYr5frMdsA1cyDsR0Bx7zVpcXQD2-g3pTf1HuPj-GimaUXlb47gKT_995Hv5yEw/s11200/%E2%80%A2%20(8).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="5000" data-original-width="11200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxvTQN0G2H_TJQ8T4lIMNEdmTbeLZ3NocqBv8ilMHZhPz-2W4lyjSYnByGJgf2H6gVBfUqhz7A8BELqWS1eo6xUnp44lzeHD1nG3n0iqrrnpfV7iyUyIIZv7Arfk8MGYr5frMdsA1cyDsR0Bx7zVpcXQD2-g3pTf1HuPj-GimaUXlb47gKT_995Hv5yEw/s16000/%E2%80%A2%20(8).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h2&gt;Use case 3. Re-authentication for sensitive actions&lt;/h2&gt;
  &lt;p&gt;Protect sensitive user actions, such as changing settings or updating profile details, by requiring a quick re-authentication step. Instead of an OTP, you can provide a low-friction verification using the device's verified email.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdxwdKc_D_ZADn0IGuUsPHJNmyXxQPgevHU9JgbjVJDF7B6smZCiCUcEJlUfKxejRvCs0gTDLv3XkxLZ7Zu_gPcQ4oY5oxmTCNvLTB9ECY7SPFQ0W5PwREzvEvZUfiq7uFcrR3Ts8bEmn2xa97yzRPam1Ei1J0CyWDZ43e8pWT8nr6FArwu5jlN8jxdVM/s8408/%E2%80%A2%20(9).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="4644" data-original-width="8408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdxwdKc_D_ZADn0IGuUsPHJNmyXxQPgevHU9JgbjVJDF7B6smZCiCUcEJlUfKxejRvCs0gTDLv3XkxLZ7Zu_gPcQ4oY5oxmTCNvLTB9ECY7SPFQ0W5PwREzvEvZUfiq7uFcrR3Ts8bEmn2xa97yzRPam1Ei1J0CyWDZ43e8pWT8nr6FArwu5jlN8jxdVM/s16000/%E2%80%A2%20(9).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h2&gt;Important Considerations&lt;/h2&gt;
  &lt;p&gt;As you design your authentication architecture around the Digital Credentials API, keep the following details in mind:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Account support:&lt;/strong&gt; For the specific email credential issued by Google, only regular consumer Google Accounts are supported (Workspace and supervised accounts are currently not supported). Keep in mind that the Credential Manager API itself is issuer-agnostic, meaning other identity providers can issue credentials with their own account support policies.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Other user data:&lt;/strong&gt; Beyond email, you can request the user's given name, family name, full name, and profile picture. However, note that only the email is verified by Google.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Auto verify your @gmail accounts:&lt;/strong&gt; The API provides verified emails for all consumer Google Accounts. We recommend auto-verifying @gmail.com users and routing custom domains to your existing verification flow - for example, an OTP flow. This ensures you maintain long-term access for external domains not directly managed by Google.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Complementary to Sign in with Google:&lt;/strong&gt; While both the new verified email credential &amp;amp; Sign in with Google API provides a verified email, the choice depends on the intended user experience:
      &lt;ul&gt;
        &lt;li&gt;Use Sign in with Google when your users want to create a federated login session.&lt;/li&gt;
        &lt;li&gt;Use Verified Email when your users want to sign in traditionally with a username/password or passkey but want to auto-verify the email address without the manual chore of an OTP.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Conclusion and Next steps&lt;/h2&gt;
  &lt;p&gt;By integrating &lt;a href="https://developer.android.com/identity/digital-credentials/email-verification"&gt;the new verified email via Credential Manager API&lt;/a&gt;, you can drastically reduce onboarding friction and provide users with a more streamlined, secure authentication journey. This represents a shift toward a future where "verification" is no longer a manual chore for the user, but a seamless, integrated part of the native mobile experience.&lt;/p&gt;
  
  &lt;p&gt;Ready to see how this fits into your own app? To get started, update your project to the latest Credential Manager API and explore our &lt;a href="https://developer.android.com/identity/digital-credentials/email-verification"&gt;Integration Guide&lt;/a&gt;. We encourage you to explore how this streamlined verification can simplify your critical user journeys from optimizing account creation, to enhancing re-authentication flows.&lt;/p&gt;
&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/2628020676055539899/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/streamline-auth-credential-manager-verified-email.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2628020676055539899" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2628020676055539899" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/streamline-auth-credential-manager-verified-email.html" rel="alternate" title=" Streamline User Journeys with Verified Email via Credential Manager" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrkwBoNh5swqed4VY1XpXFkClSeuytxVntwZHc1t33e6_N49ra3ja_C4d9m_kE9GUuA2AvXz7696z08MAop8fcK1Ac69MB9QnQcBc4Qy-VYPwjjksvUEVzvSwvFRPocxWEVUv71EodUFWOMgBDiTI7TDTys7kqKMVHCpi4R-yDpzGkJVJpPx5Im1r2Yqk/s72-c/Streamline-user-animation-V02%20Blog.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-258317609077000702</id><published>2026-04-21T07:00:00.000-07:00</published><updated>2026-04-21T09:55:50.265-07:00</updated><title type="text">Level up your development with Planning Mode and Next Edit Prediction in Android Studio Panda 4 </title><content type="html">&lt;img alt="Panda Statics Metadata Card" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyqbTYSKHw74pe8taXGIeibsDPTF3E2HfJ6FdOSS1Ks5oZf57MawULThH8WnWs-H8Rd-mh4gDAYWhJgKqVUoFPWY5uBRawb0qOagSEKEjJ3F4__Zd3u1rxkA15l_9L_6h8cVpsNA3_60pFredcBWYlC7_MOqRhD_ZCxdH28qvfVMBRhMPhtU7FpoYd0/s2048/Panda-Statics-METACARD_Panda4.png" style="height: 1px; left: -9999px; opacity: 0.01; position: absolute; width: 1px;" /&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyqbTYSKHw74pe8taXGIeibsDPTF3E2HfJ6FdOSS1Ks5oZf57MawULThH8WnWs-H8Rd-mh4gDAYWhJgKqVUoFPWY5uBRawb0qOagSEKEjJ3F4__Zd3u1rxkA15l_9L_6h8cVpsNA3_60pFredcBWYlC7_MOqRhD_ZCxdH28qvfVMBRhMPhtU7FpoYd0/s2048/Panda-Statics-METACARD_Panda4.png" property="og:image"&gt;&lt;/meta&gt;

&lt;meta content="summary_large_image" name="twitter:card"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyqbTYSKHw74pe8taXGIeibsDPTF3E2HfJ6FdOSS1Ks5oZf57MawULThH8WnWs-H8Rd-mh4gDAYWhJgKqVUoFPWY5uBRawb0qOagSEKEjJ3F4__Zd3u1rxkA15l_9L_6h8cVpsNA3_60pFredcBWYlC7_MOqRhD_ZCxdH28qvfVMBRhMPhtU7FpoYd0/s2048/Panda-Statics-METACARD_Panda4.png" name="twitter:image"&gt;&lt;/meta&gt;

&lt;img alt="Panda Statics Metadata Card" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyqbTYSKHw74pe8taXGIeibsDPTF3E2HfJ6FdOSS1Ks5oZf57MawULThH8WnWs-H8Rd-mh4gDAYWhJgKqVUoFPWY5uBRawb0qOagSEKEjJ3F4__Zd3u1rxkA15l_9L_6h8cVpsNA3_60pFredcBWYlC7_MOqRhD_ZCxdH28qvfVMBRhMPhtU7FpoYd0/s2048/Panda-Statics-METACARD_Panda4.png" style="display: none;" /&gt;
&lt;div class="post-body"&gt;&lt;i&gt;Posted by Matt Dyor, Senior Product Manager&lt;/i&gt;&lt;/div&gt;&lt;div class="post-body"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcwLhIy1lD7aMRSF6IpZ9m_d4-jTxSfboP6LwtATN69Q8FHbYwpuSI1GKnVf9g6pu26Z9HsABZ0GDPh5fCAhR75WxlwiLT3Pnq38YPXO7gBKnCwm4ae42U1xovkkPX1OMHBegOKcda85ZrDhKL1rePhSH7I-U6DrVFMP1w1Y8ZpdReF_P0LZ9zsvdLCmk/s800/Android_PandaYawn.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="507" data-original-width="800" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcwLhIy1lD7aMRSF6IpZ9m_d4-jTxSfboP6LwtATN69Q8FHbYwpuSI1GKnVf9g6pu26Z9HsABZ0GDPh5fCAhR75WxlwiLT3Pnq38YPXO7gBKnCwm4ae42U1xovkkPX1OMHBegOKcda85ZrDhKL1rePhSH7I-U6DrVFMP1w1Y8ZpdReF_P0LZ9zsvdLCmk/s16000/Android_PandaYawn.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
    &lt;p&gt;Android Studio Panda 4 is now stable and ready for you to use in production. This release brings Planning Mode, Next Edit Prediction, and more, making it easier than ever to build high-quality Android apps.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="342" src="https://www.youtube.com/embed/ThfXy_Cx4gg" width="563" youtube-src-id="ThfXy_Cx4gg"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;

    &lt;p&gt;Here’s a deep dive into what’s new:&lt;/p&gt;
    &lt;h2 style="margin-bottom: 8px; margin-top: 4px;"&gt;Planning Mode&lt;/h2&gt;Before the Agent starts working on complex tasks for you, it would be helpful if it could come up with a detailed plan. Jumping straight into a large coding project without a design often leads to technical debt or logic errors; the same is true for AI. That’s why we’re adding Planning Mode. &lt;br /&gt;&lt;br /&gt;In this mode, the Agent comes up with a detailed project plan before executing tasks. Instead of a single pass where the model directly predicts the next token of code, Planning Mode facilitates a multi-stage reasoning process — giving the agent additional space to evaluate its own proposed logic for potential issues before presenting it to you. This is especially useful for complex and long-running tasks which demand a high degree of architectural precision.&lt;br /&gt;&lt;br /&gt;To use Planning Mode, switch your conversation mode to "Planning" in the agent input box and enter your prompt. to “Planning” and enter your prompt.&lt;/div&gt;&lt;div class="post-body"&gt;&lt;br /&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/AVvXsEi6oJ9nrugOLWIXvPgtOJdAF7y7YppNlMRZr17ZcW9bdv8S8RuCUt3LmM-LA_KB611DsB7ToBkACvTln2Vt2OgAm1F3sKtMNXSBoTzYLkxW2lFfZScJtr6SAgLc-A_1HIAMkE0vK5BD1_JftXt3X_2DhGZcDHzhDK7NOMfXHQRUYdl0_dOO_tyGEfuCIwI/s818/2-5-walkthrough-artifact.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="590" data-original-width="818" height="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6oJ9nrugOLWIXvPgtOJdAF7y7YppNlMRZr17ZcW9bdv8S8RuCUt3LmM-LA_KB611DsB7ToBkACvTln2Vt2OgAm1F3sKtMNXSBoTzYLkxW2lFfZScJtr6SAgLc-A_1HIAMkE0vK5BD1_JftXt3X_2DhGZcDHzhDK7NOMfXHQRUYdl0_dOO_tyGEfuCIwI/w640-h462/2-5-walkthrough-artifact.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Switch to Planning Mode&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;In Planning Mode, the agent examines your request and may generate an implementation plan for large or complex tasks. You have the opportunity to fix mistakes or clarify which approaches to use—all before the agent has spent any time or tokens heading in the wrong direction.&lt;/div&gt;&lt;div style="text-align: left;"&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/AVvXsEif4x9HhMisD87G7aWsHT68gFho8pkkd1xKkfz-oa9YEwFlah43j9jhH2_AlBunLYjCwTWyTBebcDJyGcL1uXhxqSAx0t9wdgbwyhZrWY-gDLQWLOQBisyEBZyFCkSqVRfEtrAmFOY4QOgXO50ansB0h3SDFOwv5wdg2OKb53Y6MQ3ph_XOmDyt9YNEEDM/s1880/2-2-open-implementation-plan.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="668" data-original-width="1880" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif4x9HhMisD87G7aWsHT68gFho8pkkd1xKkfz-oa9YEwFlah43j9jhH2_AlBunLYjCwTWyTBebcDJyGcL1uXhxqSAx0t9wdgbwyhZrWY-gDLQWLOQBisyEBZyFCkSqVRfEtrAmFOY4QOgXO50ansB0h3SDFOwv5wdg2OKb53Y6MQ3ph_XOmDyt9YNEEDM/w640-h230/2-2-open-implementation-plan.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Open Implementation Plan&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIDkhVTjmbMgGsPuIOA6a7LbrQrC7s9D4dZaV2pYBPfxCebBlPgVuRaEgf7HYh204mcGlWobaJFKnBFFr-EUWx9aia9nlOm-mgObdWa0vEK1nbrTTFEwLOExQoh-qXTMTTwbPfXdMo-oPVeSEuQn4I_GpovrWxrdHo_jM7Z60VJ-krMpP39o0DbeFwKJM/s1314/2-3-add-comments-to-implementation.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1188" data-original-width="1314" height="578" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIDkhVTjmbMgGsPuIOA6a7LbrQrC7s9D4dZaV2pYBPfxCebBlPgVuRaEgf7HYh204mcGlWobaJFKnBFFr-EUWx9aia9nlOm-mgObdWa0vEK1nbrTTFEwLOExQoh-qXTMTTwbPfXdMo-oPVeSEuQn4I_GpovrWxrdHo_jM7Z60VJ-krMpP39o0DbeFwKJM/w640-h578/2-3-add-comments-to-implementation.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Add Comments to Implementation Plan&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;After adding comments, simply hit “Submit Comments” and the agent will use your feedback to revise the implementation plan. To stay on track during execution—which is particularly important with larger changes—the agent organizes its work and generates a &lt;strong&gt;"&lt;/strong&gt;Task List" artifact. You can sit back and watch as the agent methodically completes all of the tasks.&lt;/div&gt;&lt;div style="text-align: left;"&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/AVvXsEgDpN_9KcvJhOGO7zkRUwNS8Sx7Ne7dbL2HQaXg7DpMoUvm1YJdJ2wgj14lUac_v_ahn5ku50GryfAVx7iykD2mOBx0bgtxojYGLG6ZDIKy1hu1k9tIfCkKOTDwt9rWOCI5jUiZbmxmPpGmdjB279oNfim_XV_9VVbgas_2rUBpzXhsH_EbezzLB-vQiAE/s1330/2-4=task-list-artifact.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1084" data-original-width="1330" height="522" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDpN_9KcvJhOGO7zkRUwNS8Sx7Ne7dbL2HQaXg7DpMoUvm1YJdJ2wgj14lUac_v_ahn5ku50GryfAVx7iykD2mOBx0bgtxojYGLG6ZDIKy1hu1k9tIfCkKOTDwt9rWOCI5jUiZbmxmPpGmdjB279oNfim_XV_9VVbgas_2rUBpzXhsH_EbezzLB-vQiAE/w640-h522/2-4=task-list-artifact.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Task List Artifact&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;After the work is done, the agent produces a “Walkthrough” artifact, giving you a clear summary of exactly what has been changed—making it easy to review the agent's changes. Build with more confidence and control using Planning Mode in the latest release of Android Studio.&lt;/div&gt;&lt;div style="text-align: left;"&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/AVvXsEhdZds1C9AsXkKCiN7BJwXcJlWA6hwvt1FYPPs1Zy4xSpmKjVUCydXktrlDxEROk24MNYuKWGVUQlhoLqBBOLJbZEYOZLxH02Wx4Zm87x58ojU2j_WH3PigrR2L2wp7VXrAiUYddN6kOLh3A2bbmNHRl2ikEH_XQ9oa8752yIiYKKPQXYS9gqwf1lxVXmo/s1066/2-1-switch-to-planning-mode.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1066" data-original-width="948" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZds1C9AsXkKCiN7BJwXcJlWA6hwvt1FYPPs1Zy4xSpmKjVUCydXktrlDxEROk24MNYuKWGVUQlhoLqBBOLJbZEYOZLxH02Wx4Zm87x58ojU2j_WH3PigrR2L2wp7VXrAiUYddN6kOLh3A2bbmNHRl2ikEH_XQ9oa8752yIiYKKPQXYS9gqwf1lxVXmo/w570-h640/2-1-switch-to-planning-mode.png" width="570" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Add Comments to Implementation Plan&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;h2&gt;Next Edit Prediction&lt;/h2&gt;Classic autocomplete is great for finishing your sentences, but coding is rarely a linear path. Often, a change in one place requires a secondary change elsewhere—like adding a new parameter to a function and then needing to update its invocations, or a UI preview update when a Composable is changed. Traditionally, this meant breaking your focus to hunt down the related lines of code that need attention.&lt;br /&gt;&lt;br /&gt;Next Edit Prediction (NEP) evolves code completion by anticipating your next move, even when it’s not at your current cursor position. By analyzing your recent edits, Android Studio recognizes the logical pattern of your workflow. If you modify a data class or update a constructor, NEP can suggest the next relevant edit—perhaps in a distant function—allowing you to jump straight to the fix.&lt;br /&gt;&lt;br /&gt;Instead of manually navigating back and forth, you can accept these multi-location suggestions with a single keystroke. This keeps you deep in the "flow state," reducing the cognitive load of routine updates and letting you focus on the complex logic that truly matters to your application. Experience a more intuitive, non-linear way to code in the latest version of Android Studio.&lt;/div&gt;&lt;div class="post-body"&gt;&lt;br /&gt;&amp;nbsp;

    &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKq8ewj9R9p615zFs_G9FqSKJhWtEa_dh2ooTPilsTtg81XdaICe9UNiilbHU4-nMLamd3HSEFwArCdatMOMAKLiaNX6sUnWXEocCOVbR52eSKyWaWxjUOfOTrAFRCK_c-2jogM2fcRU0T6Ht8y2robm_f7mgfSZCBQ99Hb_fyWxwySO-7Z3BuziA2B5w/s974/3-1-nep-update.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="613" data-original-width="974" height="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKq8ewj9R9p615zFs_G9FqSKJhWtEa_dh2ooTPilsTtg81XdaICe9UNiilbHU4-nMLamd3HSEFwArCdatMOMAKLiaNX6sUnWXEocCOVbR52eSKyWaWxjUOfOTrAFRCK_c-2jogM2fcRU0T6Ht8y2robm_f7mgfSZCBQ99Hb_fyWxwySO-7Z3BuziA2B5w/w640-h402/3-1-nep-update.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;NEP Updating Function Name&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;em&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/em&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/AVvXsEg2PxN_g14yXOFXOeBqQ8wC5GbPaeIWFQQ3AqkXzreTjnMMPJb-AM8V6wGs68ufeJDozAnRQzuXV2JgKs6lJwi8LHJq4iaQ_3jqOXkMFouGSYF4WNepHFgnkyUn153WCNOBFQ8rtJpIm77H720uywImSTRqvFm-3NWi0HtDzf2K9Lj1Y4y7ctecclyNoKI/s812/3-2-nep-addition.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="290" data-original-width="812" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2PxN_g14yXOFXOeBqQ8wC5GbPaeIWFQQ3AqkXzreTjnMMPJb-AM8V6wGs68ufeJDozAnRQzuXV2JgKs6lJwi8LHJq4iaQ_3jqOXkMFouGSYF4WNepHFgnkyUn153WCNOBFQ8rtJpIm77H720uywImSTRqvFm-3NWi0HtDzf2K9Lj1Y4y7ctecclyNoKI/w640-h229/3-2-nep-addition.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;NEP Adding New Line&lt;/i&gt;&lt;/div&gt;

    &lt;h2&gt;Gemini API Starter Template&lt;/h2&gt;Adding powerful AI features to your app just got easier, introducing the Gemini API Starter Template for Android Studio! &lt;br /&gt;&lt;br /&gt;Integrating generative AI into your Android application used to mean managing complex backend plumbing and worrying about API key security. With the new Gemini API Starter template in Android Studio, developers can now jump straight into building features rather than spending time configuring infrastructure.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Key benefits include:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Zero API key management: &lt;/b&gt;Stop worrying about provisioning or rotating keys. By leveraging Firebase AI Logic, the template eliminates the need to embed sensitive credentials in your client-side code.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Automated Firebase integration: &lt;/b&gt;The backend plumbing is handled for you. The template automatically connects your project to Firebase services, ensuring a secure bridge between your app and Google’s Gemini models.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Built to scale: &lt;/b&gt;This isn't just for prototypes. The production-ready architecture allows you to scale from a local test to a global user base without redesigning your foundation.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Multimodal processing:&lt;/b&gt; Supports text, image, video, and audio inputs. You can build features like real-time image analysis, video summarization, and audio transcription.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
    &lt;/ul&gt;

    &lt;h3 style="text-align: left;"&gt;&lt;b&gt;Get Started&lt;/b&gt;&lt;/h3&gt;
    &lt;ol&gt;
        &lt;li&gt;Open Android Studio.&lt;/li&gt;
        &lt;li&gt;Navigate to &lt;strong&gt;File &amp;gt; New &amp;gt; New Project&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;Select the &lt;strong&gt;Gemini API Starter&lt;/strong&gt; template from the gallery.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_3gKI_SyCoB8EHqBbWe2Yr8cM7cZ7Fh4NqP4dx9OE0LalkaMIKZ3vKwLEzBehECmlUD-8hGCP_Ysux5bFH94VsCIYHE6UTvE8OwRZ_ua_LnE0BchYyRxd8w7mTmvRM7KC5XTS485VFbzuWEqWGCyKU4tTSNUT0yICxSJ1-M8jlqf6XhEYAgjtnRo10qk/s621/4-1-gemini-api-template.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="466" data-original-width="621" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_3gKI_SyCoB8EHqBbWe2Yr8cM7cZ7Fh4NqP4dx9OE0LalkaMIKZ3vKwLEzBehECmlUD-8hGCP_Ysux5bFH94VsCIYHE6UTvE8OwRZ_ua_LnE0BchYyRxd8w7mTmvRM7KC5XTS485VFbzuWEqWGCyKU4tTSNUT0yICxSJ1-M8jlqf6XhEYAgjtnRo10qk/w640-h480/4-1-gemini-api-template.png" width="640" /&gt;&lt;/a&gt;&lt;i&gt;Gemini API Starter new project template&lt;/i&gt;&lt;/div&gt;

    &lt;h2&gt;Agent Web Search&lt;/h2&gt;When you’re deep in development, the right answer is often just a search away—but leaving your IDE to find it can snap you out of your flow. Whether you need the exact version number for a dependency or the latest API changes for a third-party library, the Agent Web Search tool is here to help without you ever having to leave Android Studio.&lt;br /&gt;&lt;br /&gt;While Android Studio’s agent already leverages the &lt;a href="https://developer.android.com/studio/gemini/knowledge-base"&gt;Android Knowledge Base&lt;/a&gt; for official documentation, modern Android development relies on a vast ecosystem of external libraries. Agent Web Search expands Gemini's reach, allowing it to query Google directly to fetch current reference material from across the web. From checking the latest setup guides for Coil to finding advanced configuration tips for Koin or Moshi, the agent can now pull in the most up-to-date information in real time.&lt;br /&gt;&lt;br /&gt;The Agent Web Search tool is designed to be helpful but unobtrusive; it will automatically trigger a web search when it identifies a gap in its local knowledge. You can also take the wheel by asking it to find something specific—simply include "search the web for..." in your prompt. By integrating live web results directly into your workspace, Agent Web Search ensures you’re always building with the most current data available, speeding up your workflow and keeping your project on the cutting edge.&lt;/div&gt;&lt;div class="post-body"&gt;&lt;br /&gt;&amp;nbsp;

    &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwPIwFg4HbmO-2534wIfXsZ96IHw82RsxXRJwNT8XCXcILpr88_rC8fzCvM1GwWLEEOIs6iCIYnpYkjKXcAod_gKGa5OWCOGScQBnVYD4DqEaRGShSfP6-unwc24x8hm4j-kgQytEGOy9IXTxt8wfZbDo10JI8ngngT8hqjgmOZ0U0DrVxWnxIGP9X0Dg/s597/trash-5-1-aws-invocation.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="336" data-original-width="597" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwPIwFg4HbmO-2534wIfXsZ96IHw82RsxXRJwNT8XCXcILpr88_rC8fzCvM1GwWLEEOIs6iCIYnpYkjKXcAod_gKGa5OWCOGScQBnVYD4DqEaRGShSfP6-unwc24x8hm4j-kgQytEGOy9IXTxt8wfZbDo10JI8ngngT8hqjgmOZ0U0DrVxWnxIGP9X0Dg/w640-h360/trash-5-1-aws-invocation.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;Agent Web Search Tool Invocation&lt;/i&gt;&lt;/div&gt;

    &lt;h3 style="text-align: left;"&gt;Android Studio Panda Releases&lt;/h3&gt;
&lt;div&gt;
  Panda 4 continues Android Studio’s focus on accelerating developer productivity with AI. 
  Check out &lt;a href="https://android-developers.googleblog.com/2026/05/go-from-prompt-to-working-prototype.html" style="color: #1a73e8; text-decoration: none;" target="_blank"&gt;Go from prompt to working prototype with Android Studio Panda 2&lt;/a&gt; 
  and&amp;nbsp;&lt;a href="https://android-developers.googleblog.com/2026/04/Increase-Guidance-and-Control-over-Agent-Mode-with-Android-Studio-Panda-3.html" style="color: #1a73e8; text-decoration: none;"&gt;Increase Guidance and Control over Agent Mode with Android Studio Panda 3&lt;/a&gt;.
&lt;/div&gt;

&lt;p&gt;
  &lt;a href="https://android-developers.googleblog.com/2026/05/go-from-prompt-to-working-prototype.html" style="color: #1a73e8; font-size: 1.1em; text-decoration: none;" target="_blank"&gt;
    &lt;b&gt;Android Studio Panda 2&lt;/b&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;ul style="line-height: 1.6; text-align: left;"&gt;
  &lt;li&gt;&lt;b&gt;AI-powered New Project flow:&lt;/b&gt; Allows you to build a working app prototype with a single prompt. The agent manages initial setup, navigation configuration, and proper dependencies, and features an autonomous generation loop to handle build errors and deploy to an emulator.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Version Upgrade Assistant:&lt;/b&gt; Automates dependency management and updates, iteratively attempting builds and resolving conflicts until a stable configuration is found.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  &lt;a href="https://android-developers.googleblog.com/2026/04/Increase-Guidance-and-Control-over-Agent-Mode-with-Android-Studio-Panda-3.html" style="color: #1a73e8; font-size: 1.1em; text-decoration: none;" target="_blank"&gt;
    &lt;b&gt;Android Studio Panda 3&lt;/b&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;ul style="line-height: 1.6; text-align: left;"&gt;
  &lt;li&gt;&lt;b&gt;Agent skills:&lt;/b&gt; Specialized, user-defined instructions (stored in a .skills directory) that teach the AI agent project-specific capabilities, coding standards, or library usage.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Agent permissions:&lt;/b&gt; Provides fine-grained control over what agents can do, with features like "Always Allow" rules for trusted operations. For even more security, you can also use an optional sandbox to enforce strict, isolated control over the agent.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Empty Car App Library App template:&lt;/b&gt; Simplifies building driving-optimized apps for Android Auto and Android Automotive OS by handling required boilerplate code.&lt;/li&gt;
&lt;/ul&gt;&lt;h3 style="text-align: left;"&gt;Get started&lt;/h3&gt;&lt;div style="text-align: left;"&gt;Dive in and accelerate your development. &lt;a href="https://developer.android.com/studio" target="_blank"&gt;Download&lt;/a&gt; Android Studio Panda 4 and start exploring these powerful new agentic features today.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;As always, your feedback is crucial to us. &lt;a href="https://developer.android.com/studio/known-issues" target="_blank"&gt;Check known issues&lt;/a&gt;, &lt;a href="https://developer.android.com/studio/report-bugs" target="_blank"&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" target="_blank"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://medium.com/androiddevelopers" target="_blank"&gt;Medium&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://twitter.com/androidstudio" target="_blank"&gt;X&lt;/a&gt;. Happy coding!&lt;/div&gt;

&lt;div style="height: 0px; left: -9999px; overflow: hidden; position: absolute;"&gt;
  Android Studio, androidstudio, Android Studio Panda, featured, 
  Gemini in Android Studio, AI-powered new project flow, version upgrade assistant
&lt;/div&gt;
&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/258317609077000702/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/android-studio-panda-4-planning-mode-next-edit-prediction.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/258317609077000702" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/258317609077000702" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/android-studio-panda-4-planning-mode-next-edit-prediction.html" rel="alternate" title="Level up your development with Planning Mode and Next Edit Prediction in Android Studio Panda 4 " type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyqbTYSKHw74pe8taXGIeibsDPTF3E2HfJ6FdOSS1Ks5oZf57MawULThH8WnWs-H8Rd-mh4gDAYWhJgKqVUoFPWY5uBRawb0qOagSEKEjJ3F4__Zd3u1rxkA15l_9L_6h8cVpsNA3_60pFredcBWYlC7_MOqRhD_ZCxdH28qvfVMBRhMPhtU7FpoYd0/s72-c/Panda-Statics-METACARD_Panda4.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4806905801068539873</id><published>2026-04-17T13:00:00.000-07:00</published><updated>2026-04-17T13:15:00.398-07:00</updated><title type="text">Experimental hybrid inference and new Gemini models for Android</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoPylOD-Ekyhe8AVg3iMvz6S1rsvUT_2Eb4m-77FRH4eebi5psKE8VJwu6xVxCzKXyTXpoxb3-k04e21C6-8KX0BQw0qiCBGToSHJzVYQRckBYqby9csdOCHWp_23DTfPOpWqfjFTL-vJh86Q-DhGLZnbs1L62q4iUsaHHWlpQ2oyLXo3OO0rGsH9ngxw/s1600/Hybrid%20inference%20solution%20for%20Android%20%20-%20Meta.png" property="og:image"&gt;&lt;/meta&gt;
&lt;div style="display: none;"&gt;
  &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoPylOD-Ekyhe8AVg3iMvz6S1rsvUT_2Eb4m-77FRH4eebi5psKE8VJwu6xVxCzKXyTXpoxb3-k04e21C6-8KX0BQw0qiCBGToSHJzVYQRckBYqby9csdOCHWp_23DTfPOpWqfjFTL-vJh86Q-DhGLZnbs1L62q4iUsaHHWlpQ2oyLXo3OO0rGsH9ngxw/s1600/Hybrid%20inference%20solution%20for%20Android%20%20-%20Meta.png" /&gt;
&lt;/div&gt;&lt;i&gt;Posted by Thomas Ezan, Senior Developer Relations Engineer&lt;/i&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/AVvXsEg4_6pZO5RgA6G3e721iCaVVSfrwZStUKlddvxF2XgQc7M0VGtG8_KPiv7ZEkx4_a7xo2HiltuDyw55rGH7KoVn58oSU7xJ4LOWkaBfNn6TfdBxN9aCBsW-KMW9cN0wF-4NIFTXAOu4pBs0xP-43SDm3mpQ5yODRQ-NAdwP4SH6virP8z0CTDlC9fvOE9Y/s8419/Hybrid%20inference%20solution%20for%20Android%20-%20Blog%20%20(1).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/AVvXsEg4_6pZO5RgA6G3e721iCaVVSfrwZStUKlddvxF2XgQc7M0VGtG8_KPiv7ZEkx4_a7xo2HiltuDyw55rGH7KoVn58oSU7xJ4LOWkaBfNn6TfdBxN9aCBsW-KMW9cN0wF-4NIFTXAOu4pBs0xP-43SDm3mpQ5yODRQ-NAdwP4SH6virP8z0CTDlC9fvOE9Y/s16000/Hybrid%20inference%20solution%20for%20Android%20-%20Blog%20%20(1).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;p&gt;If you are an Android developer looking to implement innovative AI features into your app, we recently launched powerful new updates: Hybrid inference, a new API for Firebase AI Logic to leverage both on-device and Cloud inference, and support for new Gemini models including the latest Nano Banana models for image generation.&lt;/p&gt;

&lt;p&gt;Let’s jump in!&lt;/p&gt;

&lt;h2&gt;Experiment with hybrid inference&lt;/h2&gt;

&lt;p&gt;With the new &lt;a href="https://firebase.google.com/docs/ai-logic/hybrid/android/get-started?api=dev"&gt;Firebase API for hybrid inference&lt;/a&gt;, we implemented a simple rule-based routing approach as an initial solution to let you use both on-device and cloud inference via a unified API. We are planning on providing more sophisticated routing capabilities in the future.&lt;/p&gt;

&lt;p&gt;It allows your app to dynamically switch between Gemini Nano running locally on the device and cloud-hosted Gemini models. The on-device execution uses ML Kit's Prompt API. The cloud inference supports all the Gemini models from Firebase AI Logic in both Vertex AI and the Developer API.&lt;/p&gt;

&lt;p&gt;To use it, add the &lt;code&gt;firebase-ai-ondevice&lt;/code&gt; dependencies to your app along with Firebase AI Logic:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;dependencies {
 [...] 
 implementation("com.google.firebase:firebase-ai:17.11.0")
 implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;During initialization, you create a &lt;code&gt;GenerativeModel&lt;/code&gt; instance and configure it with specific inference modes, such as &lt;code&gt;PREFER_ON_DEVICE&lt;/code&gt; (falls back to cloud if&amp;nbsp;Gemini Nano is not available on the device) or &lt;code&gt;PREFER_IN_CLOUD&lt;/code&gt; (falls back to on-device inference if offline):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "gemini-3.1-flash-lite",
        onDeviceConfig = OnDeviceConfig(
           mode = InferenceMode.PREFER_ON_DEVICE
        )
    )

val response = model.generateContent(prompt)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The Firebase API for hybrid inference for Android is still experimental, and we encourage you to try it in your app, especially if you are already using Firebase AI Logic. Currently, on-device models are specialized for single-turn text generation based on text or single Bitmap image inputs. Review the &lt;a href="https://firebase.google.com/docs/ai-logic/hybrid/android/get-started?api=dev#features-not-yet-available"&gt;limitations&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;We just published a &lt;a href="https://github.com/android/ai-samples/tree/main/samples/gemini-hybrid"&gt;new sample in the AI Sample Catalog leveraging the Firebase API for hybrid&lt;/a&gt;; it demonstrates how the Firebase API for hybrid inference can be used to generate a review based on a few selected topics and then translating it into various languages. Check out the code to see it in action!&lt;/p&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/AVvXsEh6VaPz5_ZUBQI0yLu4Pkr0FVCWhKv-6TfUr3wmN3SMoVGZJLolOEP8vS966Y42P0bvC-EdQQocotdvE232ho72Ld772uWp8PNi-OdFq_IMNgQVjPNSJGoo38cDZZNYKgDH1lVi9nimXoTaaVqFm4eJNsBulaGIHmQnEM-7L2H5GgkVSou6tDfxIhXGftE/s1440/Hybrid_Inference-Inline-imagery%20(1).gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1440" data-original-width="1440" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6VaPz5_ZUBQI0yLu4Pkr0FVCWhKv-6TfUr3wmN3SMoVGZJLolOEP8vS966Y42P0bvC-EdQQocotdvE232ho72Ld772uWp8PNi-OdFq_IMNgQVjPNSJGoo38cDZZNYKgDH1lVi9nimXoTaaVqFm4eJNsBulaGIHmQnEM-7L2H5GgkVSou6tDfxIhXGftE/w640-h640/Hybrid_Inference-Inline-imagery%20(1).gif" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;div style="text-align: center;"&gt;&lt;i style="font-weight: normal;"&gt;The new hybrid inference sample in action&lt;/i&gt;&lt;/div&gt;

&lt;h2&gt;Try our new models&lt;/h2&gt;

&lt;p&gt;As part of the new Gemini models, we've released two models particularly helpful to Android developers and easy to integrate in your application via the Firebase AI Logic SDK.&lt;/p&gt;

&lt;h3&gt;Nano Banana&lt;/h3&gt;
&lt;p&gt;Last year we released Nano Banana, a state-of-the-art image generation model. And a few weeks ago, we released a couple of new Nano Banana models.&lt;/p&gt;

&lt;a href="https://deepmind.google/models/gemini-image/pro/"&gt;Nano Banana Pro (Gemini 3 Pro Image)&lt;/a&gt; is designed for professional asset production and can render high-fidelity text, even in a specific font or simulating different types of handwriting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="https://deepmind.google/models/gemini-image/flash/"&gt;Nano Banana 2 (Gemini 3.1 Flash Image)&lt;/a&gt; is the high-efficiency counterpart to Nano Banana Pro. It's optimized for speed and high-volume use cases. It can be used for a broad range of use cases (infographics, virtual stickers, contextual illustrations, etc.).&lt;br /&gt;&lt;ul&gt;
&lt;/ul&gt;

&lt;p&gt;The new Nano Banana models leverage real-world knowledge and deep reasoning capabilities to generate precise and detailed images.&lt;/p&gt;

&lt;p&gt;We updated our Magic Selfie sample (use image generation to change the background of your selfie!) to use Nano Banana 2. The background segmentation is now handled directly with the image generation model which makes the implementation easier and lets Nano Banana 2 improved image generation capabilities shine. See it in action &lt;a href="https://github.com/android/ai-samples/tree/main/samples/magic-selfie"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;img height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgtCKSZ8de610IYRl704wX8u30O56GNCKj10heNFZohoC92VVRGOJcZtYRY36DvVnHxy46KVeuunNTd8FNWmlFavvfDXn7EwwDNnUXEBXnTzBYHxL2Td1jvL30QuL-FozQ5IiDVAFaj8fyBkjmz5VTOAsASSjlY_AYZnHy_kAAuNit_C51uJgL7EeXHz7Q=w304-h640" width="304" /&gt;&lt;/div&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;The updated Magic Selfie sample uses Nano Banana 2 to update a selfie background&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;p&gt;You can use it via Firebase AI Logic SDK. Read more about it in the &lt;a href="https://developer.android.com/ai/gemini/developer-api#generate-images"&gt;Android documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Gemini 3.1 Flash-Lite&lt;/h3&gt;
&lt;p&gt;We also released &lt;a href="https://deepmind.google/models/model-cards/gemini-3-1-flash-lite/"&gt;Gemini 3.1 Flash-Lite&lt;/a&gt;, a new version of the Gemini Flash-Lite family. The Gemini Flash-Lite models have been particularly favored by Android developers for its good quality/latency ratio and low inference cost. It’s been used by Android developers for various use-cases such as in-app messaging translation or generating a recipe from a picture of a dish.&lt;/p&gt;

&lt;p&gt;Gemini 3.1 Flash-Lite, currently in preview, will enable more advanced use cases with latency comparable to Gemini 2.5 Flash-Lite. To learn more about this model, review the &lt;a href="https://firebase.google.com/docs/ai-logic/models"&gt;Firebase documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;It’s a great time to explore the new Hybrid sample in our catalog to see these capabilities in action and understand the benefits of routing between on-device and cloud inference. We also encourage you to check out our documentation to test the new Gemini models.&lt;/p&gt;&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/4806905801068539873/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/Hybrid-inference-and-new-AI-models-are-coming-to-Android.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4806905801068539873" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4806905801068539873" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/Hybrid-inference-and-new-AI-models-are-coming-to-Android.html" rel="alternate" title="Experimental hybrid inference and new Gemini models for Android" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoPylOD-Ekyhe8AVg3iMvz6S1rsvUT_2Eb4m-77FRH4eebi5psKE8VJwu6xVxCzKXyTXpoxb3-k04e21C6-8KX0BQw0qiCBGToSHJzVYQRckBYqby9csdOCHWp_23DTfPOpWqfjFTL-vJh86Q-DhGLZnbs1L62q4iUsaHHWlpQ2oyLXo3OO0rGsH9ngxw/s72-c/Hybrid%20inference%20solution%20for%20Android%20%20-%20Meta.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-6716496097147764449</id><published>2026-04-16T13:00:00.000-07:00</published><updated>2026-04-21T03:49:37.579-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android17"/><category scheme="http://www.blogger.com/atom/ns#" term="Beta"/><title type="text">The Fourth Beta of Android 17</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEjRi_pfW7jI2yTebiDh4niQsTN1UL9MmUbO1DUy_ensXVVhStxJt5PUfBSQVOkpOC4ReJ1G2OMtpOZj0fq_3XiUY3fVq91hldHzZU-FPcHkLnG33NAEAV9Wxl4PVZWJHUwbbi1mZxUzQA5YIOGMhDC6mL00CYZei7fNAGDpMhK1JqtlwIOtoIVmIZn2XTE" property="og:image"&gt;&lt;/meta&gt;

&lt;meta content="summary_large_image" name="twitter:card"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEjRi_pfW7jI2yTebiDh4niQsTN1UL9MmUbO1DUy_ensXVVhStxJt5PUfBSQVOkpOC4ReJ1G2OMtpOZj0fq_3XiUY3fVq91hldHzZU-FPcHkLnG33NAEAV9Wxl4PVZWJHUwbbi1mZxUzQA5YIOGMhDC6mL00CYZei7fNAGDpMhK1JqtlwIOtoIVmIZn2XTE" name="twitter:image"&gt;&lt;/meta&gt;

&lt;img alt="Featured Metadata Image" src="https://blogger.googleusercontent.com/img/a/AVvXsEjRi_pfW7jI2yTebiDh4niQsTN1UL9MmUbO1DUy_ensXVVhStxJt5PUfBSQVOkpOC4ReJ1G2OMtpOZj0fq_3XiUY3fVq91hldHzZU-FPcHkLnG33NAEAV9Wxl4PVZWJHUwbbi1mZxUzQA5YIOGMhDC6mL00CYZei7fNAGDpMhK1JqtlwIOtoIVmIZn2XTE" style="height: 1px; left: -9999px; opacity: 0.01; position: absolute; width: 1px;" /&gt;
&lt;div&gt;&lt;i&gt;Posted by Dan Galpin, Developer Relations Engineer&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/AVvXsEgEq1ZzmrzFT6TQrAQEnFFtGjEewn6KV8agh0vWMj1DDmokXVbYQns14dj-zgya-ALvJoS-CQd118t-RgMncsR6zfOPqNvvYOm_ETomGHIExmUwC2sJ3QqLJvS5wjRNhn2qESbefeVRJzcL_rQ5-LCgwgkFMMbdFikuEJUUgVdgKTFztSwaATcS9GYfHiw/s6314/Android%2017%20Beta-3%20Banner%20(1).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1880" data-original-width="6314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEq1ZzmrzFT6TQrAQEnFFtGjEewn6KV8agh0vWMj1DDmokXVbYQns14dj-zgya-ALvJoS-CQd118t-RgMncsR6zfOPqNvvYOm_ETomGHIExmUwC2sJ3QqLJvS5wjRNhn2qESbefeVRJzcL_rQ5-LCgwgkFMMbdFikuEJUUgVdgKTFztSwaATcS9GYfHiw/s16000/Android%2017%20Beta-3%20Banner%20(1).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;p&gt;Android 17 has reached beta 4, the last scheduled beta of this release cycle, a critical milestone for app compatibility and platform stability. Whether you're fine-tuning your app's user experience, ensuring smooth edge-to-edge rendering, or leveraging the newest APIs, Beta 4 provides the near-final environment you need to be testing with.&lt;/p&gt;

&lt;h3&gt;Get your apps, libraries, tools, and game engines ready!&lt;/h3&gt;
&lt;p&gt;If you develop an Android SDK, library, tool, or game engine, it's critical 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/AVvXsEj_sAqwsBgETGFvPCfaavnq5fNx4S-ey-UzxhfTp6A1Sji7v1ZrbVRF9gAkq_5VMcmV_R4PdWIE5HphsWTqujq6Q9FlRiUoBak1Gjt5VOl9f-__nzxX4JRm4rnVIyhRYiFqriSoliTmSGqRRN6iq8uDsWS1rI8ivYEAOBDdk8ARCUmR9_McCvuuU4ahGQ8/s3840/Android%2017%20Timeline%2001%20V02%20(2)%20(1).png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="2161" data-original-width="3840" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sAqwsBgETGFvPCfaavnq5fNx4S-ey-UzxhfTp6A1Sji7v1ZrbVRF9gAkq_5VMcmV_R4PdWIE5HphsWTqujq6Q9FlRiUoBak1Gjt5VOl9f-__nzxX4JRm4rnVIyhRYiFqriSoliTmSGqRRN6iq8uDsWS1rI8ivYEAOBDdk8ARCUmR9_McCvuuU4ahGQ8/s16000/Android%2017%20Timeline%2001%20V02%20(2)%20(1).png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;/p&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 4. Work through all your app's flows and look for functional or UI issues. Each release of Android contains platform changes that improve privacy, security, and overall user experience; review the app impacting behavior changes for apps &lt;a href="https://developer.android.com/about/versions/17/behavior-changes-all"&gt;running on&lt;/a&gt; and &lt;a href="https://developer.android.com/about/versions/17/behavior-changes-17"&gt;targeting&lt;/a&gt; Android 17 to focus your testing, including the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Resizability on large screens:&lt;/strong&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;strong&gt;Dynamic code loading:&lt;/strong&gt; If your app targets Android 17 or higher, the Safer Dynamic Code Loading (DCL) protection &lt;a href="https://developer.android.com/about/versions/14/behavior-changes-14#safer-dynamic-code-loading"&gt;introduced in Android 14&lt;/a&gt; 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;strong&gt;Enable CT by default:&lt;/strong&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 &lt;a href="https://developer.android.com/privacy-and-security/security-config#certificateTransparency"&gt;opt in&lt;/a&gt;.)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Local network protections:&lt;/strong&gt; Apps targeting Android 17 or higher have &lt;a href="https://developer.android.com/privacy-and-security/local-network-permission#android-17-enforcement"&gt;local network access blocked by default&lt;/a&gt;. Switch to using privacy preserving pickers if possible, and use the new &lt;a href="https://developer.android.com/reference/kotlin/android/Manifest.permission#access_local_network"&gt;ACCESS_LOCAL_NETWORK&lt;/a&gt; permission for broad, persistent access.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Background audio hardening:&lt;/strong&gt; Starting in Android 17, the audio framework enforces &lt;a href="https://developer.android.com/about/versions/17/changes/bg-audio"&gt;restrictions on background audio interactions&lt;/a&gt; including audio playback, &lt;a href="https://developer.android.com/media/optimize/audio-focus"&gt;audio focus&lt;/a&gt; requests, and &lt;a href="https://developer.android.com/reference/android/media/AudioManager#adjustStreamVolume(int,%20int,%20int)"&gt;volume change&lt;/a&gt; APIs. Based on your feedback, we’ve made some changes since beta 2, including targetSDK gating while-in-use FGS enforcement and exempting alarm audio. Full details available in &lt;a href="https://developer.android.com/about/versions/17/changes/bg-audio"&gt;updated guidance&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;App memory limits&lt;/h3&gt;
&lt;p&gt;Android is introducing app memory limits based on the device's total RAM to create a more stable and deterministic environment for your applications and Android users. In Android 17, limits are set conservatively to establish system baselines, targeting extreme memory leaks and other outliers before they trigger system-wide instability resulting in UI stuttering, higher battery drain, and apps being killed. While we anticipate minimal impact on the vast majority of app sessions, we recommend the &lt;a href="https://developer.android.com/topic/performance/memory"&gt;following memory best practices&lt;/a&gt;, including establishing a baseline for memory.&lt;/p&gt;

&lt;p&gt;In the current implementation, &lt;a href="https://developer.android.com/reference/android/app/ApplicationExitInfo#getDescription()"&gt;getDescription&lt;/a&gt; in &lt;a href="https://developer.android.com/reference/kotlin/android/app/ApplicationExitInfo"&gt;ApplicationExitInfo&lt;/a&gt;&amp;nbsp;will contain the string "MemoryLimiter" if your app was impacted. You can also use &lt;a href="https://developer.android.com/topic/performance/tracing/profiling-manager/trigger-based-capture"&gt;trigger-based profiling&lt;/a&gt; with &lt;a href="https://developer.android.com/reference/android/os/ProfilingTrigger#TRIGGER_TYPE_ANOMALY"&gt;TRIGGER_TYPE_ANOMALY&lt;/a&gt; to get heap dumps that are collected when the memory limit is hit.&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span id="docs-internal-guid-d4861f27-7fff-b96d-4122-2c1bbd6bff29"&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 style="border: none; display: inline-block; height: 295px; overflow: hidden; width: 624px;"&gt;&lt;img height="295" src="https://blogger.googleusercontent.com/img/a/AVvXsEg-8qL-AbPrbUrvk9Othuvb2JjbGvZwc--3CFZ3UrBMMEo4PMkcLGkEXioFkeNmGZX3TBmIYZ0iCeZ5hVKxnW2IvE4Q3SFsSNUXrx2bRRsbOdnvkjbtpr_SsNXMQvNIQGFaWI-yHM5wZlp8zby27MQW-JRL4YkKwEfUupEuOtt72ePjRSac518BqsHuTgg" style="margin-left: 0px; margin-top: 0px;" width="624" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;The LeakCanary task in the Android Studio Profiler&lt;/i&gt;&lt;/div&gt;&lt;/i&gt;&lt;p&gt;To help you find memory leaks, Android Studio Panda adds LeakCanary integration directly in the Android Studio Profiler as a dedicated task, contextualized within the IDE and fully integrated with your source code.&lt;/p&gt;

&lt;p&gt;A lighter memory footprint translates directly to smoother performance, longer battery life, and a premium experience across all form factors. Let’s build a faster, more reliable future for the Android ecosystem together!&lt;/p&gt;

&lt;h3&gt;Profiling triggers for app anomalies&lt;/h3&gt;
&lt;p&gt;Android introduces an on-device anomaly detection service that monitors for resource-intensive behaviors and potential compatibility regressions. Integrated with &lt;a href="https://developer.android.com/topic/performance/tracing/profiling-manager/overview"&gt;ProfilingManager&lt;/a&gt;, this service allows your app to receive profiling artifacts triggered by specific system-detected events.&lt;/p&gt;

&lt;p&gt;Use the &lt;a href="https://developer.android.com/reference/kotlin/android/os/ProfilingTrigger#trigger_type_anomaly"&gt;TRIGGER_TYPE_ANOMALY&lt;/a&gt; trigger to detect system performance issues such as excessive binder calls and excessive memory usage. When an app breaches OS-defined memory limits, the anomaly trigger allows developers to receive app-specific heap dumps to help identify and fix memory issues. Additionally, for excessive binder spam, the anomaly trigger provides a stack sampling profile on binder transactions.&lt;/p&gt;

&lt;p&gt;This API callback occurs prior to any system imposed enforcements. For example, it can help developers collect debug data before the app is terminated by the system due exceeding memory limits. To understand how to use the trigger check out our documentation on &lt;a href="https://developer.android.com/topic/performance/tracing/profiling-manager/trigger-based-capture"&gt;trigger based profiling&lt;/a&gt;.&lt;/p&gt;

&lt;pre class="prettyprint"&gt;val profilingManager = applicationContext.getSystemService(ProfilingManager::class.java)
val triggers = ArrayList&amp;lt;ProfilingTrigger&amp;gt;()  
triggers.add(ProfilingTrigger.Builder(
             ProfilingTrigger.TRIGGER_TYPE_ANOMALY))
val mainExecutor: Executor = Executors.newSingleThreadExecutor()
val resultCallback = Consumer&amp;lt;ProfilingResult&amp;gt; { profilingResult -&amp;gt;
    if (profilingResult.errorCode != ProfilingResult.ERROR_NONE) {
        // upload profile result to server for further analysis          
        setupProfileUploadWorker(profilingResult.resultFilePath)
    } 
}
profilingManager.registerForAllProfilingResults(mainExecutor, resultCallback)
profilingManager.addProfilingTriggers(triggers)
&lt;/pre&gt;

&lt;h3&gt;Post-Quantum Cryptography (PQC) in Android Keystore&lt;/h3&gt;
&lt;p&gt;Android Keystore &lt;a href="https://security.googleblog.com/2026/03/post-quantum-cryptography-in-android.html"&gt;added support&lt;/a&gt; for the &lt;a href="https://csrc.nist.gov/pubs/fips/204/final"&gt;NIST-standardized&lt;/a&gt; ML-DSA (Module-Lattice-Based Digital Signature Algorithm). On supported devices, you can generate ML-DSA keys and use them to produce quantum-safe signatures, entirely in the device’s secure hardware. Android Keystore exposes the ML-DSA-65 and ML-DSA-87 algorithm variants through the standard Java Cryptographic Architecture APIs: &lt;a href="https://developer.android.com/reference/java/security/KeyPairGenerator"&gt;KeyPairGenerator,&lt;/a&gt; &lt;a href="https://developer.android.com/reference/java/security/KeyFactory"&gt;KeyFactory&lt;/a&gt;, and &lt;a href="https://developer.android.com/reference/java/security/Signature"&gt;Signature&lt;/a&gt;. For further details, see our &lt;a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec#example:-ml-dsa-key-pair-for-signing"&gt;developer documentation.&lt;/a&gt;&lt;/p&gt;

&lt;pre class="prettyprint"&gt;KeyPairGenerator generator = KeyPairGenerator.getInstance(
        “ML-DSA-65”, "AndroidKeyStore");
generator.initialize(
        new KeyGenParameterSpec.Builder(
                “my-key-alias”,
                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
        .build());
KeyPair keyPair = generator.generateKeyPair();
&lt;/pre&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; to get this and future Android Beta updates over-the-air. If you don’t have a Pixel device, you can &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; in Android Studio.&lt;/p&gt;

&lt;p&gt;If you are currently in the Android Beta program, you will be offered an over-the-air update to Beta 4. Continue to &lt;a href="https://developer.android.com/about/versions/17/feedback"&gt;report issues and submit feature requests&lt;/a&gt; on the &lt;a href="https://developer.android.com/about/versions/16/feedback"&gt;feedback page&lt;/a&gt;. The earlier we get your feedback, the more we can include in our work on the final release.&lt;/p&gt;

&lt;p&gt;For the best development experience with Android 17, we recommend that you use the latest preview of &lt;a href="https://developer.android.com/studio/preview"&gt;Android Studio (Panda)&lt;/a&gt;. Once you’re set up, here are some of the things you should do:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Compile against the new SDK, test in CI environments, and report any issues in our tracker 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, learn whether your app is affected by changes in Android 17, and install your app onto a device or emulator running Android 17 and extensively test it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll update the &lt;a href="https://developer.android.com/about/versions/17/download"&gt;preview/beta system images&lt;/a&gt; and SDK regularly throughout the Android 17 release cycle. Once you’ve installed a beta build, you’ll automatically get future updates over-the-air for all later previews and Betas. 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;

&lt;h3&gt;Join the conversation&lt;/h3&gt;
&lt;p&gt;Your feedback remains our most valuable asset. Whether you’re an &lt;a href="https://www.reddit.com/r/android_canary/"&gt;early adopter on the Canary channel&lt;/a&gt; or an &lt;a href="https://www.reddit.com/r/android_beta/"&gt;app developer testing on Beta 4&lt;/a&gt;, consider joining our communities and filing feedback. We’re listening.&lt;/p&gt;&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/6716496097147764449/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/the-fourth-beta-of-android-17.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6716496097147764449" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6716496097147764449" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/the-fourth-beta-of-android-17.html" rel="alternate" title="The Fourth Beta of Android 17" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEjRi_pfW7jI2yTebiDh4niQsTN1UL9MmUbO1DUy_ensXVVhStxJt5PUfBSQVOkpOC4ReJ1G2OMtpOZj0fq_3XiUY3fVq91hldHzZU-FPcHkLnG33NAEAV9Wxl4PVZWJHUwbbi1mZxUzQA5YIOGMhDC6mL00CYZei7fNAGDpMhK1JqtlwIOtoIVmIZn2XTE=s72-c" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-5829549509951641297</id><published>2026-04-16T10:00:00.000-07:00</published><updated>2026-04-21T03:45:58.543-07:00</updated><title type="text">Android CLI and skills: Build Android apps 3x faster using any agent</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyFElAHYM4meoiCciQQ2lncUtR6wtpR1c8Sd1K4SbNEUKDat7QeDRM3yGyMMu0J--WblBE3U09p2W6BMqbVjHysCaNZl8lmhcWr3xFkOhZmk4AXhT77UDU_50fkmzaSbhntd4FRMIdDILFUiSpwJ9abWPTOBaK9I7mC1oxMOwWg1CG3VDDq27EBB2n0o/s4097/hours-CLI_Dark-meta@2x.png" property="og:image"&gt;&lt;/meta&gt;

&lt;meta content="summary_large_image" name="twitter:card"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyFElAHYM4meoiCciQQ2lncUtR6wtpR1c8Sd1K4SbNEUKDat7QeDRM3yGyMMu0J--WblBE3U09p2W6BMqbVjHysCaNZl8lmhcWr3xFkOhZmk4AXhT77UDU_50fkmzaSbhntd4FRMIdDILFUiSpwJ9abWPTOBaK9I7mC1oxMOwWg1CG3VDDq27EBB2n0o/s4097/hours-CLI_Dark-meta@2x.png" name="twitter:image"&gt;&lt;/meta&gt;

&lt;img alt="Hours CLI Dark Meta Card" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyFElAHYM4meoiCciQQ2lncUtR6wtpR1c8Sd1K4SbNEUKDat7QeDRM3yGyMMu0J--WblBE3U09p2W6BMqbVjHysCaNZl8lmhcWr3xFkOhZmk4AXhT77UDU_50fkmzaSbhntd4FRMIdDILFUiSpwJ9abWPTOBaK9I7mC1oxMOwWg1CG3VDDq27EBB2n0o/s4097/hours-CLI_Dark-meta@2x.png" style="height: 1px; left: -9999px; opacity: 0.01; position: absolute; width: 1px;" /&gt;
&lt;article&gt;
  &lt;link href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyFElAHYM4meoiCciQQ2lncUtR6wtpR1c8Sd1K4SbNEUKDat7QeDRM3yGyMMu0JhyphenhyphenWblBE3U09p2W6BMqbVjHysCaNZl8lmhcWr3xFkOhZmk4AXhT77UDU_50fkmzaSbhntd4FRMIdDILFUiSpwJ9abWPTOBaK9I7mC1oxMOwWg1CG3VDDq27EBB2n0o/s4097/hours-CLI_Dark-meta@2x.png" rel="image_src"&gt;&lt;/link&gt;

  &lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i style="text-align: left;"&gt;&lt;i&gt;Posted by Adarsh Fernando, Group Product Manager and Esteban de la Canal, Senior Staff Software Engineer&lt;/i&gt;&lt;/i&gt;&lt;/div&gt;&lt;/article&gt;&lt;br /&gt;&lt;article&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSxFmgZy6aUj2hWhz_Q7GYVfVjlVJ5kTKte7b_GfNnV6Bde-1UDSBiOmDuq7sEPHJX4SULxETyP5DYjBh9NKGJ8TDfJD4kvUJYHPpVGE44k0Tw9EkH3-jCTChnTLvc-TeGH1PWPhdpXRtn6ly0iAkQ5dIS9wHXsWAVuv0wPzumJ41YhYqdcia5DmnOOWs/s8419/hours-CLI_Dark-Blogger@2x.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/AVvXsEiSxFmgZy6aUj2hWhz_Q7GYVfVjlVJ5kTKte7b_GfNnV6Bde-1UDSBiOmDuq7sEPHJX4SULxETyP5DYjBh9NKGJ8TDfJD4kvUJYHPpVGE44k0Tw9EkH3-jCTChnTLvc-TeGH1PWPhdpXRtn6ly0iAkQ5dIS9wHXsWAVuv0wPzumJ41YhYqdcia5DmnOOWs/s16000/hours-CLI_Dark-Blogger@2x.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;span id="docs-internal-guid-d48ee3b9-7fff-b09c-4794-3a8a223931db"&gt;&lt;div&gt;&lt;span face="&amp;quot;Google Sans&amp;quot;, sans-serif" style="color: #1b1c1d; 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;p&gt;As Android developers, you have many choices when it comes to the agents, tools, and LLMs you use for app development. Whether you are using Gemini in Android Studio, Gemini CLI, Antigravity, or third-party agents like Claude Code or Codex, our mission is to ensure that high-quality Android development is possible everywhere.&lt;/p&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;em&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="332" src="https://www.youtube.com/embed/AhrXPjk22OE" width="489" youtube-src-id="AhrXPjk22OE"&gt;&lt;/iframe&gt;&lt;/em&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Today, we are introducing a new suite of &lt;a href="http://d.android.com/tools/agents" target="_blank"&gt;Android tools and resources for agentic workflows&lt;/a&gt; — &lt;strong&gt;Android CLI&lt;/strong&gt; with &lt;strong&gt;Android skills&lt;/strong&gt; and the &lt;strong&gt;Android Knowledge Base&lt;/strong&gt;. This collection of tools is designed to eliminate the guesswork of core Android development workflows when you direct an agent’s work outside of Android Studio, making your agents more efficient, effective, and capable of following the latest recommended patterns and best practices.&lt;/p&gt;

    &lt;p&gt;Whether you are just starting your development journey on Android, are a seasoned Android developer, or managing apps across mobile and web platforms, building your apps with the latest guidance, tools, and AI-assistance is easier than ever. No matter which environment you begin with these resources, you can always transition your development experience to Android Studio—where the state-of-the-art tools and agents for Android development are available to help your app experience truly shine.&lt;/p&gt;

    &lt;h2&gt;(Re)Introducing the Android CLI&lt;/h2&gt;

    &lt;p&gt;Your agents perform best when they have a lightweight, programmatic interface to interact with the Android SDK and development environment. So, at the heart of this new workflow is a revitalized Android CLI. The new Android CLI serves as the primary interface for Android development from the terminal, featuring commands for environment setup, project creation, and device management—with more modern capabilities and easy updatability in mind.&lt;/p&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoTdXwtVvAkXKpJkFXWz5-kJFAVniISQ2L9MbTSaMU4A5-wlpDHXpwJwFNc4-wTPkC9k_H2dnEsWUWVeeKxBEikTv1mDNhm18H3wvd53Zo5Z4uzu7AnHoNKIxz_9Op6_6kAJyuo-do6oDviIlrNcIZ49X5wLz79OdSvx6Ru0SDb403WA3-u-3WbLd-jz4/w640-h414/android-create-project.gif" /&gt;&lt;/div&gt;&lt;p&gt;&lt;small&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;The create command makes an Android app project in seconds.&lt;/span&gt;&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;In our internal experiments, Android CLI improved project and environment setup by reducing LLM token usage by more than &lt;strong&gt;70%&lt;/strong&gt;, and tasks were completed &lt;strong&gt;3X faster&lt;/strong&gt; than when agents attempted to navigate these tasks using only the standard toolsets.&lt;/p&gt;

    &lt;p&gt;Key capabilities available to you include:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;SDK management:&lt;/strong&gt; Use &lt;code&gt;android sdk install&lt;/code&gt; to download only the specific components needed, ensuring a lean development environment.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Snappy project creation:&lt;/strong&gt; The &lt;code&gt;android create&lt;/code&gt; command generates new projects from official templates, ensuring the recommended architecture and best practices are applied from the very first line of code.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Rapid device creation and deployment:&lt;/strong&gt; Create and manage virtual devices with &lt;code&gt;android emulator&lt;/code&gt; and deploy apps using &lt;code&gt;android run&lt;/code&gt;, eliminating the guesswork involved in manual build and deploy cycles.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Updatability:&lt;/strong&gt; Run &lt;code&gt;android update&lt;/code&gt; to ensure that you have the latest capabilities available.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpB1xUU8XmJKqlmou9A8lwdo9ZP_RZpjgX-MTjobIQD6h_IwzwsNMPxX-vnGDrWIJGrAiJ3DTw1qOyoGLWmkdhYdlBNyQseY3zrvR0Y5BA7In-CmCbIz5_F1D_HBoBcdWUbHGGeb59I_Db2Q8XRX7fNuNY7vK2cPBrlPHISSJ0vP3ZLNe7vYorXLCbSkQ/w640-h388/android-run-short.gif" /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
        &lt;p&gt;&lt;small&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Android CLI can create a device, run your app on it, and make it easier for agents to navigate UI.&lt;/i&gt;&lt;/span&gt;&lt;/small&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;While Android CLI will empower your agentic development flows, it’s also been designed to streamline CI, maintenance, and any other scripted automation for the increasingly distributed nature of Android development. &lt;a href="https://d.android.com/tools/agents" target="_blank"&gt;Download&lt;/a&gt; and try out the Android CLI today!&lt;/p&gt;

    &lt;h2&gt;Grounding LLMs with official Android Skills&lt;/h2&gt;

    &lt;p&gt;Traditional documentation can be descriptive, conceptual, and high-level. While perfect for learning, LLMs often require precise, actionable instructions to execute complex workflows without using outdated patterns and libraries.&lt;/p&gt;

    &lt;p&gt;To bridge this gap, we are launching the &lt;a href="https://github.com/android/skills"&gt;&lt;strong&gt;Android skills GitHub repository&lt;/strong&gt;.&lt;/a&gt; Skills are modular, markdown-based (&lt;code&gt;SKILL.md&lt;/code&gt;) instruction sets that provide a technical specification for a task and are designed to trigger automatically when your prompt matches the skill's metadata, saving you the hassle of manually attaching documentation to every prompt.&lt;/p&gt;

    &lt;p&gt;Android skills cover some of the most common workflows that some Android developers and LLMs may struggle with—they help models better understand and execute specific patterns that follow our best practices and guidance on Android development.&lt;/p&gt;

    &lt;p&gt;In our initial release, the repository includes skills like:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;Navigation 3 setup and migration.&lt;/li&gt;
        &lt;li&gt;Implementing edge-to-edge support.&lt;/li&gt;
        &lt;li&gt;AGP 9 and XML-to-Compose migrations.&lt;/li&gt;
        &lt;li&gt;R8 config analysis, and more!&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;If you’re using Android CLI, you can browse and set up your agent workflow with our growing collection of skills using the &lt;code&gt;android skills&lt;/code&gt; command. These skills can also live alongside any other skills you create, or third-party skills created by the Android developer community. Learn more about getting started with &lt;a href="http://d.android.com/tools/agents/android-skills" target="_blank"&gt;Android skills&lt;/a&gt;.&lt;/p&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;em&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieOsGKPV8IWBw6gr6_lQNapUMgaBl9pds0N8i-VamNCA3Sa7Klpz3DZJGJBZYw12pBAH0Xzypo6z4ujF16rK8wcQkKenJ5z5w4Rmx7pCGEo-paWnmdVm64DURt8r6o_DhZactfiKApRsVeGilvbotWpCMNrY6xfLv2hHuE8TIoiluIGkemrPReKbFdi2Y/s1720/gemini_cli_skills_demo.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1050" data-original-width="1720" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieOsGKPV8IWBw6gr6_lQNapUMgaBl9pds0N8i-VamNCA3Sa7Klpz3DZJGJBZYw12pBAH0Xzypo6z4ujF16rK8wcQkKenJ5z5w4Rmx7pCGEo-paWnmdVm64DURt8r6o_DhZactfiKApRsVeGilvbotWpCMNrY6xfLv2hHuE8TIoiluIGkemrPReKbFdi2Y/w640-h390/gemini_cli_skills_demo.gif" width="640" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
        &lt;p&gt;&lt;small&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Install Android skills via the Android CLI to make your agent more effective and efficient.&lt;/i&gt;&lt;/span&gt;&lt;/small&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;h2&gt;The latest guidance via the Android Knowledge Base&lt;/h2&gt;

    &lt;p&gt;The third component we are launching today is the &lt;strong&gt;Android Knowledge Base&lt;/strong&gt;. Accessible through the &lt;code&gt;android docs&lt;/code&gt; command and already available in the latest version of Android Studio, this specialized data source enables agents to search and fetch the latest authoritative developer guidelines to use as relevant context.&lt;/p&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;em&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaUMd35EkvnwxfIZGlqRc961d9mfYaR4Fj5FWH4QZgMc4Nmip4VnbRtz8a94XJUkfU3OfAsXyPJbOzc6ZFjnCMLbQDLYF7Abwn-eYRJxfQzjesIYsT-GzSHHK7BefCYyoG_r-sXCuGrN3N2-5BD8vHXi1jiY6nxqjsJVOk7k_zQeymsXZxXJGLazYl0Mc/s960/android-docs.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="621" data-original-width="960" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaUMd35EkvnwxfIZGlqRc961d9mfYaR4Fj5FWH4QZgMc4Nmip4VnbRtz8a94XJUkfU3OfAsXyPJbOzc6ZFjnCMLbQDLYF7Abwn-eYRJxfQzjesIYsT-GzSHHK7BefCYyoG_r-sXCuGrN3N2-5BD8vHXi1jiY6nxqjsJVOk7k_zQeymsXZxXJGLazYl0Mc/w640-h414/android-docs.gif" width="640" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
        &lt;p&gt;&lt;small&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;The Android Knowledge Base ensures agents have the latest context, guidance, and best practices for Android.&lt;/i&gt;&lt;/span&gt;&lt;/small&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;By accessing the frequently updated knowledge base, agents can ground their responses in the most recent information from Android developer docs, Firebase, Google Developers, and Kotlin docs. This ensures that even if an LLM's training cutoff is a year old, it can still provide guidance on the latest frameworks and patterns we recommend today.&lt;/p&gt;

    &lt;h2&gt;Android Studio: The ultimate destination for premium apps&lt;/h2&gt;

    &lt;p&gt;In addition to empowering developers and agents to handle project setup and boilerplate code, we’ve also designed these new tools and resources to make it easier to transition to Android Studio. That means you can start a prototype quickly with an agent using Android CLI and then open the project in Android Studio to fine-tune your UI with visual tools for code editing, UI design, deep debugging, and advanced profiling that scale with the growing capabilities of your app.&lt;/p&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;em&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY2zZ9qSUFIGHwcQTuzv0AVfn3brHhtlswBI4xcTYeWe2q1lAxliPZB8rEipSJJh6TBkRRLscjcSDDkDATz-lOAduKsPHQAnmrEVExGvLUTyiCe5vcjevioP5w_D7Ra4CkfHzp2LJjwTUkmBVL2DaKgZBGmDf0Fp97HuD9chWqEkw_EKf1JGIio7XkSAw/s960/android_studio.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="621" data-original-width="960" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY2zZ9qSUFIGHwcQTuzv0AVfn3brHhtlswBI4xcTYeWe2q1lAxliPZB8rEipSJJh6TBkRRLscjcSDDkDATz-lOAduKsPHQAnmrEVExGvLUTyiCe5vcjevioP5w_D7Ra4CkfHzp2LJjwTUkmBVL2DaKgZBGmDf0Fp97HuD9chWqEkw_EKf1JGIio7XkSAw/w640-h414/android_studio.gif" width="640" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/div&gt;&lt;em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;p&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;And when it is time to build a high-quality app for large-scale publication across various device types, our agent in Android Studio is here to help, while leveraging the latest development best practices and libraries. Beyond the powerful Agent and Planning Modes for active development, we have introduced an AI-powered New Project flow, which provides an entry point to rapidly prototyping your next great idea for Android.&lt;/p&gt;

    &lt;div style="margin: 20px 0px; text-align: center;"&gt;
        &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKwNpNC5C4U6dSTNgcALp7tO4a1MyAl-d-pk5fGngCvZdhPHGb8iudfb73t3s5rln5wrckxOly6hACWyuOUuVOcDADVVg9MZtaS58_d4q-O-63fLftSnbU_u89lKF7p8LXDKx4kEmzKzzz_Mokjf53JLzBNhkgky1JgJDziJ6icJhFjXy1PlFdEd1ni4U/s1920/Workout-app.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/AVvXsEjKwNpNC5C4U6dSTNgcALp7tO4a1MyAl-d-pk5fGngCvZdhPHGb8iudfb73t3s5rln5wrckxOly6hACWyuOUuVOcDADVVg9MZtaS58_d4q-O-63fLftSnbU_u89lKF7p8LXDKx4kEmzKzzz_Mokjf53JLzBNhkgky1JgJDziJ6icJhFjXy1PlFdEd1ni4U/s16000/Workout-app.gif" /&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;/div&gt;

    &lt;p&gt;These built-in agents make it simple to extend your app ideas across phones, foldables, tablets, Wear OS, Android Auto, and Android TV. Equipped with full context of your project’s source code and a comprehensive suite of debugging, profiling, and emulation tools, you have an end-to-end, AI-accelerated toolkit at your disposal.&lt;/p&gt;

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

    &lt;p&gt;Android CLI is available in preview today, along with a growing set of Android skills and knowledge for agents. To get started, head over to &lt;a href="http://d.android.com/tools/agents"&gt;d.android.com/tools/agents&lt;/a&gt; to download Android CLI.&lt;/p&gt;&lt;/article&gt;&lt;br /&gt;</content><link href="http://android-developers.googleblog.com/feeds/5829549509951641297/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/build-android-apps-3x-faster-using-any-agent.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5829549509951641297" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5829549509951641297" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/build-android-apps-3x-faster-using-any-agent.html" rel="alternate" title="Android CLI and skills: Build Android apps 3x faster using any agent" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPyFElAHYM4meoiCciQQ2lncUtR6wtpR1c8Sd1K4SbNEUKDat7QeDRM3yGyMMu0J--WblBE3U09p2W6BMqbVjHysCaNZl8lmhcWr3xFkOhZmk4AXhT77UDU_50fkmzaSbhntd4FRMIdDILFUiSpwJ9abWPTOBaK9I7mC1oxMOwWg1CG3VDDq27EBB2n0o/s72-c/hours-CLI_Dark-meta@2x.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2324959843175498085</id><published>2026-04-15T10:00:00.000-07:00</published><updated>2026-04-15T10:00:00.117-07:00</updated><title type="text">Boosting user privacy and business protection with updated Play policies</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_n6hjuC6FHnlMKgk_VZr8Wa7NCN90ggZ3Y5HcmsRfJc5FfvEk-9tMhnIyALvjpYgFdaveyLHbf9-AqbWBm1-Fjq7xgxnRwug0fOlGdqe3MsCWGbx6Zy9-pqXSLlTrpFCWYDGpiqejr51fcBUqHlS2qiqBJtuicaRAnNyJr0Z8ex4j2trd3x1Bf29KeZk/s1234/260409_Uyo%20policy%20bundle_Metadata.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/AVvXsEj_n6hjuC6FHnlMKgk_VZr8Wa7NCN90ggZ3Y5HcmsRfJc5FfvEk-9tMhnIyALvjpYgFdaveyLHbf9-AqbWBm1-Fjq7xgxnRwug0fOlGdqe3MsCWGbx6Zy9-pqXSLlTrpFCWYDGpiqejr51fcBUqHlS2qiqBJtuicaRAnNyJr0Z8ex4j2trd3x1Bf29KeZk/s1234/260409_Uyo%20policy%20bundle_Metadata.png" style="display: none;" /&gt;&lt;div&gt;&lt;i&gt;Posted by Bennet Manuel, Group Product Manager, App &amp;amp; Ecosystem Trust&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/AVvXsEhKOUCLMXr-kZsg-e80nLJN7PxLWyY2iMS6jHd7N4IcOcwm9nlHb_xN9r2C-vs4BhgJcz4u9_DgDesKQjmUD3QwziWo8RnNsXbOV7jDLVMeieQFbSyUyuzK8f5jJsGpbk70Xv8RYOAD2LM0z1iPhuHmWc8Hf1SANDKukW-OCNPOrBp6ZqVN3uv2mfX90qw/s4209/260409_Uyo%20policy%20bundle_Header.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/AVvXsEhKOUCLMXr-kZsg-e80nLJN7PxLWyY2iMS6jHd7N4IcOcwm9nlHb_xN9r2C-vs4BhgJcz4u9_DgDesKQjmUD3QwziWo8RnNsXbOV7jDLVMeieQFbSyUyuzK8f5jJsGpbk70Xv8RYOAD2LM0z1iPhuHmWc8Hf1SANDKukW-OCNPOrBp6ZqVN3uv2mfX90qw/s16000/260409_Uyo%20policy%20bundle_Header.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;We strive to make Google Play the safest and most trusted experience possible. Today, we’re announcing a new set of policy updates and an account transfer feature to boost user privacy and protect your business from fraud. By providing better features for users and easy-to-integrate tools for you, we’re making&lt;b&gt; it simpler to build safer apps&lt;/b&gt; so you can focus on creating great experiences.&lt;/p&gt;

    &lt;p&gt;We’re also expanding our features to help you manage new contact and location policy changes, so you have a smoother, more predictable app review experience. By October, Play policy insights in Android Studio can help you proactively identify if your app should use these new features and guide you on the exact steps to take. Additionally, new pre-review checks in the Play Console will be available starting October 27 to flag potential contacts or location permissions policy&amp;nbsp;issues so you can fix them before you submit your app for review.&lt;/p&gt;

    &lt;p&gt;Here is what is new and how you can prepare.&lt;/p&gt;

    &lt;h3 style="text-align: left;"&gt;Contact Picker: A privacy-friendly way to access contacts&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_EL8lQ7aMtgj6lnfnIIRTY-XSHIsCfj5FoRcrEbr5ge6ATeFQRsqC6yH6Cq9xR-l4FrL1zvLNT577qwmx0znaJZOlHEz5ZY_hYqjyXb4haUHCu_FQu9aP6h8PGCljdQyUAQgQkYPHi_WYSsoZ16MMvF5NLhzRhuokJpK-Z3oUKHuYQ1gwLu6O_kDuW6Y/s640/contact%20picker.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="640" data-original-width="285" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_EL8lQ7aMtgj6lnfnIIRTY-XSHIsCfj5FoRcrEbr5ge6ATeFQRsqC6yH6Cq9xR-l4FrL1zvLNT577qwmx0znaJZOlHEz5ZY_hYqjyXb4haUHCu_FQu9aP6h8PGCljdQyUAQgQkYPHi_WYSsoZ16MMvF5NLhzRhuokJpK-Z3oUKHuYQ1gwLu6O_kDuW6Y/w180-h400/contact%20picker.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

    &lt;p&gt;Android is introducing the &lt;a href="https://android-developers.googleblog.com/2026/03/contact-picker-privacy-first-contact.html"&gt;Android Contact Picker&lt;/a&gt; as the new standard for accessing contact information (e.g., for invites, sharing, or one-time lookups). This picker lets users share only the specific contacts they want to, helping build trust and protect privacy. Alongside this tool, we are updating our &lt;a href="https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions"&gt;policy&lt;/a&gt; to require that all applicable apps use the picker, or other privacy-focused alternatives like &lt;a href="https://developer.android.com/training/sharing/send"&gt;Sharesheet&lt;/a&gt;, as the primary way to access users’ contacts. &lt;code&gt; READ_CONTACTS &lt;/code&gt; will be reserved for apps that can’t function without it.&lt;/p&gt;

    &lt;h4 style="text-align: left;"&gt;What you’ll need to do&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;If your app asks for access to contacts for features like sharing or inviting, you should update your code to use the picker and remove the &lt;code&gt; READ_CONTACTS&amp;nbsp;&lt;/code&gt;permission entirely (if targeting Android 17 and above).&lt;/li&gt;&lt;li&gt;If your app requires full, ongoing access to a user’s contact list to function, you must justify this need by submitting a Play Developer Declaration in the Play Console. This form will be available before October.&lt;/li&gt;&lt;/ul&gt;
    &lt;p&gt;&lt;/p&gt;

    &lt;h3 style="text-align: left;"&gt;Location button: More privacy-friendly way to access location&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM6-G0XSTA3QpYvB7QnoZg5TNR7pdMJmm9GpKRA_ohoFlRziz_l4piXmv_cCPbcVm61Y8nivwzhLA4Un4FLZNY-D0raOTYZTYod23sU6uVYMtfSlOxKy4HY4tWDJqLiaPBnNHG0UcSOXMmkhVKqzsl-YIYphdHuaH2KpzCnUyxszKsUWf1LbMGFm8_jIA/s1263/Location%20button%20animation.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1263" data-original-width="600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM6-G0XSTA3QpYvB7QnoZg5TNR7pdMJmm9GpKRA_ohoFlRziz_l4piXmv_cCPbcVm61Y8nivwzhLA4Un4FLZNY-D0raOTYZTYod23sU6uVYMtfSlOxKy4HY4tWDJqLiaPBnNHG0UcSOXMmkhVKqzsl-YIYphdHuaH2KpzCnUyxszKsUWf1LbMGFm8_jIA/w190-h400/Location%20button%20animation.gif" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

    &lt;p&gt;Android is introducing a &lt;a href="https://android-developers.googleblog.com/2026/03/location-privacy.html"&gt;new, streamlined location button&lt;/a&gt; to make requesting precise data easier for one-time actions, like finding a store or tagging a photo. This feature replaces complex permission dialogs with a single tap, helping users make clearer choices about how much information they share and for how long. We’re updating our &lt;a href="https://support.google.com/googleplay/android-developer/answer/16909972#location-permissions"&gt;policy&lt;/a&gt; to require apps to use this button for one-time precise location access unless they require persistent, always-on location access. This creates a faster, more predictable experience for your users and reduces the friction of traditional permission requests.&lt;/p&gt;

    &lt;h4 style="text-align: left;"&gt;What you’ll need to do&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Review your app's location usage to ensure you are requesting the minimum amount of location data needed for your app to work.&lt;/li&gt;&lt;li&gt;
    If your app targets Android 17 and above and uses precise location for discrete, temporary actions, implement the location button by adding the &lt;code&gt; onlyForLocationButton &lt;/code&gt; flag in your manifest.&lt;/li&gt;&lt;li&gt;
    If your app requires persistent precise location to function, you will need to submit a Play Developer Declaration in Play Console to show why the new button or coarse location isn’t sufficient for your app’s core features. This form will be available before October.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;

    &lt;h3 style="text-align: left;"&gt;Account Transfer: Protecting your business&lt;/h3&gt;

    &lt;p&gt;You asked for a secure way to transfer app ownership during business changes, and we listened. We’re launching an official account transfer feature directly in Play Console that’s designed to help you easily transfer ownership during sales and mergers while also protecting your business from fraud. Starting May 27, account ownership changes must use this official feature. That means that unofficial transfers (like sharing login credentials or buying and selling accounts on third-party marketplaces) which leave your business vulnerable are not permitted.&lt;/p&gt;

    &lt;h4 style="text-align: left;"&gt;What you’ll need to do&lt;/h4&gt;
    &lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Initiate any future account owner changes through the "Users and permissions" page in Play Console.&lt;/li&gt;&lt;li&gt;
    Every transfer will include a mandatory 7-day security cool-down period. This gives your team time to spot and cancel any unauthorized attempts to take over your account. See &lt;a href="https://support.google.com/googleplay/android-developer/answer/16909862" target="_blank"&gt;Transferring ownership of a Play Console developer account&lt;/a&gt; for more guidance.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;

    &lt;h3 style="text-align: left;"&gt;What’s next&lt;/h3&gt;
    &lt;p&gt;We want to give you plenty of time to review these changes and update your apps. For more information, deadlines, and the full list of Google Play policy updates we’re announcing today, please visit the &lt;a href="https://support.google.com/googleplay/android-developer/answer/16926792"&gt;Policy Announcements&lt;/a&gt; page.&lt;/p&gt;

    &lt;p&gt;Thank you for your partnership in keeping Play safe for everyone.&lt;br /&gt;&lt;/p&gt;
</content><link href="http://android-developers.googleblog.com/feeds/2324959843175498085/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/giving-users-clearer-choice-and-everyone-a-safer-more-trusted-app-ecosystem.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2324959843175498085" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2324959843175498085" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/giving-users-clearer-choice-and-everyone-a-safer-more-trusted-app-ecosystem.html" rel="alternate" title="Boosting user privacy and business protection with updated Play policies" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_n6hjuC6FHnlMKgk_VZr8Wa7NCN90ggZ3Y5HcmsRfJc5FfvEk-9tMhnIyALvjpYgFdaveyLHbf9-AqbWBm1-Fjq7xgxnRwug0fOlGdqe3MsCWGbx6Zy9-pqXSLlTrpFCWYDGpiqejr51fcBUqHlS2qiqBJtuicaRAnNyJr0Z8ex4j2trd3x1Bf29KeZk/s72-c/260409_Uyo%20policy%20bundle_Metadata.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4205550973971584405</id><published>2026-04-14T05:30:00.000-07:00</published><updated>2026-04-14T08:44:50.865-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GenerativeAI"/><category scheme="http://www.blogger.com/atom/ns#" term="GoogleIO"/><title type="text">Get ready for Google I/O: Livestream schedule revealed</title><content type="html">&lt;title&gt;Google I/O 2026: Livestream Schedule Revealed&lt;/title&gt;
&lt;meta content="Get ready for Google I/O 2026! Tune in May 19–20 for the latest in AI, Android, Chrome, and Cloud. Check out the full livestream schedule now." name="description"&gt;&lt;/meta&gt;

&lt;meta content="article" property="og:type"&gt;&lt;/meta&gt;
&lt;meta content="http://android-developers.googleblog.com/2026/04/get-ready-for-google-io-livestream-schedule-revealed.html" property="og:url"&gt;&lt;/meta&gt;
&lt;meta content="Google I/O 2026: Livestream Schedule Revealed" property="og:title"&gt;&lt;/meta&gt;
&lt;meta content="Discover the next evolution of developer tools and agentic workflows. Join us for two days of live sessions and demos." property="og:description"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEinBfbmZsMJ5-reN40gywIYP-ZVaI_aPzWseCWBPTVGqEp3vrtoiNdK5rtQXRhDXRzXBjzbJ_vvQEvn4u-Mj79Iw-JS2qgwoNmfRMgDHJG8L01GXqCSkfqON2qxwPQ5dhCoXFnREXYFbq1ueQ5FKLWLyOjI3FSxgsuKYcJkoLwi09vIMtbx21XvC6gZ8wI" property="og:image"&gt;&lt;/meta&gt;

&lt;meta content="summary_large_image" name="twitter:card"&gt;&lt;/meta&gt;
&lt;meta content="http://android-developers.googleblog.com/2026/04/get-ready-for-google-io-livestream-schedule-revealed.html" name="twitter:url"&gt;&lt;/meta&gt;
&lt;meta content="Google I/O 2026: Livestream Schedule Revealed" name="twitter:title"&gt;&lt;/meta&gt;
&lt;meta content="The schedule is here! May 19–20: Unveiling Google’s biggest updates across AI, Android, and the agentic era of development." name="twitter:description"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEinBfbmZsMJ5-reN40gywIYP-ZVaI_aPzWseCWBPTVGqEp3vrtoiNdK5rtQXRhDXRzXBjzbJ_vvQEvn4u-Mj79Iw-JS2qgwoNmfRMgDHJG8L01GXqCSkfqON2qxwPQ5dhCoXFnREXYFbq1ueQ5FKLWLyOjI3FSxgsuKYcJkoLwi09vIMtbx21XvC6gZ8wI" name="twitter:image"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEinBfbmZsMJ5-reN40gywIYP-ZVaI_aPzWseCWBPTVGqEp3vrtoiNdK5rtQXRhDXRzXBjzbJ_vvQEvn4u-Mj79Iw-JS2qgwoNmfRMgDHJG8L01GXqCSkfqON2qxwPQ5dhCoXFnREXYFbq1ueQ5FKLWLyOjI3FSxgsuKYcJkoLwi09vIMtbx21XvC6gZ8wI" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEinBfbmZsMJ5-reN40gywIYP-ZVaI_aPzWseCWBPTVGqEp3vrtoiNdK5rtQXRhDXRzXBjzbJ_vvQEvn4u-Mj79Iw-JS2qgwoNmfRMgDHJG8L01GXqCSkfqON2qxwPQ5dhCoXFnREXYFbq1ueQ5FKLWLyOjI3FSxgsuKYcJkoLwi09vIMtbx21XvC6gZ8wI" style="display: none;" /&gt; 
&lt;div style="color: #3c4043; font-family: Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; line-height: 1.6; margin: auto; max-width: 700px;"&gt;
  &lt;p&gt;&lt;i&gt;Posted by The Google I/O team&lt;/i&gt;&lt;/p&gt;
&lt;div style="margin: 24px 0px; text-align: center;"&gt;
  &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiolJt1Sx6rZtKxth9TSW6dBrn-Rbwf2dEfgU1s7WAV0R9KTA6D_F5dIjRl6IMKfxcE8oqlJd4f3s88fFy_OR_89qjukynu98fJjgVZv-gIIiAGBRE9Zu6tSVSxP-hrCQtDoMQWRLGy5QuHJR342auio993a2Up1T1IoQ5fv_umk6hixzxOYzntE5Ayj14/s4209/Blog-banner-4209x1253-A-dark.png"&gt;
    &lt;img alt="Google I/O Banner" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiolJt1Sx6rZtKxth9TSW6dBrn-Rbwf2dEfgU1s7WAV0R9KTA6D_F5dIjRl6IMKfxcE8oqlJd4f3s88fFy_OR_89qjukynu98fJjgVZv-gIIiAGBRE9Zu6tSVSxP-hrCQtDoMQWRLGy5QuHJR342auio993a2Up1T1IoQ5fv_umk6hixzxOYzntE5Ayj14/s16000/Blog-banner-4209x1253-A-dark.png" style="height: auto; width: 100%;" /&gt;
  &lt;/a&gt;
&lt;/div&gt;
 

  &lt;p&gt;The Google I/O schedule is here! Tune in &lt;b&gt;May 19–20&lt;/b&gt; as we unveil Google’s biggest updates across AI, Android, Chrome, and Cloud. Discover new tools and features designed to unlock the future of development with agentic coding.&lt;/p&gt;

  &lt;p&gt;We’re kicking things off with the &lt;a href="https://io.google/2026/explore/google-keynote-1?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;Google keynote&lt;/a&gt; at 10:00 am PT on May 19, followed by the &lt;a href="https://io.google/2026/explore/developer-keynote-1?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;Developer keynote&lt;/a&gt; at 1:30 pm PT. Block your calendars for two days of live sessions, straight from Mountain View, full of announcements, live demos, and new professional development sessions.&lt;/p&gt;

  &lt;p&gt;Here’s a sneak peak at what we’ll cover:&lt;/p&gt;

  &lt;ul style="list-style-type: disc; margin: 24px 0px; padding-left: 28px;"&gt;
    &lt;li style="line-height: 1.6; margin-bottom: 24px;"&gt;
      &lt;b&gt;The agentic era of development:&amp;nbsp;&lt;/b&gt;Discover how the next evolution of our developer tools is transforming the way you write software. Learn how to seamlessly transition from rapid ideation to orchestrating powerful, autonomous workflows, allowing AI to handle the heavy lifting while you focus on the big picture.
    &lt;/li&gt;
    &lt;li style="line-height: 1.6; margin-bottom: 24px;"&gt;
      &lt;b&gt;Enabling Android development anywhere:&amp;nbsp;&lt;/b&gt;Learn how we are making AI even more helpful for your app workflows. From initial prototyping to final native polish, explore the latest ways we’re making it easier and faster to build high quality Android experiences.
    &lt;/li&gt;
    &lt;li style="line-height: 1.6; margin-bottom: 24px;"&gt;
      &lt;b&gt;Building powerful, agentic web applications:&amp;nbsp;&lt;/b&gt;The web is accelerating faster than ever, and we are equipping you for what's next. Discover new tools to build agent-ready web applications, automate complex debugging workflows, and ship highly interactive UI directly in the browser.
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Join us online May 19–20, followed by a fresh drop of on-demand sessions and codelabs on May 21. &lt;a href="https://io.google/2026/register/?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;Register&lt;/a&gt; today to explore the full program and catch all the latest developer updates, featuring sessions like:&lt;/p&gt;

  &lt;ul style="margin: 20px 0px; padding-left: 28px;"&gt;
    &lt;li style="margin-bottom: 12px;"&gt;&lt;a href="https://io.google/2026/explore/pa-keynote-5?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;What's new in Android&lt;/a&gt;&lt;/li&gt;
    &lt;li style="margin-bottom: 12px;"&gt;&lt;a href="https://io.google/2026/explore/pa-keynote-1?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;What’s new in Google AI&lt;/a&gt;&lt;/li&gt;
    &lt;li style="margin-bottom: 12px;"&gt;&lt;a href="https://io.google/2026/explore/pa-keynote-9?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;What's new in Chrome&lt;/a&gt;&lt;/li&gt;
    &lt;li style="margin-bottom: 12px;"&gt;&lt;a href="https://io.google/2026/explore/workshop-4?utm_source=blogpost&amp;amp;utm_medium=pr&amp;amp;utm_campaign=schedule&amp;amp;utm_content="&gt;Build core skills to thrive as an AI-era developer&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/4205550973971584405/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/get-ready-for-google-io-livestream-schedule-revealed.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4205550973971584405" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4205550973971584405" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/get-ready-for-google-io-livestream-schedule-revealed.html" rel="alternate" title="Get ready for Google I/O: Livestream schedule revealed" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEinBfbmZsMJ5-reN40gywIYP-ZVaI_aPzWseCWBPTVGqEp3vrtoiNdK5rtQXRhDXRzXBjzbJ_vvQEvn4u-Mj79Iw-JS2qgwoNmfRMgDHJG8L01GXqCSkfqON2qxwPQ5dhCoXFnREXYFbq1ueQ5FKLWLyOjI3FSxgsuKYcJkoLwi09vIMtbx21XvC6gZ8wI=s72-c" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1565029706250445094</id><published>2026-04-13T06:00:00.000-07:00</published><updated>2026-04-13T09:15:52.163-07:00</updated><title type="text">Test Multi-Device Interactions with the Android Emulator</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEjBR5Gu_q_DDh7EY-Ww_MeEEIgLmChUzPgscdMrwDuUFwZHkXEi0Z69jaS6Kk0rBdY2NSq4mtljZqGegARIzPRDWfUJhKYtWjgwwxA6OI4ga1tO31baXjOwu2jjupVomtDU_3PyJr6aaAozzY9vck1jmKe2oRSInlMFmT5bApVgAS3SRp7smp8kPWOy5Ow" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/a/AVvXsEjBR5Gu_q_DDh7EY-Ww_MeEEIgLmChUzPgscdMrwDuUFwZHkXEi0Z69jaS6Kk0rBdY2NSq4mtljZqGegARIzPRDWfUJhKYtWjgwwxA6OI4ga1tO31baXjOwu2jjupVomtDU_3PyJr6aaAozzY9vck1jmKe2oRSInlMFmT5bApVgAS3SRp7smp8kPWOy5Ow" style="display: none;" /&gt;&lt;article&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;Posted by Steven Jenkins, Product Manager, Android Studio&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEhLN8Ls8o23mxLhfjCUWnFupv4VNEfvkWGKTXi1miUUWN9ZgQOQc0NRLaZL0tse3yBxgAdlaC0bXQ8INtkMU6wzrCvS8xJRLp6cnlNREqygY5PymuslFYjyRnWTBm08UdO5MG9DAXuIWXiiTimCFqINeAsqNnSJcJUDLreTDiRkJ9kM9HgSE8W74X2lvT4" 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/AVvXsEhLN8Ls8o23mxLhfjCUWnFupv4VNEfvkWGKTXi1miUUWN9ZgQOQc0NRLaZL0tse3yBxgAdlaC0bXQ8INtkMU6wzrCvS8xJRLp6cnlNREqygY5PymuslFYjyRnWTBm08UdO5MG9DAXuIWXiiTimCFqINeAsqNnSJcJUDLreTDiRkJ9kM9HgSE8W74X2lvT4=s16000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&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;Testing multi-device interactions is now easier than ever with the Android Emulator. Whether you are building a multiplayer game, extending your mobile application across form factors, or launching virtual devices that require a device connection, the Android Emulator now natively supports these developer experiences.&lt;/p&gt;&lt;p&gt;Previously, interconnecting multiple Android Virtual Devices (AVDs) caused significant friction. It required manually managing complex port forwarding rules just to get two emulators to connect.&lt;/p&gt;&lt;p&gt;Now you can take advantage of a new networking stack for the Android Emulator which brings zero-configuration peer-to-peer connectivity across all your AVDs.&lt;/p&gt;&lt;div&gt;&lt;h3 style="text-align: left;"&gt;Interconnecting emulator instances&lt;/h3&gt;&lt;div&gt;The new networking stack for the Android Emulator transforms how emulators communicate. Previously, each virtual device operated on its own local area network (LAN), effectively isolating it from other AVDs. The new Wi-Fi network stack changes this by creating a shared virtual network backplane that bridges all running instances on the same host machine.&lt;/div&gt;&lt;/div&gt;

  &lt;h4&gt;Key Benefits:&lt;/h4&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;b&gt;Zero-configuration: &lt;/b&gt;No more manual port forwarding or scripting adb commands. AVDs on the same host appear on the same virtual network.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Peer-to-peer connectivity: &lt;/b&gt;Critical protocols like Wi-Fi Direct and Network Service Discovery (NSD) work out of the box between emulators.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Improved stability: &lt;/b&gt;Resolves long-standing stability issues, such as data loss and connection drops found in the legacy stack.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Cross-platform consistency: &lt;/b&gt;Works the same across Windows, macOS and Linux.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Use Cases&lt;/h3&gt;
  &lt;p&gt;
    The enhanced emulator networking supports a wide range of multi-device development scenarios:
  &lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;b&gt;Multi-device apps: &lt;/b&gt;Test file sharing, local multiplayer gaming, or control flows between a phone and another Android device.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Continuous Integration: &lt;/b&gt;Create robust, automated multi-device test pipelines without flaky network scripts.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Android XR &amp;amp; AI glasses: &lt;/b&gt;Easily test companion app pairing and data streaming between a phone and glasses within Android Studio.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Automotive &amp;amp; Wear OS: &lt;/b&gt;Validate connectivity flows between a mobile device and a vehicle head unit or smartwatch.&lt;/li&gt;&lt;/ul&gt;&lt;div&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="https://blogger.googleusercontent.com/img/a/AVvXsEin1DKV_r7JYeNlAeF8rFN4eHGsOvNAVieSFHwpSRRihGLHEQDD9ZCDojC6AWuUrQeBYeBtJW2htLHz_t7mXF77N-2-n8xpuEsPEVdmplFzUmh4wJVq23SFD351gRtCVqppJBj9ECXLz5qXbNGHS5pjViEBeYHoFPqhRxBWwSy5m6hXE8HXeWhGjHhYjFU" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="581" data-original-width="1204" height="309" src="https://blogger.googleusercontent.com/img/a/AVvXsEin1DKV_r7JYeNlAeF8rFN4eHGsOvNAVieSFHwpSRRihGLHEQDD9ZCDojC6AWuUrQeBYeBtJW2htLHz_t7mXF77N-2-n8xpuEsPEVdmplFzUmh4wJVq23SFD351gRtCVqppJBj9ECXLz5qXbNGHS5pjViEBeYHoFPqhRxBWwSy5m6hXE8HXeWhGjHhYjFU=w640-h309" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;The new emulator networking stack allows multiple AVDs to share a virtual network,&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;i&gt;enabling direct peer-to-peer communication with zero configuration.&lt;/i&gt;&lt;/div&gt;
  &lt;h3&gt;Get Started&lt;/h3&gt;
  &lt;p&gt;The new networking capability is enabled by default in the latest Android Emulator release (36.5), which is available via the &lt;a href="https://developer.android.com/studio/intro/update#sdk-manager" target="_blank"&gt;Android Studio SDK Manager&lt;/a&gt;. Just update your emulator and launch multiple devices!&lt;/p&gt;If you need to disable this feature or want to learn more, please refer to our &lt;a href="https://developer.android.com/studio/run/emulator-networking-interconnect" target="_blank"&gt;documentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As always, we appreciate any feedback. If you find a bug or issue, please &lt;a href="https://developer.android.com/studio/report-bugs"&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"&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://x.com/androidstudio"&gt;X&lt;/a&gt;.&lt;/article&gt;&lt;br /&gt;</content><link href="http://android-developers.googleblog.com/feeds/1565029706250445094/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/Test-Multi-Device-Interactions-with-the-Android-Emulator.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1565029706250445094" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1565029706250445094" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/Test-Multi-Device-Interactions-with-the-Android-Emulator.html" rel="alternate" title="Test Multi-Device Interactions with the Android Emulator" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEjBR5Gu_q_DDh7EY-Ww_MeEEIgLmChUzPgscdMrwDuUFwZHkXEi0Z69jaS6Kk0rBdY2NSq4mtljZqGegARIzPRDWfUJhKYtWjgwwxA6OI4ga1tO31baXjOwu2jjupVomtDU_3PyJr6aaAozzY9vck1jmKe2oRSInlMFmT5bApVgAS3SRp7smp8kPWOy5Ow=s72-c" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8901366482873050941</id><published>2026-04-02T07:00:00.003-07:00</published><updated>2026-04-07T17:54:45.407-07:00</updated><title type="text">Android Studio supports Gemma 4: our most capable local model for agentic coding</title><content type="html">&lt;meta content="summary_large_image" name="twitter:card"&gt;&lt;/meta&gt;
&lt;meta content="Android Studio supports Gemma 4: our most capable local model for agentic coding" name="twitter:title"&gt;&lt;/meta&gt;
&lt;meta content="Every developer's AI workflow and needs are unique. Learn how Gemma 4 brings private, local AI coding to Android Studio." name="twitter:description"&gt;&lt;/meta&gt;
&lt;meta content="https://blogger.googleusercontent.com/img/a/AVvXsEgXYlRjbxC3pzK0IAAN_lsTJmGKOPQFRkB3VSQ_VASBbDptbLR-ZouiXNcNQ1ZLpyqcYhkFK4G8H7lf6IulQYuvjBEVPyzXRCDwDbf7HmNV16MyqsE53T6icyLQuXOmASIBNV05FzacpAf6Zcox4qIdg1jBK-rOK4KmTAYjFSlfSQ0lmrK8GhyltG-85k0" name="twitter:image"&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;amp;mute=1" width="100%" youtube-src-id="4iPn1qRVsNY"&gt;
    &lt;/iframe&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.&amp;nbsp;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOCk_88MuU-aNx5gt9NI6iaMid6Y8nXz8R9BVzcE_nk0bMBO_7me6cxhkzZZjQIP3cEdJIHWZUEcSN1P1jq0tdu28i8Z2Xt2yqv4yWi6KaQTvZwXE5azXdfA8YmVRtMBx0RFIp8I3lCVwPh6GSXABRhJr0B6VQs24d2kTPtPW3Mc_B-G4tmR7WV9HhWhQ/s1948/Screenshot%202026-04-05%20at%209.14.11%E2%80%AFAM.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1396" data-original-width="1948" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOCk_88MuU-aNx5gt9NI6iaMid6Y8nXz8R9BVzcE_nk0bMBO_7me6cxhkzZZjQIP3cEdJIHWZUEcSN1P1jq0tdu28i8Z2Xt2yqv4yWi6KaQTvZwXE5azXdfA8YmVRtMBx0RFIp8I3lCVwPh6GSXABRhJr0B6VQs24d2kTPtPW3Mc_B-G4tmR7WV9HhWhQ/s16000/Screenshot%202026-04-05%20at%209.14.11%E2%80%AFAM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&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; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8zC0sNBHZvfECFROpAR6fBWlhzLUWVHTp6ryJVP9RWKSjOurYNLzzsl6u7oxYnLiM-LkbRWHOxjbmvw4ACGu9Xio4hvPl83QooOdkuC7d8Kvmnv4Zp7R5LPh6NKM8T7m9YXcwxK8i_ke-NC50qIxvcVyfNp9MvLbLiCY7F7_51N0QTqwZ2ov6IOh8GTM/s1128/Screenshot%202026-04-05%20at%209.14.33%E2%80%AFAM.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1128" data-original-width="898" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8zC0sNBHZvfECFROpAR6fBWlhzLUWVHTp6ryJVP9RWKSjOurYNLzzsl6u7oxYnLiM-LkbRWHOxjbmvw4ACGu9Xio4hvPl83QooOdkuC7d8Kvmnv4Zp7R5LPh6NKM8T7m9YXcwxK8i_ke-NC50qIxvcVyfNp9MvLbLiCY7F7_51N0QTqwZ2ov6IOh8GTM/w319-h400/Screenshot%202026-04-05%20at%209.14.33%E2%80%AFAM.png" width="319" /&gt;&lt;/a&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;</content><link href="http://android-developers.googleblog.com/feeds/8901366482873050941/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/android-studio-supports-gemma-4-local.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8901366482873050941" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8901366482873050941" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/android-studio-supports-gemma-4-local.html" rel="alternate" title="Android Studio supports Gemma 4: our most capable local model for agentic coding" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1018505883888830902</id><published>2026-04-02T07:00:00.002-07:00</published><updated>2026-04-03T13:06:36.041-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product News"/><title type="text">Announcing Gemma 4 in the AICore Developer Preview</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/1018505883888830902/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/AI-Core-Developer-Preview.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1018505883888830902" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1018505883888830902" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/AI-Core-Developer-Preview.html" rel="alternate" title="Announcing Gemma 4 in the AICore Developer Preview" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-166516025270729047</id><published>2026-04-02T07:00:00.001-07:00</published><updated>2026-04-02T09:43:34.495-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini Nano"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemma"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="Product News"/><title type="text">Gemma 4: The new standard for local agentic intelligence on Android</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/166516025270729047/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/gemma-4-new-standard-for-local-agentic-intelligence.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/166516025270729047" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/166516025270729047" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/gemma-4-new-standard-for-local-agentic-intelligence.html" rel="alternate" title="Gemma 4: The new standard for local agentic intelligence on Android" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-6210727488665288313</id><published>2026-04-02T07:00:00.000-07:00</published><updated>2026-04-02T07:25:37.710-07:00</updated><title type="text">Increase Guidance and Control over Agent Mode with Android Studio Panda 3 </title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/6210727488665288313/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/Increase-Guidance-and-Control-over-Agent-Mode-with-Android-Studio-Panda-3.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6210727488665288313" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6210727488665288313" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/Increase-Guidance-and-Control-over-Agent-Mode-with-Android-Studio-Panda-3.html" rel="alternate" title="Increase Guidance and Control over Agent Mode with Android Studio Panda 3 " type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1156033942001027284</id><published>2026-04-01T13:00:00.000-07:00</published><updated>2026-04-01T13:00:00.111-07:00</updated><title type="text">Get your Wear OS apps ready for the 64-bit requirement</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/1156033942001027284/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/get-your-wear-os-apps-ready-for-64-bit-requirement.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1156033942001027284" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1156033942001027284" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/04/get-your-wear-os-apps-ready-for-64-bit-requirement.html" rel="alternate" title="Get your Wear OS apps ready for the 64-bit requirement" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8617120129574593745</id><published>2026-03-30T16:00:00.000-07:00</published><updated>2026-03-30T18:53:22.733-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Audio"/><category scheme="http://www.blogger.com/atom/ns#" term="ExoPlayer"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetpack"/><category scheme="http://www.blogger.com/atom/ns#" term="Media"/><category scheme="http://www.blogger.com/atom/ns#" term="media3"/><category scheme="http://www.blogger.com/atom/ns#" term="playback"/><category scheme="http://www.blogger.com/atom/ns#" term="Video"/><title type="text">Media3 1.10 is out</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/8617120129574593745/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/media3-110-is-out.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8617120129574593745" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8617120129574593745" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/media3-110-is-out.html" rel="alternate" title="Media3 1.10 is out" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7242509966442583470</id><published>2026-03-30T15:00:00.000-07:00</published><updated>2026-03-30T15:00:00.111-07:00</updated><title type="text">Monzo boosts performance metrics by up to 35% with a simple R8 update</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/7242509966442583470/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/monzo-boosts-performance-metrics-by-up-to-35-percent.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7242509966442583470" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7242509966442583470" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/monzo-boosts-performance-metrics-by-up-to-35-percent.html" rel="alternate" title="Monzo boosts performance metrics by up to 35% with a simple R8 update" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7053289063864256809</id><published>2026-03-30T13:00:00.000-07:00</published><updated>2026-03-30T13:26:48.463-07:00</updated><title type="text">Android developer verification: Rolling out to all developers on Play Console and Android Developer Console</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/7053289063864256809/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/android-developer-verification-rolling-out-to-all-developers.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7053289063864256809" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7053289063864256809" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/android-developer-verification-rolling-out-to-all-developers.html" rel="alternate" title="Android developer verification: Rolling out to all developers on Play Console and Android Developer Console" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-5000408083277205328</id><published>2026-03-26T16:00:00.000-07:00</published><updated>2026-03-26T16:54:11.631-07:00</updated><title type="text">Redefining Location Privacy: New Tools and Improvements for Android 17</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/5000408083277205328/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/location-privacy.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5000408083277205328" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5000408083277205328" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/location-privacy.html" rel="alternate" title="Redefining Location Privacy: New Tools and Improvements for Android 17" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7828686354457204813</id><published>2026-03-26T13:00:00.000-07:00</published><updated>2026-04-13T12:05:17.637-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Android 17"/><category scheme="http://www.blogger.com/atom/ns#" term="Beta"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><title type="text">The Third Beta of Android 17</title><content type="html">&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;

Android is introducing a redesigned screen recording experience that improves the user interface and adds new capabilities for content creators. The update includes a new floating toolbar that provides easier access to recording controls and capture settings. The system-level UI is designed to be visible to the user during the recording process but is automatically excluded from the final video capture.There are no changes required for your app to support this new UI.&lt;br /&gt;&lt;div&gt;&lt;h4&gt;&lt;span style="font-size: large;"&gt;Bubbles&lt;/span&gt;&lt;/h4&gt;&lt;/div&gt;Bubbles is a windowing mode feature that offers a new floating UI experience separate from the &lt;a href="https://developer.android.com/develop/ui/views/notifications/bubbles"&gt;messaging bubbles API&lt;/a&gt;. We &lt;a href="https://android-developers.googleblog.com/2026/02/the-second-beta-of-android-17.html"&gt;covered this feature in the Beta 2 blog post&lt;/a&gt;, and it's now fully enabled in the beta 3 release (as well as in the Android Canary channel).&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;</content><link href="http://android-developers.googleblog.com/feeds/7828686354457204813/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/the-third-beta-of-android-17.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7828686354457204813" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7828686354457204813" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/the-third-beta-of-android-17.html" rel="alternate" title="The Third Beta of Android 17" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7670360947645082673</id><published>2026-03-25T10:00:00.000-07:00</published><updated>2026-03-25T10:00:00.118-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Developer"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><title type="text">Meet the class of 2026 for the Google Play Apps Accelerator</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/7670360947645082673/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/meet-class-of-2026-for-google-play-apps.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7670360947645082673" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7670360947645082673" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/meet-class-of-2026-for-google-play-apps.html" rel="alternate" title="Meet the class of 2026 for the Google Play Apps Accelerator" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2514824232109855475</id><published>2026-03-24T13:00:00.000-07:00</published><updated>2026-03-24T13:00:00.121-07:00</updated><title type="text">Contact Picker: Privacy-First Contact Sharing</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/2514824232109855475/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/contact-picker-privacy-first-contact.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2514824232109855475" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2514824232109855475" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/contact-picker-privacy-first-contact.html" rel="alternate" title="Contact Picker: Privacy-First Contact Sharing" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8517061601582536401</id><published>2026-03-24T09:00:00.000-07:00</published><updated>2026-03-24T09:00:09.148-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AAOS"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Automotive OS"/><category scheme="http://www.blogger.com/atom/ns#" term="Automotive"/><category scheme="http://www.blogger.com/atom/ns#" term="Open source"/><category scheme="http://www.blogger.com/atom/ns#" term="SDV"/><title type="text">Beyond Infotainment: Extending Android Automotive OS for Software-defined Vehicles</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/8517061601582536401/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/Beyond-Infotainment-Extending-Android-Automotive-OS-for-Software-defined-Vehicles.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8517061601582536401" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8517061601582536401" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/Beyond-Infotainment-Extending-Android-Automotive-OS-for-Software-defined-Vehicles.html" rel="alternate" title="Beyond Infotainment: Extending Android Automotive OS for Software-defined Vehicles" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-6026639587187379792</id><published>2026-03-19T07:00:00.000-07:00</published><updated>2026-03-19T14:38:53.798-07:00</updated><title type="text">Android developer verification: Balancing openness and choice with safety</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/6026639587187379792/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/android-developer-verification.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6026639587187379792" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6026639587187379792" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/android-developer-verification.html" rel="alternate" title="Android developer verification: Balancing openness and choice with safety" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1428204216774805640</id><published>2026-03-16T10:00:00.000-07:00</published><updated>2026-03-17T12:14:03.174-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design"/><title type="text">Get inspired and take your apps to desktop</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/1428204216774805640/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/Get-inspired-and-take-your-apps-to-desktop.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1428204216774805640" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1428204216774805640" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/Get-inspired-and-take-your-apps-to-desktop.html" rel="alternate" title="Get inspired and take your apps to desktop" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-6414050793855762752</id><published>2026-03-13T10:00:00.000-07:00</published><updated>2026-03-17T12:11:04.775-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Product News"/><title type="text">Room 3.0 - Modernizing the Room</title><content type="html">&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;</content><link href="http://android-developers.googleblog.com/feeds/6414050793855762752/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/room-30-modernizing-room.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6414050793855762752" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6414050793855762752" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2026/03/room-30-modernizing-room.html" rel="alternate" title="Room 3.0 - Modernizing the Room" type="text/html"/><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></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></entry></feed>