<?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>2024-12-17T17:24:05.653-08: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="Apps"/><category term="Privacy"/><category term="Developer Preview"/><category term="Jetpack"/><category term="archive"/><category term="Play Console"/><category term="Game Development"/><category term="Google Play services"/><category term="Android Wear"/><category term="Compose"/><category term="Wear OS"/><category term="developer stories"/><category term="app development"/><category term="Jetpack Compose"/><category term="Kotlin"/><category term="Platform_Update"/><category term="mobile"/><category term="Distribute"/><category term="google play developers"/><category term="success stories"/><category term="#WeArePlay"/><category term="android security"/><category term="#11WeeksOfAndroid"/><category term="GooglePlay"/><category term="NDK"/><category term="Google Services"/><category term="#GoogleIO"/><category term="User Interface"/><category term="case study"/><category term="App"/><category term="Android TV"/><category term="Game"/><category term="Google Play Console"/><category term="Android Auto"/><category term="Android N"/><category term="Design"/><category term="Developer Console"/><category term="Performance"/><category term="SDK updates"/><category term="Android Developer Challenge"/><category term="Google Play game services"/><category term="Explore"/><category term="Google Play Games"/><category term="How-to"/><category term="androidstudio"/><category term="Material Design"/><category term="Android app development"/><category term="Best Practices"/><category term="Google I/O 2023"/><category term="Story"/><category term="Android Jetpack"/><category term="Google I/O"/><category term="Large Screens"/><category term="Media"/><category term="developers"/><category term="Web"/><category term="wear"/><category term="Android Market"/><category term="Google I/O 2024"/><category term="Tools"/><category term="AndroidDevStory"/><category term="Tablets"/><category term="android11"/><category term="foldables"/><category term="form factors"/><category term="#GenerativeAI"/><category term="#androiddevsummit"/><category term="Android Things"/><category term="Location"/><category term="UI"/><category term="developer"/><category term="#TheAndroidShow"/><category term="Android 1.5"/><category term="Indie Games"/><category term="compatibility"/><category term="Android Dev Summit"/><category term="Android for cars"/><category term="machine learning"/><category term="Android12"/><category term="App quality"/><category term="Gemini"/><category term="Solve"/><category term="android p"/><category term="Android 11"/><category term="Android Design"/><category term="Android O"/><category term="Indie Games Accelerator"/><category term="Optimization"/><category term="Udacity"/><category term="announcement"/><category term="monetization"/><category term="permissions"/><category term="#Android"/><category term="#JetpackCompose"/><category term="AI"/><category term="Android Development"/><category term="Authentication"/><category term="Beta"/><category term="Google Play Store"/><category term="Marshmallow"/><category term="Support Library"/><category term="androidq"/><category term="indie developers"/><category term="API"/><category term="Android 1.6"/><category term="Camera"/><category term="Google"/><category term="Google Analytics"/><category term="notifications"/><category term="safety"/><category term="Android Emulator"/><category term="Audio"/><category term="Europe"/><category term="Identity"/><category term="Learn"/><category term="Localization"/><category term="London"/><category term="Modern Android Development"/><category term="Testing"/><category term="beginner"/><category term="business"/><category term="events"/><category term="subscriptions"/><category term="Android 5.0"/><category term="Android Automotive OS"/><category term="AndroidO"/><category term="C++"/><category term="Developer Tools"/><category term="Google Cloud Platform"/><category term="Health Connect"/><category term="IoT"/><category term="Layout"/><category term="Pixel"/><category term="Play Store"/><category term="Project Treble"/><category term="WebView"/><category term="aosp"/><category term="appstory"/><category term="competition"/><category term="engagement"/><category term="grow"/><category term="passkeys"/><category term="prizes"/><category term="win"/><category term="#MADSkills"/><category term="ADS 22"/><category term="Ads"/><category term="Android Instant Apps"/><category term="Android Pie"/><category term="Android Vitals"/><category term="AndroidX"/><category term="Firebase"/><category term="GDC"/><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="Graphics"/><category term="Health Connect API"/><category term="Indie Games Festival"/><category term="Navigation"/><category term="News"/><category term="Open source"/><category term="Quality"/><category term="Renderscript"/><category term="UI toolkit"/><category term="admob"/><category term="analytics"/><category term="android13"/><category term="android14"/><category term="developerstory"/><category term="indie"/><category term="indies"/><category term="showcase"/><category term="wearos"/><category term="‘Google Play"/><category term="#AndroidDevJourney"/><category term="Android 15"/><category term="Android Developer Story"/><category term="Android M"/><category term="Android Q"/><category term="Android SDK"/><category term="CameraX"/><category term="Dev Story"/><category term="Developer Inspiration"/><category term="Gemini Nano"/><category term="Google Assistant"/><category term="How-To Guide"/><category term="IO2013"/><category term="Mobile Games"/><category term="Policies"/><category term="Policy"/><category term="Release Notes"/><category term="Saatchi"/><category term="TensorFlow"/><category term="UX"/><category term="battery"/><category term="career inspiration"/><category term="careers in tech"/><category term="google play protect"/><category term="users"/><category term="#io19"/><category term="APIs"/><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 Open Source Project"/><category term="Android fitness"/><category term="Android health"/><category term="AndroidAI"/><category term="AndroidDev"/><category term="App Resources"/><category term="Bluetooth"/><category term="Developer Journey"/><category term="Education"/><category term="Game Developers Conference"/><category term="Get Inspired"/><category term="Google Drive"/><category term="Google Play Devs"/><category term="Google Play games services"/><category term="HTTPS"/><category term="In-app Billing"/><category term="ML Kit"/><category term="Media and Camera"/><category term="OpenGL ES"/><category term="Power series"/><category term="Requirements"/><category term="Samples"/><category term="TensorFlow Lite"/><category term="Treble"/><category term="android15"/><category term="androidn"/><category term="app optimizations"/><category term="appexcellence"/><category term="community"/><category term="contest"/><category term="gamestory"/><category term="growth"/><category term="health data"/><category term="io15"/><category term="library"/><category term="material you"/><category term="nearby"/><category term="release"/><category term="update"/><category term="workmanager"/><category term="#Android11"/><category term="#AndroidDevChallenge"/><category term="Actions on Google"/><category term="Android 4.2"/><category term="Android 6.0"/><category term="Android Studio Emulator"/><category term="Android Study Jams"/><category term="Android UI"/><category term="Android for Work"/><category term="AndroidWear"/><category term="Animation"/><category term="App Components"/><category term="App Security"/><category term="Architecture"/><category term="Code Day"/><category term="Connectivity"/><category term="Courses"/><category term="Developer profiles"/><category term="GCM"/><category term="Google Developers"/><category term="Google Mobile Ads"/><category term="IO2014"/><category term="Intents"/><category term="KotlinConf"/><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="VR"/><category term="advertising"/><category term="androidp"/><category term="chrome"/><category term="credential manager"/><category term="d8"/><category term="event"/><category term="iOS"/><category term="large_screens"/><category term="play"/><category term="sandbox"/><category term="signing"/><category term="tutorial"/><category term="user experience"/><category term="wifi"/><category term="#GoogleforGames"/><category term="#Productive"/><category term="#io17"/><category term="#io18"/><category term="AGDK"/><category term="ART"/><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 Gradle Plugin"/><category term="Android app developers"/><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="ChromeOS"/><category term="Chromebooks"/><category term="Commerce"/><category term="Custom Model"/><category term="DAC/Develop"/><category term="Developer Labs"/><category term="Developing Media Apps"/><category term="Development Tools"/><category term="Early Access"/><category term="FIDO2"/><category term="Firebase Cloud Messaging"/><category term="Fragments"/><category term="GameDev"/><category term="GenerativeAI"/><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="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="Kotlin Multiplatform"/><category term="LiquidFun"/><category term="MADSkills"/><category term="Maps"/><category term="Maps API"/><category term="MaterialDesign"/><category term="Notification"/><category term="Onboarding"/><category term="Pixel Fold"/><category term="Preview"/><category term="Privacy Sandbox"/><category term="R8"/><category term="SDK Tools"/><category term="Samsung"/><category term="Screens"/><category term="Studio Bot"/><category term="Subscription"/><category term="TLS"/><category term="TV"/><category term="Text and Input"/><category term="Tiles"/><category term="Unity"/><category term="Virtual Reality"/><category term="Widgets"/><category term="accessibility"/><category term="adaptive UI"/><category term="adaptive layouts"/><category term="android oreo"/><category term="android privacy"/><category term="apk"/><category term="app performance"/><category term="appexcellencecasestudy"/><category term="appquality"/><category term="bestpractices"/><category term="chrome os"/><category term="codelab"/><category term="connection encryption"/><category term="desktop"/><category term="developer story"/><category term="developergamestory"/><category term="documentation"/><category term="dynamic delivery"/><category term="emulator"/><category term="encryption"/><category term="fcm"/><category term="features"/><category term="foldable"/><category term="glance"/><category term="google play for families"/><category term="google tv"/><category term="kernel"/><category term="language"/><category term="live edit"/><category term="mobile vision APIs"/><category term="multi-device development"/><category term="multiplatform apps"/><category term="network security"/><category term="oreo"/><category term="people"/><category term="privacy sandbox on android"/><category term="stable release"/><category term="store listing experiments"/><category term="training"/><category term="transparency"/><category term="ubicomp"/><category term="updates"/><category term="vulkan"/><category term="wear-tiles"/><category term="windowmanager"/><category term="#Android12"/><category term="#AndroidDev"/><category term="#AndroidJetpack"/><category term="#Androiddevelopment"/><category term="#GDC20"/><category term="#Gemini"/><category term="'Google Play"/><category term="5G"/><category term="64bit"/><category term="A/B testing"/><category term="AGDE"/><category term="AI code completion"/><category term="Action Bar"/><category term="Actions"/><category term="Android 12L"/><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 Camera"/><category term="Android Developer Community"/><category term="Android Developer Phone"/><category term="Android Devs"/><category term="Android Game SDK"/><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 app excellence"/><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="BLE"/><category term="Background work"/><category term="Baseline Profiles"/><category term="Better together"/><category term="Boston"/><category term="C"/><category term="Camera2"/><category term="Canary"/><category term="Cloud"/><category term="Compose Animation Previews"/><category term="Compose Material 3"/><category term="Conversation API"/><category term="Coroutines"/><category term="Crashlytics"/><category term="DAC/google"/><category term="Dashboard"/><category term="DataStore"/><category term="Daydream"/><category term="Debugging"/><category term="Dev Tools"/><category term="Developer Console Store Listing Experiments"/><category term="Efficient Apps"/><category term="ExoPlayer"/><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 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="Gradle"/><category term="Gradle sync"/><category term="Guidelines"/><category term="Health Services"/><category term="Horologist"/><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="Jetpack Compose 1.2"/><category term="KMP"/><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="Memory Management"/><category term="Model Maker"/><category term="MotionLayout"/><category term="Multi-form factor designs"/><category term="Navigation Q&amp;A"/><category term="Navigation component"/><category term="Nougat"/><category term="On-Device Machine Learning"/><category term="OnePlus"/><category term="OpenGL"/><category term="PickVisualMedia"/><category term="Pixel Tablet"/><category term="Pixel Watch"/><category term="Places"/><category term="Play Academy"/><category term="Play Commerce"/><category term="Play Privacy"/><category term="Play Security"/><category term="PlayStore"/><category term="Problem-Solving"/><category term="Productivity"/><category term="Profilers"/><category term="Profiling"/><category term="Pure"/><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="Translation"/><category term="User Support"/><category term="Video"/><category term="Wear surfaces"/><category term="Wearables"/><category term="adaptive"/><category term="adaptive API"/><category term="androidjetpack"/><category term="app developer"/><category term="app lifecycle"/><category term="app signing"/><category term="apps games insights"/><category term="ar"/><category term="attestation"/><category term="beacons"/><category term="beta testing"/><category term="billing"/><category term="build Android apps"/><category term="buildingforbillions"/><category term="codelabs"/><category term="coding productivity"/><category term="compiler"/><category term="constraintlayout"/><category term="conversations"/><category term="conversions"/><category term="device explorer"/><category term="devices"/><category term="dexer"/><category term="dx"/><category term="emojis"/><category term="game design"/><category term="get started"/><category term="google computer science"/><category term="hackster"/><category term="in-app purchase"/><category term="infinite deviation: games"/><category term="insights"/><category term="io2010"/><category term="laptops"/><category term="learn Android"/><category term="malware"/><category term="media3"/><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="target API"/><category term="text"/><category term="things"/><category term="user data"/><category term="watch face API"/><category term="watch faces"/><category term="&quot;featured'+'androidstudio'"/><category term="#11WeeksOfAndroid Android TV"/><category term="#64-bit"/><category term="#AAB"/><category term="#ADS19"/><category term="#APK"/><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="#AndroidAI"/><category term="#AndroidAppBundles"/><category term="#AndroidGeiminiEra"/><category term="#AndroidStudio"/><category term="#AndroidTV"/><category term="#AndroidTV #Google Cast #Udacity"/><category term="#Androidbasics"/><category term="#AppBundles"/><category term="#Argentina"/><category term="#Compose"/><category term="#Composecamp"/><category term="#Covid-19"/><category term="#EdTech"/><category term="#Experts"/><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="#MADscore"/><category term="#Media"/><category term="#PasskeysWeek #Identity"/><category term="#Pixel"/><category term="#Productivity"/><category term="#STEM"/><category term="#StorageSavings"/><category term="#TV"/><category term="#TechEd"/><category term="#TechEdu"/><category term="#advancedAndroid #Udacity"/><category term="#autofill"/><category term="#codelabcourses"/><category term="#codelabs"/><category term="#compiler"/><category term="#identity"/><category term="#io16"/><category term="#memory"/><category term="#optimization"/><category term="#passkeys"/><category term="#pixel7"/><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="3d"/><category term="5 star apps"/><category term="505 Games"/><category term="8.1"/><category term="AAKB"/><category term="AAudio for Android"/><category term="ADT-3"/><category term="AGI"/><category term="AI&#10;Industry Trends"/><category term="AIY"/><category term="AIY Projects"/><category term="AMD"/><category term="AMP"/><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="ActivityResult"/><category term="Administration"/><category term="Advanced Android course"/><category term="Advanced Android training"/><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 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 Basics in Kotlin"/><category term="Android Basics with Compose"/><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 Development Tools"/><category term="Android Device Streaming"/><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 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 Logo"/><category term="Android Studio Profiler"/><category term="Android Testing Support Library"/><category term="Android Tools"/><category term="Android U"/><category term="Android VRP"/><category term="Android XR"/><category term="Android XR SDK"/><category term="Android audio latency"/><category term="Android betas"/><category term="Android developer codelabs"/><category term="Android ecosystem"/><category term="Android games on PC"/><category term="Android graphics"/><category term="Android release"/><category term="AndroidRuntime"/><category term="Annoucements"/><category term="AnswerLab"/><category term="AoG"/><category term="App Actions"/><category term="App Startup"/><category term="App experience"/><category term="App icons"/><category term="AppSearch"/><category term="AppWidgets"/><category term="Application Security Improvement Program"/><category term="Assistant SDK"/><category term="Auto"/><category term="Auto Backup"/><category term="Autofill Framework"/><category term="BABBQ"/><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="CTS"/><category term="Call Log"/><category term="Camera Extensions"/><category term="CameraX Effect"/><category term="CameraX Extensions"/><category term="Cast"/><category term="Certificates"/><category term="Certification"/><category term="Channels"/><category term="Cloud Speech API"/><category term="Compiler Mitigations"/><category term="Compiler-based security"/><category term="Complications"/><category term="Composables"/><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="Crostini"/><category term="CultureAlley"/><category term="DAC/Design"/><category term="DNS over TLS"/><category term="DP3"/><category term="DST"/><category term="Dagger"/><category term="Daylight savings"/><category term="Deep Links"/><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 Productivity"/><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="EOY Recap 2022"/><category term="EOY recap 2023"/><category term="Editors’ Choice"/><category term="Educate"/><category term="Electronic Arts"/><category term="Engage"/><category term="Enterprise"/><category term="Entrepreneurs"/><category term="Extensions"/><category term="Facebook"/><category term="Fast Pair"/><category term="Feedback"/><category term="Finance"/><category term="Find My Device"/><category term="Fit"/><category term="Foreground services"/><category term="Fortify"/><category term="Fragment"/><category term="Freeform Resizing"/><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="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 in Android Studio"/><category term="GeminiPro"/><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 Apps"/><category term="Google Awareness API"/><category term="Google Developer Student Clubs"/><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 App Safety"/><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 Points"/><category term="Google Play Protect Rewards Program"/><category term="Google Play developer distribution agreement"/><category term="Google Play system updates"/><category term="Google registry"/><category term="GoogleDeveloperDay"/><category term="GoogleForGames"/><category term="GoogleIO"/><category term="GooglePlay AndroidDev"/><category term="Gpfe"/><category term="GridLayout"/><category term="HAL"/><category term="HDR"/><category term="HWASan"/><category term="Hard"/><category term="HelloEnglish"/><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"/><category term="I/O 2018"/><category term="I/O 2024 KMP"/><category term="ICS"/><category term="IO"/><category term="IO 2019"/><category term="Image Processing"/><category term="Indie games developers"/><category term="Indonesia"/><category term="Indonesia Games Contest"/><category term="Industry Standards"/><category term="Industry Trends"/><category term="Intent"/><category term="Intermediate"/><category term="Inzen studio"/><category term="Issue Tracker"/><category term="JetBrains"/><category term="Jetpack Compose 1.3"/><category term="Jetpack Compose 1.4"/><category term="Jetpack Compose 1.5"/><category term="Jetpack Libraries"/><category term="Jetpack Tiles Library"/><category term="Job Scheduler"/><category term="Job Service"/><category term="KNOX"/><category term="KSP"/><category term="Key Attestation"/><category term="Keystone"/><category term="Klei Entertainment"/><category term="Kotlin Event"/><category term="Kotlin Symbol Processiong"/><category term="Kotlin codelabs"/><category term="LTV"/><category term="LaMatinale"/><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="Marta Gui"/><category term="Media3 Effect"/><category term="MediaPipe"/><category term="MediaSession"/><category term="Memory Safety"/><category term="Messenger"/><category term="Meta"/><category term="Mirror Mode"/><category term="Mobile App Development"/><category term="Mobile Development"/><category term="Mountain View"/><category term="Multiwindow"/><category term="Munich"/><category term="Music"/><category term="NBU"/><category term="NFC"/><category term="NLP"/><category term="Nav Editor"/><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="Ongoing Activities API"/><category term="OpenSL ES for Android"/><category term="OpenXR"/><category term="Operating System"/><category term="Oppo"/><category term="Orientation"/><category term="OverlayEffect"/><category term="P2P"/><category term="PC"/><category term="PWA"/><category term="Paging"/><category term="Parcelize"/><category term="PasskeysWeek"/><category term="Paul Gouge"/><category term="Performance Optimization"/><category term="Photo Sphere"/><category term="Physics"/><category term="Pico"/><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="Platform Stability"/><category term="Platforms"/><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="Preview Stabilization"/><category term="Product Inclusion"/><category term="Profileable Build"/><category term="Project Mainline"/><category term="Promo Graphics"/><category term="Promotions"/><category term="Public Tracker"/><category term="PyTorch"/><category term="PyTorch mobile support"/><category term="PyTorck"/><category term="Q Beta 6"/><category term="Quick Search Box"/><category term="RTL"/><category term="Ratings and Reviews"/><category term="Releases"/><category term="Restore Credentials"/><category term="Robinhood"/><category term="Rust"/><category term="SDLC"/><category term="SMS"/><category term="SafeArgs"/><category term="Sam Glassenberg"/><category term="Sample app"/><category term="Sanitizers"/><category term="Santa Tracker"/><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="Sharding"/><category term="ShareActionProvider"/><category term="Shared Elements"/><category term="SharedPreferences"/><category term="Shortcuts"/><category term="Signos"/><category term="Skyscanner"/><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="Super Evil MegaCorp"/><category term="Survey"/><category term="System hardening"/><category term="TAGS: Google Play"/><category term="TEE"/><category term="Tap to Pay"/><category term="Target API level"/><category term="Tel Aviv"/><category term="Telephony"/><category term="TikTok"/><category term="Tiles API"/><category term="Tiles components"/><category term="Tiles material"/><category term="Tips"/><category term="Titan Brawl"/><category term="Touch"/><category term="Trusted User Interface"/><category term="Twitter"/><category term="UAMP"/><category term="USB speed detection"/><category term="UTP"/><category term="UXR"/><category term="Ultra HDR"/><category term="Universal Android Music Player"/><category term="Updatability"/><category term="User Acquisition"/><category term="User Engagement"/><category term="User Feedback"/><category term="User Retention"/><category term="User-Agent Reduction"/><category term="VGames"/><category term="Viber"/><category term="ViewBinding"/><category term="Virtualization"/><category term="Visibility"/><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="Watch Face"/><category term="Wear UI Library"/><category term="WebXR"/><category term="Webdriver"/><category term="Wide Color"/><category term="Withings"/><category term="Work Manager"/><category term="World Food Day"/><category term="X"/><category term="Xiaomi"/><category term="XmlPullParser"/><category term="YouTube"/><category term="activity-recognition"/><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 ux"/><category term="android wear 1.0"/><category term="android-dev"/><category term="android-tv"/><category term="android10"/><category term="android16"/><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 standby buckets"/><category term="app updates"/><category term="appbundle"/><category term="application security"/><category term="applications"/><category term="arch"/><category term="arcore"/><category term="assistive technology"/><category term="audio playback"/><category term="audio playback capture"/><category term="audio recording"/><category term="augmented reality"/><category term="autofill"/><category term="award"/><category term="awareness"/><category term="background"/><category term="background access"/><category term="background location"/><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="clang"/><category term="class loading"/><category term="code completion"/><category term="codesearch"/><category term="coding"/><category term="color"/><category term="companion Action"/><category term="compilers"/><category term="conferencing"/><category term="context"/><category term="controls"/><category term="course"/><category term="crash management"/><category term="credential"/><category term="cross-device"/><category term="cross-device sdk"/><category term="cross-platform"/><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="disassembly"/><category term="dynamicdelivery"/><category term="eBook"/><category term="ecosystem"/><category term="educator"/><category term="efficiency"/><category term="explorer"/><category term="face detection"/><category term="faculty"/><category term="families"/><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="free-form"/><category term="full-text search"/><category term="game-as-a-service"/><category term="games business"/><category term="gaming"/><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="google-tv"/><category term="googleservices"/><category term="guide"/><category term="heading"/><category term="health"/><category term="heart rate sensor"/><category term="how to develop audio apps for android"/><category term="http"/><category term="i18n"/><category term="imakeapps"/><category term="immersive experiences"/><category term="indie game developers"/><category term="insets"/><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="internationalization"/><category term="internet"/><category term="intuit"/><category term="io16"/><category term="io18"/><category term="jetpack media3"/><category term="jobscheduler"/><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="largescreens"/><category term="latency"/><category term="latest."/><category term="layouts"/><category term="leanback"/><category term="learning"/><category term="listing"/><category term="liveops"/><category term="location access"/><category term="location data"/><category term="long aspect ratio"/><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 encryption"/><category term="mobile search"/><category term="motion."/><category term="multi-device"/><category term="multi-display support"/><category term="multiplayer"/><category term="multitasking"/><category term="music player"/><category term="musician apps"/><category term="native development"/><category term="native libraries"/><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="ordered broadcast"/><category term="oscon"/><category term="outreach"/><category term="packaging"/><category term="partial"/><category term="patch level"/><category term="patching"/><category term="pathway"/><category term="peer group"/><category term="performancetools"/><category term="phone"/><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="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-time audio"/><category term="recaptcha"/><category term="registration"/><category term="requirement"/><category term="resizing"/><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="secure hardware"/><category term="security infrastructure"/><category term="selinux"/><category term="sensors-and-location"/><category term="service fees"/><category term="sign-in"/><category term="smart reply"/><category term="smartwatch design"/><category term="smr"/><category term="source code"/><category term="spam"/><category term="spatial audio"/><category term="spatial computing"/><category term="spyware"/><category term="stability"/><category term="stable"/><category term="storelistingexperime"/><category term="strictmode"/><category term="study group"/><category term="success"/><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"/><category term="time zone"/><category term="titan"/><category term="traceview"/><category term="transformer"/><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="watchface"/><category term="wear emulators"/><category term="web registry"/><category term="wellness"/><category term="window"/><category term="windowing"/><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?redirect=false" 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&amp;redirect=false" 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>1751</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4849597402377084984</id><published>2024-12-17T12:15:00.000-08:00</published><updated>2024-12-17T12:18:48.605-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Camera"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="Low-light"/><title type="text">How Instagram enabled users to take stunning Low Light Photos</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCE-0uLP7rrtb5MLiPKZnZt8TOsGXzHrvG48Jfgmi_B7oVmXPtFA_0iADgxpUic7LnW4nVp2OksYTIbL2vexv0FwRU_1RgSxZpvgx0xrrEMCzRff37bM1mslPjllsvjMtt920kZlFMUtOnk4UxOAJDvENCCJhOuzvet-0aS0jJnH25hBlGydGJmvH7gc/s1600/Instagram-Low-Light-Case-Study-Metadata-Card%20%283%29.gif" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCE-0uLP7rrtb5MLiPKZnZt8TOsGXzHrvG48Jfgmi_B7oVmXPtFA_0iADgxpUic7LnW4nVp2OksYTIbL2vexv0FwRU_1RgSxZpvgx0xrrEMCzRff37bM1mslPjllsvjMtt920kZlFMUtOnk4UxOAJDvENCCJhOuzvet-0aS0jJnH25hBlGydGJmvH7gc/s1600/Instagram-Low-Light-Case-Study-Metadata-Card%20%283%29.gif" style="display: none;" /&gt;

&lt;em&gt;Posted by Donovan McMurray – Developer Relations Engineer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCE-0uLP7rrtb5MLiPKZnZt8TOsGXzHrvG48Jfgmi_B7oVmXPtFA_0iADgxpUic7LnW4nVp2OksYTIbL2vexv0FwRU_1RgSxZpvgx0xrrEMCzRff37bM1mslPjllsvjMtt920kZlFMUtOnk4UxOAJDvENCCJhOuzvet-0aS0jJnH25hBlGydGJmvH7gc/s1600/Instagram-Low-Light-Case-Study-Metadata-Card%20%283%29.gif"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCE-0uLP7rrtb5MLiPKZnZt8TOsGXzHrvG48Jfgmi_B7oVmXPtFA_0iADgxpUic7LnW4nVp2OksYTIbL2vexv0FwRU_1RgSxZpvgx0xrrEMCzRff37bM1mslPjllsvjMtt920kZlFMUtOnk4UxOAJDvENCCJhOuzvet-0aS0jJnH25hBlGydGJmvH7gc/s1600/Instagram-Low-Light-Case-Study-Metadata-Card%20%283%29.gif" /&gt;&lt;/a&gt;


&lt;p&gt;Instagram, the popular photo and video sharing social networking service, is constantly delighting users with a best-in-class camera experience. Recently, Instagram launched another improvement on Android with their Night Mode implementation.&lt;/p&gt; 

&lt;p&gt;As devices and their cameras become more and more capable, users expect better quality images in a wider variety of settings. Whether it’s a night out with friends or the calmness right after you get your baby to fall asleep, the special moments users want to capture often don’t have ideal lighting conditions.&lt;/p&gt;

&lt;p&gt;Now, when Instagram users on Android take a photo in low light environments, they’ll see a moon icon that allows them to activate Night Mode for better image quality. This feature is currently available to users with any Pixel device from the 6 series and up, a Samsung Galaxy S24Ultra, or a Samsung Flip6 or Fold6, with more devices to follow.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image showing the user experience of taking a photo of a shelf with plants, oranges, and decorative items in low light" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPIgn78UZMSoaSSlRLQdZNRQNxUggrB2l66akuFGajtcxJidF-4Au2FEUiJcK8JEAjm4C0fKRXLdJS0YS4wysY6qOfjkDW8x4Fpfld2d1PMHeEPygMvDqQzjuvZ1E9N4ur8HpWck2PMBK05P0r7X7Q5mdxjh7EOfnK9TFEsL4ELeEzx62zkNM68qLpfbg/s1600/Instagram-Low-Light-Demo.gif" width="30%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;


&lt;h3&gt;Leveraging Device-specific Camera Technologies&lt;/h3&gt;

&lt;p&gt;Android enables apps to take advantage of device-specific camera features through the &lt;a href="https://developer.android.com/media/camera/camera-extensions" target="_blank"&gt;Camera Extensions API&lt;/a&gt;. The Extensions framework currently provides functionality like Night Mode for low-light image captures, Bokeh for applying portrait-style background blur, and Face Retouch for beauty filters. All of these features are implemented by the Original Equipment Manufacturers (OEMs) in order to maximize the quality of each feature on the hardware it's running on.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A quote by Nilesh Patel, Software Engineer, reads: 'For Meta's billions of users, having to write custom code for each new device is simply not scalable. It would also add unnecessary app size when Meta users download the app. Hence our guideline is ‘write once to scale to billions’, favoring platform APIs.' A headshot of Nilesh Patel is displayed to the right of the quote card." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT8KtpJKEQ0xQMWNiUVPpuKFlQAMwC8Rppf-gX8k-uyZp9zMrO6fqQOnRwNjAsLJHOwPMOLVSOrDwqaY-B_aWvLBzXqEd9JR0mHcame8uSNCx8Ciox_FMYtiKK95cKGG7g4fz_kavWmeSCC4k3W3a13VIQk1CIr6nnW_Md_26Pt6gF3fnReRmXcKnwK6M/s1600/Instagram-Low-Light-Case-Study-Quote-Card-1.png" width="100%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Furthermore, exposing this OEM-specific functionality through the Extensions API allows developers to use a consistent implementation across all of these devices, getting the best of both worlds: implementations that are tuned to a wide-range of devices with a unified API surface. According to Nilesh Patel, a Software Engineer at Instagram, “for Meta’s billions of users, having to write custom code for each new device is simply not scalable. It would also  add unnecessary app size when Meta users download the app. Hence our guideline is ‘write once to scale to billions’, favoring platform APIs.” &lt;/p&gt;

&lt;p&gt;More and more OEMs are supporting Extensions, too! There are already over 120 different devices that support the Camera Extensions, representing over 75 million monthly active users. There’s never been a better time to integrate Extensions into your Android app to give your users the best possible camera experience.&lt;/p&gt;

&lt;h3&gt;Impact on Instagram&lt;/h3&gt;

&lt;p&gt;The results of adding Night Mode to Instagram have been very positive for Instagram users. Jin Cui, a Partner Engineer on Instagram, said “Night Mode has increased the number of photos captured and shared with the Instagram camera, since the quality of the photos are now visibly better in low-light scenes.”&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A quote from Jin Cui, Partner Engineer, reads: 'Night Mode has increased the number of photos captured and shared with the Instagram camera, since the quality of the photos are now visibly better in low-light scenes.'  A photo of Jin Cui wearing glasses and a maroon hoodie is shown to the right of the quote card." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2WJUHy2T1phGfcCCvNMoO6Yy2izhbiXYkAyTwMY5crZGsjzqX125cbpSmrV5kQIZn3EbPi5RX2KC7Fb8hQ8ShyphenhyphenwIcCNeMbxw3Ctv5SsHwhWDzncoNvUeIlbndXAik-jPaNfr3B1doS4fO41Y6dShA8IOShT58qUeHtJxCojVSBAPT5ytUQYHo6_tItg/s1600/4.png" width="100%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Compare the following photos to see just how big of a difference Night Mode makes. The first photo is taken in Instagram with Night Mode off, the second photo is taken in Instagram with Night Mode on, and the third photo is taken with the native camera app with the device’s own low-light processing enabled.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A 3x3 grid of photos compares low-light performance across different smartphone cameras and Instagram's night mode. The photos show a shelf with plants, oranges, and decorative items, taken with a Pixel 9 Pro, Samsung Galaxy S24 Ultra, and Pixel 6 Pro, both with and without night mode enabled." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOOL7Tfk9qRc81bCdC5qMgfnJhfzsgeBCD4Bqv4rvVuhc5A3tiYkVh5LB5CjLeWXBpqYMr13sdYTwWGgY_dPfRDfAW4sQbLzDeb3umNi7eNxh4LNqhn2D0JaS59ykjg27Xwb2sJNZ4SmAeJ5c-EhLEXiLg1DGKKfb73jNXrpNX_fKzCArTbqpNeGLTJQ/s1600/Instagram%20Night%20Mode%20Comparison.png" width="100%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;h3&gt;Ensuring Quality through Image Test Suite (ITS)&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://source.android.com/docs/compatibility/cts/camera-its" target="_blank"&gt;The Android Camera Image Test Suite&lt;/a&gt; (ITS) is a framework for testing images from Android cameras. ITS tests configure the camera and capture shots to verify expected image data. These tests are functional and ensure advertised camera features work as expected. A tablet mounted on one side of the ITS box displays the test chart. The device under test is mounted on the opposite side of the ITS box.&lt;/p&gt;

&lt;p&gt;Devices must pass the ITS tests for any feature that the device claims to support for apps to use, including the tests we have for the Night Mode Camera Extension.&lt;/p&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Regular field-of-view (RFoV) ITS box Rev1b showing the device mounting brackets" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYrN8a7DawBfJ_u_x5QEoNNX3v0PSkuuqO3ridSEP0cIezmqPuy3GujLdomTBwUvK5l1mN6GDFcdSpCrv57B5VyDJCWge3RwIy70jMWgDYjpmg6h9b194hnHodGAlyDaotHj6_rNETJ1IkkQUO4fbR0nL40ViEea0riwwDKukkTZ3Gc0XoAl7WG7t2BKw/s1600/image13.png" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Regular field-of-view (RFoV) ITS box Rev1b showing the device mounting brackets&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;The Android Camera team faced the challenge of ensuring the Night Mode Camera Extension feature functioned consistently across all devices in a scalable way. This required creating a testing environment with very low light and a wide dynamic range. This configuration was necessary to simulate real-world lighting scenarios, such as a city at night with varying levels of brightness and shadow, or the atmospheric lighting of a restaurant.&lt;/p&gt;

&lt;p&gt;The first step to designing the test was to define the specific lighting conditions to simulate. Field testing with a light meter in various locations and lighting conditions was conducted to determine the target lux level. The goal was to ensure the camera could capture clear images in low-light conditions, which led to the establishment of 3 lux as the target lux level. The figure below shows various lighting conditions and their respective lux value.&lt;/p&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Evaluation of scenes of varying lighting conditions measured with a Light Meter" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidtH_-2D4zzXah4wnDrZAW406wnS8Ac8hlQithcGYpsIAOGlWs604NDu-0nluh7Zn1bxJPnZaRirgh37psXsKsz7IwfYN9KZ9LT0uzC5jPRbf06kaUTuCtJJ5e_b4qizgIcNZPy71vYYVx9KZb5dpanIZXCY2Ru8sqYD-FZIKLP3j_mKVAz6mFwcKo2E0/s1600/image9.png" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Evaluation of scenes of varying lighting conditions measured with a Light Meter&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;The next step was to develop a test chart to accurately measure a wide dynamic range in a low light environment. The team developed and iterated on several test charts and arrived at the following test chart shown below. This chart arranges a grid of squares in varying shades of grey. A red outline defines the test area for cropping. This enables excluding darker external regions. The grid follows a Hilbert curve pattern to minimize abrupt light or dark transitions. The design allows for both quantitative measurements and simulation of a broad range of light conditions.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Low Light test chart displayed on tablet in ITS box" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib1phXLthNeF7L-1MUZ_EHCma6UDvtRXAhw37ppuQhFG4TurjiEGT2N96Xo9yhDDZhTx9a6OYuXD-sTTcY17WSJx-IRrAI0D-EtFcepkbo_bQ7pTEI8R0ELh-eb4vpaRHl9yxLMtJaVUB3dvgtEKK_eAo6Vw8-KvHzIJjjgDfBUYnyMMw68UnqfwkdS7c/s1600/image4.png" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Low Light test chart displayed on tablet in ITS box&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;The test chart captures an image using the Night Mode Camera Extension in low light conditions. The image is used to evaluate the improvement in the shadows and midtones while ensuring the highlights aren’t saturated. This evaluation involves two criteria: ensure the average luma value of the six darkest boxes is at least 85, and ensure the average luma contrast between these boxes is at least 17. The figure below shows the test capture and chart results.&lt;/p&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Night Mode Camera Extension capture and test chart result" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4fLXpVROXRKXc77yYlluhzWq4FpHvMH2xMgZ51YQfjK1k000Mp4i4qpH-bWc-Fon8ob-BUqIf3bYafP5ej29MdVrrXBlB2iANpl5m__Uw6b1ZypOmpIDyovanqImUlIkHWqMl7Ump659e9gzrnC-AQ8m0bATiKdDItYFGAh8ptlTDqpWPcXBn2IQikoI/s1600/image6.png" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Night Mode Camera Extension capture and test chart result&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;By leveraging the existing ITS infrastructure, the Android Camera team was able to provide consistent, high quality Night Mode Camera Extension captures. This gives application developers the confidence to integrate and enable Night Mode captures for their users. It also allows OEMs to validate their implementations and ensure users get the best quality capture.&lt;/p&gt;

&lt;h3&gt;How to Implement Night Mode with Camera Extensions&lt;/h3&gt;

&lt;p&gt;Camera Extensions are available to apps built with Camera2 or CameraX. In this section, we’ll walk through each of the features Instagram implemented. The code examples will use CameraX, but you’ll find links to the Camera2 documentation at each step.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size:large;"&gt;Enabling Night Mode Extension&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;Night Mode involves combining multiple exposures into a single still photo for better quality shots in low-light environments. So first, you’ll need to check for Night Mode availability, and tell the camera system to start a Camera Extension session. With CameraX, this is done with an &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/androidx/camera/extensions/ExtensionsManager" target="_blank"&gt;ExtensionsManager&lt;/a&gt;&lt;/span&gt; instead of the standard &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/hardware/camera2/CameraManager" target="_blank"&gt;CameraManager&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;private&lt;/span&gt; suspend &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;setUpCamera&lt;/span&gt;() {
  &lt;span style="color: #408080; font-style: italic;"&gt;// Obtain an instance of a process camera provider. The camera provider&lt;/span&gt;
  &lt;span style="color: #408080; font-style: italic;"&gt;// provides access to the set of cameras associated with the device.&lt;/span&gt;
  &lt;span style="color: #408080; font-style: italic;"&gt;// The camera obtained from the provider will be bound to the activity lifecycle.&lt;/span&gt;
  &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; cameraProvider = ProcessCameraProvider.getInstance(application).await()

  &lt;span style="color: #408080; font-style: italic;"&gt;// Obtain an instance of the extensions manager. The extensions manager &lt;/span&gt;
  &lt;span style="color: #408080; font-style: italic;"&gt;// enables a camera to use extension capabilities available on the device.&lt;/span&gt;
  &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; extensionsManager = ExtensionsManager.getInstanceAsync(
    application, cameraProvider).await()

  &lt;span style="color: #408080; font-style: italic;"&gt;// Select the camera.&lt;/span&gt;
  &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

  &lt;span style="color: #408080; font-style: italic;"&gt;// Query if extension is available. Not all devices will support &lt;/span&gt;
  &lt;span style="color: #408080; font-style: italic;"&gt;// extensions or might only support a subset of extensions.&lt;/span&gt;
  &lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (extensionsManager.isExtensionAvailable(cameraSelector, ExtensionMode.NIGHT)) {
    &lt;span style="color: #408080; font-style: italic;"&gt;// Unbind all use cases before enabling different extension modes.&lt;/span&gt;
    &lt;span style="color: green; font-weight: bold;"&gt;try&lt;/span&gt; {
      cameraProvider.unbindAll()

      &lt;span style="color: #408080; font-style: italic;"&gt;// Retrieve a night extension enabled camera selector&lt;/span&gt;
      &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; nightCameraSelector = extensionsManager.getExtensionEnabledCameraSelector(
        cameraSelector,
        ExtensionMode.NIGHT
      )

      &lt;span style="color: #408080; font-style: italic;"&gt;// Bind image capture and preview use cases with the extension enabled camera&lt;/span&gt;
      &lt;span style="color: #408080; font-style: italic;"&gt;// selector.&lt;/span&gt;
      &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; imageCapture = ImageCapture.Builder().build()
      &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; preview = Preview.Builder().build()
        
      &lt;span style="color: #408080; font-style: italic;"&gt;// Connect the preview to receive the surface the camera outputs the frames&lt;/span&gt;
      &lt;span style="color: #408080; font-style: italic;"&gt;// to. This will allow displaying the camera frames in either a TextureView&lt;/span&gt;
      &lt;span style="color: #408080; font-style: italic;"&gt;// or SurfaceView. The SurfaceProvider can be obtained from the PreviewView.&lt;/span&gt;
      preview.setSurfaceProvider(surfaceProvider)

      &lt;span style="color: #408080; font-style: italic;"&gt;// Returns an instance of the camera bound to the lifecycle&lt;/span&gt;
      &lt;span style="color: #408080; font-style: italic;"&gt;// Use this camera object to control various operations with the camera&lt;/span&gt;
      &lt;span style="color: #408080; font-style: italic;"&gt;// Example: flash, zoom, focus metering etc.&lt;/span&gt;
      &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; camera = cameraProvider.bindToLifecycle(
        lifecycleOwner,
        nightCameraSelector,
        imageCapture,
        preview
      )
    } &lt;span style="color: green; font-weight: bold;"&gt;catch&lt;/span&gt; (e: Exception) {
      Log.e(TAG, &lt;span style="color: #ba2121;"&gt;"Use case binding failed"&lt;/span&gt;, e)
    }
  } &lt;span style="color: green; font-weight: bold;"&gt;else&lt;/span&gt; {
    &lt;span style="color: #408080; font-style: italic;"&gt;// In the case where the extension isn't available, you should set up&lt;/span&gt;
    &lt;span style="color: #408080; font-style: italic;"&gt;// CameraX normally with non-extension-enabled CameraSelector.&lt;/span&gt;
  }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To do this in Camera2, see the &lt;a href="https://developer.android.com/media/camera/camera2/extensions-api#create_a_cameraextensionsession_with_the_camera2_extensions_api" target="_blank"&gt;Create a &lt;span style="font-family: Courier;"&gt;CameraExtensionSession&lt;/span&gt; with the Camera2 Extensions API&lt;/a&gt; guide.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size:large;"&gt;Implementing the Progress Bar and PostView Image&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;For an even more elevated user experience, you can provide feedback while the Night Mode capture is processing. In Android 14, we added callbacks for the progress and for post view, which is a temporary image capture before the Night Mode processing is complete. The below code shows how to use these callbacks in the &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/androidx/camera/core/ImageCapture#%28androidx.camera.core.ImageCapture%29.takePicture%28androidx.camera.core.ImageCapture.OutputFileOptions,kotlin.Function0,kotlin.Function1,kotlin.Function1%29" target="_blank"&gt;takePicture()&lt;/a&gt;&lt;/span&gt; method. The actual implementation to update the UI is very app-dependent, so we’ll leave the actual UI updating code to you.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// When setting up the ImageCapture.Builder, set postviewEnabled and &lt;/span&gt;
&lt;span style="color: #408080; font-style: italic;"&gt;// posviewResolutionSelector in order to get a PostView bitmap in the&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic;"&gt;// onPostviewBitmapAvailable callback when takePicture() is called.&lt;/span&gt;
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; cameraInfo = cameraProvider.getCameraInfo(cameraSelector)
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; isPostviewSupported =
  ImageCapture.getImageCaptureCapabilities(cameraInfo).isPostviewSupported

&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; postviewResolutionSelector = ResolutionSelector.Builder()
  .setAspectRatioStrategy(AspectRatioStrategy(
    AspectRatioStrategy.RATIO_16_9_FALLBACK_AUTO_STRATEGY, 
    AspectRatioStrategy.FALLBACK_RULE_AUTO))
  .setResolutionStrategy(ResolutionStrategy(
    previewSize, 
    ResolutionStrategy.FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER
  ))
  .build()

imageCapture = ImageCapture.Builder()
  .setTargetAspectRatio(AspectRatio.RATIO_16_9)
  .setPostviewEnabled(isPostviewSupported)
  .setPostviewResolutionSelector(postviewResolutionSelector)
  .build()

&lt;span style="color: #408080; font-style: italic;"&gt;// When the Night Mode photo is being taken, define these additional callbacks&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic;"&gt;// to implement PostView and a progress indicator in your app.&lt;/span&gt;
imageCapture.takePicture(
  outputFileOptions,
  Dispatchers.Default.asExecutor(),
  object : ImageCapture.OnImageSavedCallback {
    &lt;span style="color: green; font-weight: bold;"&gt;override&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;onPostviewBitmapAvailable&lt;/span&gt;(bitmap: Bitmap) {
      &lt;span style="color: #408080; font-style: italic;"&gt;// Add the Bitmap to your UI as a placeholder while the final result is processed&lt;/span&gt;
    }

    &lt;span style="color: green; font-weight: bold;"&gt;override&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;onCaptureProcessProgressed&lt;/span&gt;(progress: Int) {
      &lt;span style="color: #408080; font-style: italic;"&gt;// Use the progress value to update your UI; values go from 0 to 100.&lt;/span&gt;
    }
  }
)
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To accomplish this in Camera2, see the &lt;a href="https://github.com/android/camera-samples/blob/main/Camera2Extensions/app/src/main/java/com/example/android/camera2/extensions/fragments/CameraFragment.kt" target="_blank"&gt;CameraFragment.kt&lt;/a&gt; file in the Camera2Extensions sample app.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size:large;"&gt;Implementing the Moon Icon Indicator&lt;/span&gt;&lt;/h4&gt;
  
&lt;p&gt;Another user-focused design touch is showing the moon icon to let the user know that a Night Mode capture will happen. It’s also a good idea to let the user tap the moon icon to disable Night Mode capture. There’s an upcoming API in Android 16 next year to let you know when the device is in a low-light environment.&lt;/p&gt;

&lt;p&gt;Here are the possible values for the Night Mode Indicator API:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;p&gt;&lt;b&gt;UNKNOWN&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The camera is unable to reliably detect the lighting conditions of the current scene to determine if a photo will benefit from a Night Mode Camera Extension capture.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;&lt;p&gt;&lt;b&gt;OFF&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The camera has detected lighting conditions that are sufficiently bright. Night Mode Camera Extension is available but may not be able to optimize the camera settings to take a higher quality photo.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul &gt;&lt;ul&gt;&lt;p&gt;&lt;b&gt;ON&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The camera has detected low-light conditions. It is recommended to use Night Mode Camera Extension to optimize the camera settings to take a high-quality photo in the dark.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;

&lt;h3&gt;Next Steps&lt;/h3&gt;

&lt;p&gt;Read more about Android’s camera APIs in the &lt;a href="https://developer.android.com/media/camera/camera2" target="_blank"&gt;Camera2 guides&lt;/a&gt; and the &lt;a href="https://developer.android.com/media/camera/camerax" target="_blank"&gt;CameraX guides&lt;/a&gt;. Once you’ve got the basics down, check out the &lt;a href="https://developer.android.com/media" target="_blank"&gt;Android Camera and Media Dev Center&lt;/a&gt; to take your camera app development to the next level. For more details on upcoming Android features, like the Night Mode Indicator API, get started with the &lt;a href="https://developer.android.com/about/versions/16/overview" target="_blank"&gt;Android 16 Preview&lt;/a&gt; program.&lt;/p&gt;

</content><link href="http://android-developers.googleblog.com/feeds/4849597402377084984/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/instagram-on-android-low-light-photos.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4849597402377084984" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4849597402377084984" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/instagram-on-android-low-light-photos.html" rel="alternate" title="How Instagram enabled users to take stunning Low Light Photos" 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/AVvXsEheCE-0uLP7rrtb5MLiPKZnZt8TOsGXzHrvG48Jfgmi_B7oVmXPtFA_0iADgxpUic7LnW4nVp2OksYTIbL2vexv0FwRU_1RgSxZpvgx0xrrEMCzRff37bM1mslPjllsvjMtt920kZlFMUtOnk4UxOAJDvENCCJhOuzvet-0aS0jJnH25hBlGydGJmvH7gc/s72-c/Instagram-Low-Light-Case-Study-Metadata-Card%20%283%29.gif" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-3191538077770873915</id><published>2024-12-17T12:00:00.001-08:00</published><updated>2024-12-17T12:02:41.332-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Camera"/><category scheme="http://www.blogger.com/atom/ns#" term="Camera Extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="CameraX"/><category scheme="http://www.blogger.com/atom/ns#" term="CameraX Effect"/><category scheme="http://www.blogger.com/atom/ns#" term="CameraX Extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="HDR"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetpack Compose"/><category scheme="http://www.blogger.com/atom/ns#" term="Media3 Effect"/><category scheme="http://www.blogger.com/atom/ns#" term="Mirror Mode"/><category scheme="http://www.blogger.com/atom/ns#" term="Night Mode"/><category scheme="http://www.blogger.com/atom/ns#" term="OverlayEffect"/><category scheme="http://www.blogger.com/atom/ns#" term="postview"/><category scheme="http://www.blogger.com/atom/ns#" term="Preview Stabilization"/><category scheme="http://www.blogger.com/atom/ns#" term="Screen Flash"/><category scheme="http://www.blogger.com/atom/ns#" term="Ultra HDR"/><title type="text">What's new in CameraX 1.4.0 and a sneak peek of Jetpack Compose support </title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigeusOF9AySkwGgQw_ZPwUQnNXgh4lXVZsvahkJj_ulJBfDyjHuJh0KI80fR1rxY04IywD5rELnxOSsjWmA42uSd_IWUa79QPaK79PQF1C_kHRgqbBRV6Mk-4zxi6mino6coR6QaHL3kT27NiwUt1lbDvzzogHwp-V3MixukVhrQ21v5_nJW1UzNzYC_s/s1600/AndroidSpotlight_Adaptive_CameraX_Metadata_02.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigeusOF9AySkwGgQw_ZPwUQnNXgh4lXVZsvahkJj_ulJBfDyjHuJh0KI80fR1rxY04IywD5rELnxOSsjWmA42uSd_IWUa79QPaK79PQF1C_kHRgqbBRV6Mk-4zxi6mino6coR6QaHL3kT27NiwUt1lbDvzzogHwp-V3MixukVhrQ21v5_nJW1UzNzYC_s/s1600/AndroidSpotlight_Adaptive_CameraX_Metadata_02.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Scott Nien – Software Engineer (scottnien@)&lt;/em&gt;

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

&lt;p&gt;Get ready to level up your Android camera apps! CameraX 1.4.0 just dropped with a load of awesome new features and improvements. We're talking expanded HDR capabilities, preview stabilization and the versatile effect framework, and a whole lot of cool stuff to explore. We will also explore how to seamlessly  integrate CameraX with Jetpack Compose! Let's dive in and see how these enhancements can take your camera app to the next level.&lt;/p&gt;


&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;HDR preview and Ultra HDR&lt;/span&gt;&lt;/h2&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A split-screen image compares Standard Dynamic Range (SDR) and High Dynamic Range (HDR) image quality side-by-side using a singular image of a detailed landscape. The HDR side is more vivid and vibrant." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLNYJXd1Kk97dTXZe5M09aMs6gXCEr0DxDIazLXDJOIAvh2JbYnmklTDFFrFVkpqzjyxox8yL7EeYCNnXSxKFJHwbvtCCgEDwo8U1cg2KTJdNe34sldODOzK9JKixr7Dt4XHkoGYFCF6TBxVWGZO6oKM0WHktPHxVGXzlp6G0LhTWKS-5JMvb3m-JIeio/s1600/image3.png" width="640" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;High Dynamic Range (HDR) is a game-changer for photography, capturing a wider range of light and detail to create stunningly realistic images.  With CameraX 1.3.0, we brought you HDR video recording capabilities, and now in 1.4.0, we're taking it even further! Get ready for &lt;b&gt;HDR Preview&lt;/b&gt; and &lt;b&gt;Ultra HDR&lt;/b&gt;. These exciting additions empower you to deliver an even richer visual experience to your users.&lt;/p&gt;

&lt;h3&gt;&lt;span style="font-size: large;"&gt;HDR Preview&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;This new feature allows you to enable HDR on Preview without needing to bind a VideoCapture use case. This is especially useful for apps that use a single preview stream for both showing preview on display and video recording with an OpenGL pipeline.&lt;/p&gt;

&lt;p&gt;To fully enable the HDR,  you need to ensure your OpenGL pipeline is capable of processing the specific dynamic range format and then check the camera capability.&lt;/p&gt;

&lt;p&gt;See following code snippet as an example to enable HLG10 which is the baseline HDR standard that device makers must support on cameras with 10-bit output.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// Declare your OpenGL pipeline supported dynamic range format. &lt;/span&gt;
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; openGLPipelineSupportedDynamicRange = setOf(
     DynamicRange.SDR, 
     DynamicRange.HLG_10_BIT
)
&lt;span style="color: #408080; font-style: italic;"&gt;// Check camera dynamic range capabilities. &lt;/span&gt;
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; isHlg10Supported =  
     cameraProvider.getCameraInfo(cameraSelector)
           .querySupportedDynamicRanges(openGLPipelineSupportedDynamicRange)
           .contains(DynamicRange.HLG_10_BIT)

&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; preview = Preview.Builder().apply {
     &lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (isHlg10Supported) {
        setDynamicRange(DynamicRange.HLG_10_BIT)
     }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;&lt;span style="font-size: large;"&gt;Ultra HDR&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;Introducing Ultra HDR, a new format in Android 14 that lets users capture stunningly realistic photos with incredible dynamic range. And the best part? CameraX 1.4.0 makes it incredibly easy to add Ultra HDR capture to your app with just a few lines of code:&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; cameraInfo = cameraProvider.getCameraInfo(cameraSelector)
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; isUltraHdrSupported = 
      ImageCapture.getImageCaptureCapabilities(cameraInfo)
                  .supportedOutputFormats
                  .contains(ImageCapture.OUTPUT_FORMAT_JPEG_ULTRA_HDR)

&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; imageCapture = ImageCapture.Builder().apply {
    &lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (isUltraHdrSupported) {
        setOutputFormat(ImageCapture.OUTPUT_FORMAT_JPEG_ULTRA_HDR)
    }
}.build()
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;&lt;span style="font-size: large;"&gt;Jetpack Compose support&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;While this post focuses on 1.4.0, we're excited to announce the Jetpack Compose support in CameraX 1.5.0 alpha. We’re adding support for a Composable Viewfinder built on top of &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/foundation/package-summary#AndroidExternalSurface%28androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.unit.IntSize,androidx.compose.foundation.AndroidExternalSurfaceZOrder,kotlin.Boolean,kotlin.Function1%29" target="_blank"&gt;AndroidExternalSurface&lt;/a&gt;&lt;/span&gt; and &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/compose/foundation/package-summary#AndroidEmbeddedExternalSurface%28androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.unit.IntSize,androidx.compose.ui.graphics.Matrix,kotlin.Function1%29" target="_blank"&gt;AndroidEmbeddedExternalSurface&lt;/a&gt;&lt;/span&gt;. The &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/camera/compose/package-summary#CameraXViewfinder%28androidx.camera.core.SurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.surface.ImplementationMode,androidx.camera.viewfinder.compose.MutableCoordinateTransformer%29" target="_blank"&gt;CameraXViewfinder&lt;/a&gt;&lt;/span&gt; Composable hooks up a display surface to a CameraX Preview use case, handling the complexities of rotation, scaling and Surface lifecycle so you don’t need to.&lt;/p&gt;

&lt;!--HTML generated using hilite.me--&gt;&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// in build.gradle &lt;/span&gt;
implementation (&lt;span style="color: #ba2121;"&gt;"androidx.camera:camera-compose:1.5.0-alpha03"&lt;/span&gt;)


&lt;span style="color: green; font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: blue; font-weight: bold;"&gt;PreviewViewModel&lt;/span&gt; : ViewModel() {
    &lt;span style="color: green; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; _surfaceRequests = MutableStateFlow&amp;lt;SurfaceRequest?&amp;gt;(&lt;span style="color: green; font-weight: bold;"&gt;null&lt;/span&gt;)

    &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; surfaceRequests: StateFlow&amp;lt;SurfaceRequest?&amp;gt;
        &lt;span style="color: green; font-weight: bold;"&gt;get&lt;/span&gt;() = _surfaceRequests.asStateFlow()

    &lt;span style="color: green; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;produceSurfaceRequests&lt;/span&gt;(previewUseCase: Preview) {
        &lt;span style="color: #408080; font-style: italic;"&gt;// Always publish new SurfaceRequests from Preview&lt;/span&gt;
        previewUseCase.setSurfaceProvider { newSurfaceRequest -&amp;gt;
            _surfaceRequests.value = newSurfaceRequest
        }
    }

    &lt;span style="color: #408080; font-style: italic;"&gt;// ...&lt;/span&gt;
}

@Composable
&lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;MyCameraViewfinder&lt;/span&gt;(
    viewModel: PreviewViewModel,
    modifier: Modifier = Modifier
) {
    &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; currentSurfaceRequest: SurfaceRequest? by
        viewModel.surfaceRequests.collectAsState()

    currentSurfaceRequest?.let { surfaceRequest -&amp;gt;
        CameraXViewfinder(
            surfaceRequest = surfaceRequest,
            implementationMode = ImplementationMode.EXTERNAL, &lt;span style="color: #408080; font-style: italic;"&gt;// Or EMBEDDED&lt;/span&gt;
            modifier = modifier        
        )
    }
}
&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;&lt;span style="font-size: large;"&gt;Kotlin-friendly APIs&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;CameraX is getting even more Kotlin-friendly! In 1.4.0, we've introduced two new suspend functions to streamline camera initialization and image capture.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// CameraX initialization &lt;/span&gt;
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; cameraProvider = ProcessCameraProvider.awaitInstance()

&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; imageProxy = imageCapture.takePicture() 
&lt;span style="color: #408080; font-style: italic;"&gt;// Processing imageProxy&lt;/span&gt;
imageProxy.close()
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Preview Stabilization and Mirror mode&lt;/span&gt;&lt;/h2&gt; 

&lt;h3&gt;&lt;span style="font-size: large;"&gt;Preview Stabilization&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://source.android.com/docs/core/camera/camera-preview-stabilization" target="_blank"&gt;Preview stabilization mode&lt;/a&gt; was added in Android 13 to enable the stabilization on all non-RAW streams, including previews and MediaCodec input surfaces. Compared to the previous &lt;a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#CONTROL_VIDEO_STABILIZATION_MODE_ON" target="_blank"&gt;video stabilization mode&lt;/a&gt;, which may have inconsistent FoV (Field of View) between the preview and recorded video, this new preview stabilization mode ensures consistency and thus provides a better user experience.  For apps that record the preview directly for video recording, this mode is also the only way to enable stabilization.&lt;/p&gt;

&lt;p&gt;Follow the code below to enable preview stabilization. Please note that once preview stabilization is turned on, it is not only applied to the Preview but also to the VideoCapture if it is bound as well.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; isPreviewStabilizationSupported =  
    Preview.getPreviewCapabilities(cameraProvider.getCameraInfo(cameraSelector))
        .isStabilizationSupported
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; preview = Preview.Builder().apply {
    &lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (isPreviewStabilizationSupported) {
      setPreviewStabilizationEnabled(&lt;span style="color: green; font-weight: bold;"&gt;true&lt;/span&gt;)
    }
}.build()
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;&lt;span style="font-size: large;"&gt;MirrorMode&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;While CameraX 1.3.0 introduced mirror mode for VideoCapture,  we've now brought this handy feature to Preview in 1.4.0. This is especially useful for devices with outer displays, allowing you to create a more natural selfie experience when using the rear camera.&lt;/p&gt;

&lt;p&gt;To enable the mirror mode, simply call &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/camera/core/Preview.Builder#setMirrorMode%28int%29" target="_blank"&gt;Preview.Builder.setMirrorMode&lt;/a&gt;&lt;/span&gt; APIs. This feature is supported for Android 13 and above.&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Real-time Effect&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;CameraX 1.3.0 introduced the CameraEffect framework, giving you the power to customize your camera output with OpenGL. Now, in 1.4.0, we're taking it a step further.  In addition to applying your own custom effects, you can now leverage a set of pre-built effects provided by CameraX and Media3, making it easier than ever to enhance your app's camera features.&lt;/p&gt;

&lt;h3&gt;&lt;span style="font-size: large;"&gt;Overlay Effect&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;The new camera-effects artifact aims to provide ready-to-use effect implementations, starting with the OverlayEffect. This effect lets you draw overlays on top of camera frames using the familiar &lt;a href="https://developer.android.com/reference/android/graphics/Canvas" target="_blank"&gt;Canvas API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The following sample code shows how to detect the QR code and draw the shape of the QR code once it is detected.&lt;/p&gt;

&lt;p&gt;By default, drawing is performed in surface frame coordinates. But what if you need to use camera sensor coordinates? No problem! &lt;span style="color: #0d904f; font-family: Courier;"&gt;OverlayEffect&lt;/span&gt; provides the &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/kotlin/androidx/camera/effects/Frame#getSensorToBufferTransform%28%29" target="_blank"&gt;Frame#getSensorToBufferTransform&lt;/a&gt;&lt;/span&gt; function, allowing you to apply the necessary transformation matrix to your overlayCanvas.&lt;/p&gt;

&lt;p&gt;In this example, we use CameraX's MLKit Vision APIs (&lt;span style="color: #0d904f; font-family: Courier;"&gt;MlKitAnalyzer&lt;/span&gt;) and specify &lt;span style="color: #0d904f; font-family: Courier;"&gt;COORDINATE_SYSTEM_SENSOR&lt;/span&gt; to obtain QR code corner points in sensor coordinates. This ensures accurate overlay placement regardless of device orientation or screen aspect ratio.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// in build.gradle &lt;/span&gt;
implementation (&lt;span style="color: #ba2121;"&gt;"androidx.camera:camera-effects:1.4.1}"&lt;/span&gt;)      
implementation (&lt;span style="color: #ba2121;"&gt;"androidx.camera:camera-mlkit-vision:1.4.1"&lt;/span&gt;)

&lt;span style="color: green; font-weight: bold;"&gt;var&lt;/span&gt; qrcodePoints: Array&amp;lt;Point&amp;gt;? = &lt;span style="color: green; font-weight: bold;"&gt;null&lt;/span&gt;
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; qrcodeBoxEffect 
    = OverlayEffect(
        PREVIEW &lt;span style="color: #408080; font-style: italic;"&gt;/* applied on the preview only */&lt;/span&gt;,
        &lt;span style="color: #666666;"&gt;0&lt;/span&gt;, &lt;span style="color: #408080; font-style: italic;"&gt;/* queueDepth */&lt;/span&gt;, 
        Handler(Looper.getMainLooper()), {}
      )

&lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;initCamera&lt;/span&gt;() {
    qrcodeBoxEffect.setOnDrawListener { frame -&amp;gt;
        frame.overlayCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
        qrcodePoints?.let {
            &lt;span style="color: #408080; font-style: italic;"&gt;// Using sensor coordinates to draw.&lt;/span&gt;
            frame.overlayCanvas.setMatrix(frame.sensorToBufferTransform)
            &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; path = android.graphics.Path().apply {
                it.forEachIndexed { index, point -&amp;gt;
                    &lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (index == &lt;span style="color: #666666;"&gt;0&lt;/span&gt;) {
                        moveTo(point.x.toFloat(), point.y.toFloat())
                    } &lt;span style="color: green; font-weight: bold;"&gt;else&lt;/span&gt; {
                        lineTo(point.x.toFloat(), point.y.toFloat())
                    }
                 }
                 lineTo(it[&lt;span style="color: #666666;"&gt;0&lt;/span&gt;].x.toFloat(), it[&lt;span style="color: #666666;"&gt;0&lt;/span&gt;].y.toFloat())
            }
            frame.overlayCanvas.drawPath(path, paint)
        }
        &lt;span style="color: green; font-weight: bold;"&gt;true&lt;/span&gt;
    }

    &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; imageAnalysis = ImageAnalysis.Builder()
        .build()
        .apply {
            setAnalyzer(executor,
                MlKitAnalyzer(
                    listOf(barcodeScanner!!),
                    COORDINATE_SYSTEM_SENSOR,
                    executor
                ) { result -&amp;gt;
                    &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; barcodes = result.getValue(barcodeScanner!!)
                    qrcodePoints = 
                        barcodes?.takeIf { it.size &amp;gt; &lt;span style="color: #666666;"&gt;0&lt;/span&gt;}?.&lt;span style="color: green; font-weight: bold;"&gt;get&lt;/span&gt;(&lt;span style="color: #666666;"&gt;0&lt;/span&gt;)?.cornerPoints
                }
            )
        }

    &lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; useCaseGroup = UseCaseGroup.Builder()
          .addUseCase(preview)
          .addUseCase(imageAnalysis)
          .addEffect(qrcodeBoxEffect)
          .build()

    cameraProvider.bindToLifecycle(
        lifecycleOwner, cameraSelector, usecaseGroup)
  }
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;span style="font-size: large;"&gt;Media3 Effect&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;Want to add stunning camera effects to your CameraX app? Now you can tap into the power of Media3's rich effects framework!  This exciting integration allows you to apply Media3 effects to your CameraX output, including Preview, VideoCapture, and ImageCapture.&lt;/p&gt;

&lt;p&gt;This means you can easily enhance your app with a wide range of professional-grade effects, from blurs and color filters to transitions and more.  To get started, simply use the new androidx.camera:media3:media3-effect artifact.&lt;/p&gt;

&lt;p&gt;Here's a quick example of how to apply a Gaussian blur to your camera output:&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// in build.gradle &lt;/span&gt;
implementation (&lt;span style="color: #ba2121;"&gt;"androidx.camera.media3:media3-effect:1.0.0-alpha01"&lt;/span&gt;)
implementation (&lt;span style="color: #ba2121;"&gt;"androidx.media3:media3-effect:1.5.0"&lt;/span&gt;)

import androidx.camera.media3.effect.Media3Effect
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; media3Effect =
            Media3Effect(
                requireContext(),  PREVIEW or VIDEO_CAPTURE or IMAGE_CAPTURE,
                mainThreadExecutor(), {}
            )
&lt;span style="color: #408080; font-style: italic;"&gt;// use grayscale effect&lt;/span&gt;
media3Effect.setEffects(listOf(RgbFilter.createGrayscaleFilter()) 
cameraController.setEffects(setOf(media3Effect)) &lt;span style="color: #408080; font-style: italic;"&gt;// or using UseCaseGroup API&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Here is what the effect looks like:&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A black and white view from inside a coffee shop looking out at a city street.  The bottom of the photo shows the edge of a table with a laptop and two buttons labeled 'BACK' and 'RECORD'" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiBJ6m4-p4Wmh3sI2mhexJqVnSdHDiJ0ifoetK7ccdWWHdmWZgnjPx_IWd95TUx1NTMkokZnN9oZK1fd_rEk-M8KaEZ-LXzSkiQ5P2VtNUYrBRos-nA-dw0yQ0uMlbZVSKtHf9FdlkmvoDSK6Dpt4qIdP2oOtsYceiFrC8lWf0ZOU2BN4nxojG3wCbu5s/s1600/image1.png" width="45%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;



&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Screen Flash&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;Taking selfies in low light just got easier with CameraX 1.4.0! This release introduces a powerful new feature: screen flash.  Instead of relying on a traditional LED flash which most selfie cameras don’t have, screen flash cleverly utilizes your phone's display. By momentarily turning the screen bright white, it provides a burst of illumination that helps capture clear and vibrant selfies even in challenging lighting conditions.&lt;/p&gt;

&lt;p&gt;Integrating screen flash into your CameraX app is flexible and straightforward. You have two main options:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
  &lt;p&gt;1. Implement the &lt;span style="color: #0d904f; font-family: Courier;"&gt;ScreenFlash&lt;/span&gt; interface: This gives you full control over the screen flash behavior. You can customize the color, intensity, duration, and any other aspect of the flash. This is ideal if you need a highly tailored solution.&lt;/p&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;p&gt;2. Use the built-in implementation: For a quick and easy solution, leverage the pre-built screen flash functionality in &lt;span style="color: #0d904f; font-family: Courier;"&gt;ScreenFlashView&lt;/span&gt; or &lt;span style="color: #0d904f; font-family: Courier;"&gt;PreviewView&lt;/span&gt;. This implementation handles all the heavy lifting for you.&lt;/p&gt;&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;If you're already using &lt;span style="color: #0d904f; font-family: Courier;"&gt;PreviewView&lt;/span&gt; in your app, enabling screen flash is incredibly simple. Just enable it directly on the &lt;span style="color: #0d904f; font-family: Courier;"&gt;PreviewView&lt;/span&gt; instance. If you need more control or aren't using &lt;span style="color: #0d904f; font-family: Courier;"&gt;PreviewView&lt;/span&gt;, you can use &lt;span style="color: #0d904f; font-family: Courier;"&gt;ScreenFlashView&lt;/span&gt; directly.&lt;/p&gt;

&lt;p&gt;Here's a code example demonstrating how to enable screen flash:&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: #408080; font-style: italic;"&gt;// case 1: PreviewView + CameraX core API.&lt;/span&gt;
previewView.setScreenFlashWindow(activity.getWindow());
imageCapture.screenFlash = previewView.screenFlash
imageCapture.setFlashMode(ImageCapture.FLASH_MODE_SCREEN)

&lt;span style="color: #408080; font-style: italic;"&gt;// case 2: PreviewView + CameraController&lt;/span&gt;
previewView.setScreenFlashWindow(activity.getWindow());
cameraController.setImageCaptureFlashMode(ImageCapture.FLASH_MODE_SCREEN);

&lt;span style="color: #408080; font-style: italic;"&gt;// case 3 : use ScreenFlashView &lt;/span&gt;
screenFlashView.setScreenFlashWindow(activity.getWindow());
imageCapture.setScreenFlash(screenFlashView.getScreenFlash());
imageCapture.setFlashMode(ImageCapture.FLASH_MODE_SCREEN);
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Camera Extensions new features&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;Camera Extensions APIs aim to help apps to access the cutting-edge capabilities previously available only on built-in camera apps. And the ecosystem is growing rapidly! In 2024, we've seen major players like Pixel, Samsung, Xiaomi, Oppo, OnePlus, Vivo, and Honor all embrace Camera Extensions, particularly for Night Mode and Bokeh Mode. CameraX 1.4.0 takes this even further by adding support for brand-new Android 15 Camera Extensions features, including:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Postview:&lt;/b&gt; Provides a preview of the captured image almost instantly before the long-exposure shots are completed&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Capture Process Progress:&lt;/b&gt; Displays a progress indicator so users know how long capturing and processing will take, improving the experience for features like Night Mode&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Extensions Strength:&lt;/b&gt; Allows users to fine-tune the intensity of the applied effect&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;Below is an example of the improved UX that uses postview and capture process progress features on Samsung S24 Ultra.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="moving image capturing process progress features on Samsung S24 Ultra" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQbOgL1fhJBA4nL-eO4dhqbA1POcGQImYsAGg6N1F3iFNLD3F2yQyBKaWUxS0yOv5ycc46h4bndnMmwX10KP1ZMk3L6PS_WWTDK_EPRAOQub4G_ssZarclyqvXbllKS5htzF2QEv4uQtdNyvXsbgma7_ZkezDKTk98-rE6Jz0HHiuBM-trnlsLqp0gV8/s1600/image2.gif" width="45%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Interested to know how this can be implemented? See the sample code below:&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; extensionsCameraSelector =  
    extensionsManager
        .getExtensionEnabledCameraSelector(DEFAULT_BACK_CAMERA, extensionMode)
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; isPostviewSupported = ImageCapture.getImageCaptureCapabilities(                   
&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;cameraProvider.getCameraInfo(extensionsCameraSelector)
).isPostviewSupported
&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; imageCapture = ImageCapture.Builder().apply {
    setPostviewEnabled(isPostviewSupported)
}.build()

imageCapture.takePicture(outputfileOptions, executor,  
    object : OnImageSavedCallback {
        &lt;span style="color: green; font-weight: bold;"&gt;override&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;onImageSaved&lt;/span&gt;(outputFileResults: OutputFileResults) {
            &lt;span style="color: #408080; font-style: italic;"&gt;// final image saved. &lt;/span&gt;
        }
        &lt;span style="color: green; font-weight: bold;"&gt;override&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;onPostviewBitmapAvailable&lt;/span&gt;(bitmap: Bitmap) {
            &lt;span style="color: #408080; font-style: italic;"&gt;// Postview bitmap is available.&lt;/span&gt;
        }
        &lt;span style="color: green; font-weight: bold;"&gt;override&lt;/span&gt; &lt;span style="color: green; font-weight: bold;"&gt;fun&lt;/span&gt; &lt;span style="color: blue;"&gt;onCaptureProcessProgressed&lt;/span&gt;(progress: Int) {
            &lt;span style="color: #408080; font-style: italic;"&gt;// capture process progress update &lt;/span&gt;
        }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;&lt;b&gt;Important:&lt;/b&gt; If your app ran into the CameraX Extensions issue on Pixel 9 series devices, please use CameraX 1.4.1 instead. This release fixes a critical issue that prevented Night Mode from working correctly with &lt;span style="color: #0d904f; font-family: Courier;"&gt;takePicture&lt;/span&gt;.&lt;/blockquote&gt;

&lt;h3&gt;What's Next&lt;/h3&gt;

&lt;p&gt;We hope you enjoy this new release. Our mission is to make camera development a joy, removing the friction and pain points so you can focus on innovation. With CameraX, you can easily harness the power of Android's camera capabilities and build truly amazing app experiences.&lt;/p&gt;

&lt;p&gt;Have questions or want to connect with the CameraX team? Join the CameraX developer discussion group or file a bug report:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/a/android.com/g/camerax-developers" target="_blank"&gt;CameraX developers discussion group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://issuetracker.google.com/issues/new?component=618491&amp;amp;template=1257717&amp;amp;hl=zh-tw" target="_blank"&gt;File a bug&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;We can’t wait to see what you create!&lt;/p&gt;







</content><link href="http://android-developers.googleblog.com/feeds/3191538077770873915/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/whats-new-in-camerax-140-and-jetpack-compose-support.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3191538077770873915" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3191538077770873915" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/whats-new-in-camerax-140-and-jetpack-compose-support.html" rel="alternate" title="What's new in CameraX 1.4.0 and a sneak peek of Jetpack Compose support " 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/AVvXsEigeusOF9AySkwGgQw_ZPwUQnNXgh4lXVZsvahkJj_ulJBfDyjHuJh0KI80fR1rxY04IywD5rELnxOSsjWmA42uSd_IWUa79QPaK79PQF1C_kHRgqbBRV6Mk-4zxi6mino6coR6QaHL3kT27NiwUt1lbDvzzogHwp-V3MixukVhrQ21v5_nJW1UzNzYC_s/s72-c/AndroidSpotlight_Adaptive_CameraX_Metadata_02.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-3393458230806148958</id><published>2024-12-17T01:00:00.000-08:00</published><updated>2024-12-17T01:00:00.110-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android 16 KB page"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play Store"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="requirement"/><title type="text">Get your apps ready for 16 KB page size devices</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1SMBKsAxbWHLjaPKiBjnQqN5vRuSHiJlalaFzMqlhsL8kaqcrk3yp_tCCwUEfm6ATqkAv_upVADCWgOQhrqkyeZ0W7Ut19Bip8SEEgSbEJ32tJagU6C6wGi70UQ8SVYwPJqPTvOhKUTdwg3TOfQOE9f60_9VsUincmzFhlsOA0Gb4VjmvNiE9rzOWPCQ/s1600/Jetpack-Feature-Card.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1SMBKsAxbWHLjaPKiBjnQqN5vRuSHiJlalaFzMqlhsL8kaqcrk3yp_tCCwUEfm6ATqkAv_upVADCWgOQhrqkyeZ0W7Ut19Bip8SEEgSbEJ32tJagU6C6wGi70UQ8SVYwPJqPTvOhKUTdwg3TOfQOE9f60_9VsUincmzFhlsOA0Gb4VjmvNiE9rzOWPCQ/s1600/Jetpack-Feature-Card.png" style="display: none;" /&gt;
  
&lt;em&gt;Posted by Yacine Rezgui – Developer Relations Engineer, Steven Moreland – Staff Software Engineer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2PUAPiFw_x3s9fodPRsZLeHyHZNjhdopBeaS5nE6V8R2skSt1eNB-FpbIbazyRtomkV9NMekcLWO4Ah88Cs2OiQPgIjkyRicbSWpstcK9OZeQymlM0IK6xsLyzBhsPIz0ZsJ5lm7BvnaoTiSDCeRbJKv_cv2JyoDxtaCkgkmzrp7b1mJHZkYj5QYScfk/s1600/header-Adding-16-KB-Page-Size-to-Android-.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2PUAPiFw_x3s9fodPRsZLeHyHZNjhdopBeaS5nE6V8R2skSt1eNB-FpbIbazyRtomkV9NMekcLWO4Ah88Cs2OiQPgIjkyRicbSWpstcK9OZeQymlM0IK6xsLyzBhsPIz0ZsJ5lm7BvnaoTiSDCeRbJKv_cv2JyoDxtaCkgkmzrp7b1mJHZkYj5QYScfk/s1600/header-Adding-16-KB-Page-Size-to-Android-.png" /&gt;&lt;/a&gt;

&lt;p&gt;Android is evolving to deliver even faster, more performant experiences. One key improvement is the adoption of a 16 KB memory page size. This change enables the operating system to manage memory more efficiently, leading to noticeable performance gains (&lt;a href="https://developer.android.com/guide/practices/page-sizes#benefits" target="_blank"&gt;5-10%&lt;/a&gt;) in both apps and games. We provided an in-depth technical explanation and highlighted the performance improvements in &lt;a href="https://android-developers.googleblog.com/2024/08/adding-16-kb-page-size-to-android.html" target="_blank"&gt;Adding 16 KB Page Size to Android&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To help you test your app on 16 KB devices, this functionality is available as a developer option on Google Pixel 8 and 9 devices, and Samsung devices will soon offer similar support, as well as Xiaomi, vivo, and other Android OEMs.&lt;/p&gt;

&lt;p&gt;To ensure compatibility with 16 KB devices, apps that utilize native code, either directly or through libraries or SDKs, might require rebuilding. However, the transition is significantly easier than the previous &lt;a href="https://developer.android.com/google/play/requirements/64-bit" target="_blank"&gt;shift from 32-bit to 64-bit architecture&lt;/a&gt;. This article will guide you through the necessary steps to prepare your apps for the upcoming devices. The next generation of devices is on its way, with the first models supporting 16 KB page sizes expected to arrive in a couple of years.&lt;/p&gt;

&lt;h3&gt;Getting ready for 16 KB: SDK developers&lt;/h3&gt;
  
&lt;p&gt;If you develop your own SDKs and libraries, we encourage you to update them to be 16 KB page size compatible and test them on 16 KB devices as soon as possible. This will give app developers ample time to incorporate the necessary changes. Registering with &lt;a href="https://play.google.com/sdk-console/about/" target="_blank"&gt;Play SDK Console&lt;/a&gt; is a great way to ensure you receive advanced notices like these in the future and in a timely manner.&lt;/p&gt;

&lt;h3&gt;Getting ready for 16 KB: app developers with no native code&lt;/h3&gt;

&lt;p&gt;Apps written in and with dependencies entirely in Kotlin or the Java programming languages will work as-is!&lt;/p&gt;

&lt;h3&gt;Getting ready for 16 KB: app developers with native code&lt;/h3&gt;

&lt;p&gt;To check if your app has native code, you can utilize tools like &lt;a href="https://developer.android.com/guide/practices/page-sizes#identify-native-code" target="_blank"&gt;APK Analyzer&lt;/a&gt; in Android Studio.  However, the only way to ensure app compatibility is to test.&lt;/p&gt;

&lt;h4&gt;&lt;span style ="font-size:large;"&gt;Rebuild your app&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;To ensure your app works on devices with a 16 KB page size, follow these steps:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;p&gt;1. &lt;b&gt;&lt;a href="https://developer.android.com/guide/practices/page-sizes#build" target="_blank"&gt;Upgrade your tools&lt;/a&gt;:&lt;/b&gt; Start by upgrading to Android Gradle Plugin (AGP) 8.5.1 or higher. These updated tools incorporate the necessary 16 KB page size configuration for your App Bundle and the APKs generated from it using &lt;span style="color:#0d904f ; font-family:Courier"&gt;bundletool&lt;/span&gt;.&lt;/p&gt;&lt;/ul&gt;&lt;ul&gt;


&lt;p&gt;2. &lt;b&gt;&lt;a href="https://developer.android.com/guide/practices/page-sizes#compile-16-kb-alignment" target="_blank"&gt;Align your native code&lt;/a&gt;:&lt;/b&gt; If your app includes native code, use NDK version r28 or higher, or rebuild it with 16 KB page size alignment. You should also ensure that your native code does not rely on or hardcode the value of &lt;span style="font-family:Courier"&gt;&lt;a href="https://developer.android.com/guide/practices/page-sizes#check-code" target="_blank"&gt;PAGE_SIZE&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;&lt;/ul&gt;&lt;ul&gt;

&lt;p&gt;3. &lt;b&gt;&lt;a href="https://developer.android.com/build/dependencies" target="_blank"&gt;Update SDKs and libraries&lt;/a&gt;&lt;/b&gt;: Confirm that all SDKs and libraries used in your app are compatible with 16 KB page size. If necessary, contact the SDK or library developers for updated versions.&lt;/p&gt;
  
&lt;/ul&gt;&lt;/ul&gt;

&lt;h4&gt;&lt;span style ="font-size:large;"&gt;Test your app in 16 KB mode&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;To make sure your application does not assume the page size to be 4 KB anywhere, &lt;a href="https://developer.android.com/guide/practices/page-sizes#test" target="_blank"&gt;test&lt;/a&gt; it with a 16 KB page size emulator or virtual device in addition to how you have been testing (with a 4 KB page size). This helps identify and resolve any compatibility issues from the move to 16 KB page sizes. You can also test on physical devices with the &lt;a href="https://developer.android.com/guide/practices/page-sizes#developer-option" target="_blank"&gt;developer option&lt;/a&gt; available on Pixel 8, 8a, and 8 Pro starting with the &lt;a href="https://developer.android.com/about/versions/15/get-qpr1" target="_blank"&gt;Android 15 QPR1&lt;/a&gt; and Pixel 9, 9 Pro, 9 Pro XL in the &lt;a href="https://developer.android.com/about/versions/15/release-notes#about-beta2" target="_blank"&gt;Android 15 QPR2 Beta 2&lt;/a&gt;, with more devices on the way.&lt;/p&gt;

&lt;h3&gt;The Future is Faster and More Efficient&lt;/h3&gt;

&lt;p&gt;The move to 16 KB page size benefits the Android ecosystem. It unlocks performance improvements, paves the way for future innovations, and provides users with smoother and richer app experiences.&lt;/p&gt;

&lt;p&gt;We'll continue to provide updates and resources to help you through this transition. Start preparing your apps today to ensure you're ready for the future of Android!&lt;/p&gt;
</content><link href="http://android-developers.googleblog.com/feeds/3393458230806148958/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/get-your-apps-ready-for-16-kb-page-size-devices.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3393458230806148958" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3393458230806148958" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/get-your-apps-ready-for-16-kb-page-size-devices.html" rel="alternate" title="Get your apps ready for 16 KB page size devices" 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/AVvXsEg1SMBKsAxbWHLjaPKiBjnQqN5vRuSHiJlalaFzMqlhsL8kaqcrk3yp_tCCwUEfm6ATqkAv_upVADCWgOQhrqkyeZ0W7Ut19Bip8SEEgSbEJ32tJagU6C6wGi70UQ8SVYwPJqPTvOhKUTdwg3TOfQOE9f60_9VsUincmzFhlsOA0Gb4VjmvNiE9rzOWPCQ/s72-c/Jetpack-Feature-Card.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8434892700891812455</id><published>2024-12-13T06:00:00.000-08:00</published><updated>2024-12-17T13:09:24.040-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#WeArePlay"/><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="app development"/><category scheme="http://www.blogger.com/atom/ns#" term="developer stories"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Game Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="google play developers"/><category scheme="http://www.blogger.com/atom/ns#" term="success stories"/><title type="text">#WeArePlay | Meet the people building sport apps and games</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG90W4G7Yb0XMHaWTPrbSy5cg6PhcBIliHz5Ee9QmPeqnKXCX5fykOqPiv-Jx3zJM-dllFvnWqmo6VKSleVQmcrrf_WKO6og7DkTy4O5c8UajOHB_XHwSwr_VLHyHBsMRKQOhNlvSmzmgbvXUnkaBJA1CbmpIxf-uBRU1xINUDHPqgsjucrqEh5ImJQqw/s1600/WeArePlay_GlobalGrid_2024.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG90W4G7Yb0XMHaWTPrbSy5cg6PhcBIliHz5Ee9QmPeqnKXCX5fykOqPiv-Jx3zJM-dllFvnWqmo6VKSleVQmcrrf_WKO6og7DkTy4O5c8UajOHB_XHwSwr_VLHyHBsMRKQOhNlvSmzmgbvXUnkaBJA1CbmpIxf-uBRU1xINUDHPqgsjucrqEh5ImJQqw/s1600/WeArePlay_GlobalGrid_2024.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Robbie McLachlan – Developer Marketing&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG90W4G7Yb0XMHaWTPrbSy5cg6PhcBIliHz5Ee9QmPeqnKXCX5fykOqPiv-Jx3zJM-dllFvnWqmo6VKSleVQmcrrf_WKO6og7DkTy4O5c8UajOHB_XHwSwr_VLHyHBsMRKQOhNlvSmzmgbvXUnkaBJA1CbmpIxf-uBRU1xINUDHPqgsjucrqEh5ImJQqw/s1600/WeArePlay_GlobalGrid_2024.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG90W4G7Yb0XMHaWTPrbSy5cg6PhcBIliHz5Ee9QmPeqnKXCX5fykOqPiv-Jx3zJM-dllFvnWqmo6VKSleVQmcrrf_WKO6og7DkTy4O5c8UajOHB_XHwSwr_VLHyHBsMRKQOhNlvSmzmgbvXUnkaBJA1CbmpIxf-uBRU1xINUDHPqgsjucrqEh5ImJQqw/s1600/WeArePlay_GlobalGrid_2024.png" /&gt;&lt;/a&gt;


&lt;p&gt;In a year filled with iconic sports moments—from the Olympic and Paralympic Games in Paris to the UEFA Euro Cup in Germany—our celebration of app and game businesses continues with nine new #WeArePlay stories. These founders are building sports apps and games that unite players, fans, and communities—from immersive sports simulations to apps that motivate runners with rewards like vouchers and free gifts.&lt;/p&gt;

&lt;p&gt;Let’s take a look at some of my favourites.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Immerse yourself into your favourite sport with Hao, Yukun, and Mingming's simulator games&lt;/span&gt;&lt;/h4&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Hao, Yukun, and Mingming, founders of Feamber Games pose for a photo - Chengdu, China" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg4YTkZQOuP0sukjamhLhLgWhX49RVNH9a8382CeW8SnHIwaNLWYiZ9DZByhW6_CwfLCVpxGCHy6Rwhs17Hd60Nx3azef5L55WNmnAMXz3XbNxX3Rjwzql_YEABtxbMfCe4NEZnD3myH6sG9jc9Qs6zUPu-c8N4IBX_orZ92hy0qyTJLdnsiDkGMM1xdg/s1600/01_CHINA_FEAMBERGAME_COFOUNDERS_edited.jpg" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Hao, Yukun and Mingming, co-founders of Feamber Games&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Chengdu, China&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Hao always dreamed of creating video games. After studying computer science, he joined a gaming company where he met Yukun and Mingming. Their shared passion for game design and long conversations about graphics, movie scenes, and nostalgic childhood games inspired them to start &lt;a href="https://play.google.com/store/apps/developer?id=Feamber+game&amp;amp;gl=cn" target="_blank"&gt;Feamber Games&lt;/a&gt;. Specializing in realistic 3D sports simulations like pool and archery, they’ve added competitive elements to enhance the experience. Recently, they’ve expanded into immersive games that let players build business empires and manage hotels. Now, the trio is focused on growing their global audience.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Anna’s boxing fitness app is a knockout, with tailored training and on-demand classes&lt;/span&gt;&lt;/h4&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Anna, founder of Boxx, sits cross-legged and smiles at the camera - London, UK" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi02RNoba50lLcVK_OICURLBFF4Mwkl-hrsuIy8mY51XzIpqxMaAbr386PVwkH2sWlxoHhdUgz9T6_S2Z8ZssJBiak8yafyPVhPoTquLAapqANW2W1XgcNbg8hACF4WD_yeMQnMQY4KltGdTq4IrMmfFWS5hSgGUdprIMQeHtYMizqfJlehpRpBjea08bU/s1600/01_UK_BOXX%20-%20A%20Samuels_edited.jpg" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Anna, founder of Boxx&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;London, UK&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Anna discovered her love for boxing at 11, staying dedicated to non-contact training throughout adulthood. After a career in accounting and becoming a mother, she struggled to attend classes, inspiring her to create &lt;a href="https://play.google.com/store/apps/developer?id=Boxx+London+Ltd&amp;amp;hl=en&amp;amp;gl=GB" target="_blank"&gt;Boxx&lt;/a&gt; – an app that brings boxing training to any location. Collaborating with fitness instructors, she developed personalized sessions, hybrid workouts, expert-led on-demand classes, and progress tracking. With hands-free guided audio and community features coming soon, Anna is regularly reviewing feedback to find innovative approaches to improve boxers’ experiences.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Get active and track your progress with Yi Hern, Dana, and Pearl's running app&lt;/span&gt;&lt;/h4&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Yi Hern, founder of JomRun, smiling at the camera - Cyberjava, Malaysia" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUlhNkgdjdb525nTHjmX1DcPC385ZyKrxWvZJd7uxfZaI7q096BY9_ERyq40w0wA1A43U-94SVuUeFMONjoyKfrg-B3j55G_JihSGWL8N_y12yPXm55Tn-UMqvfJRPwgBa-oWlywr7owsAsLXHnBdqL3lgAKb2rIwWCmB8CgIa87FlCFIzQwV_l6lTvV0/s1600/03_JOMRUN_CO-FOUNDER_YihernChang.jpg" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Yi Hern, co-founder of JomRun&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Cyberjaya, Malaysia&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;After creating a successful augmented reality game, childhood friends Yi Hern, Dana, and Pearl decided to inspire people to stay active. Combining Yi Hern's engineering skills, Dana's visual arts expertise, and Pearl's scientific background, they developed &lt;a href="https://play.google.com/store/apps/developer?id=JomRun+Sdn.+Bhd.&amp;amp;gl=my" target="_blank"&gt;JomRun – Let’s Run&lt;/a&gt;. The app allows runners to track their progress, earn rewards like vouchers and free gifts, and easily join marathons. With teams in Malaysia and Singapore, and plans to introduce new features, the trio is gearing up to expand across Southeast Asia.&lt;/p&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Ohjun and Jaeho’s volleyball game get high scores from players worldwide&lt;/span&gt;&lt;/h4&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Ohjun and Jaeho, co-founders of SUNCYAN - Seoul, South Korea" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h8OY85hsPjGKP4kFRQr7s-VG8WeBL5fNh50coqsnYmaD5C_CB7UcrDQezJ4yRfCtUbZ3rzmvT343rpVf6vHxh9gRAlwwdviwD1k_GnGm2z89ujSvtkiEvZe57LBK3abB15jn0Eci9xe3v3B253VcNNmSKYAp7NZGQO9XPwjKgY66a88p4y1NcHgDBUA/s1600/01_SOUTHKOREA_SUNCYAN_Ohjun%20KwonANDJaeho%20Heo.jpg" width="640" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Ohjun and Jaeho, co-founders of SUNCYAN&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Seoul, South Korea&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Ohjun and Jaeho, childhood friends from an online game development community, combined their love for game building and volleyball to create &lt;a href="https://play.google.com/store/apps/dev?id=7873289787731908785&amp;amp;gl=kr" target="_blank"&gt;The Spike - Volleyball Story&lt;/a&gt;. After a successful test release on Google Play, the game gained popularity in South Korea, inspiring them to improve it and reach a global audience. They added new features like story and tournament modes, plus a complete UX overhaul, all to recreate the excitement of real-life volleyball. Now, they’re focused on creating even more thrilling sports games.&lt;/p&gt;&lt;br/&gt;


&lt;br /&gt;&lt;br /&gt;
&lt;center&gt; How useful did you find this blog post?&lt;/center&gt;
&lt;br/&gt;&lt;center&gt;
&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt;
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"&gt;&lt;img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;



















</content><link href="http://android-developers.googleblog.com/feeds/8434892700891812455/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/weareplay-meet-people-building-sport-apps-and-games.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8434892700891812455" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8434892700891812455" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/weareplay-meet-people-building-sport-apps-and-games.html" rel="alternate" title="#WeArePlay | Meet the people building sport apps and games" 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/AVvXsEiG90W4G7Yb0XMHaWTPrbSy5cg6PhcBIliHz5Ee9QmPeqnKXCX5fykOqPiv-Jx3zJM-dllFvnWqmo6VKSleVQmcrrf_WKO6og7DkTy4O5c8UajOHB_XHwSwr_VLHyHBsMRKQOhNlvSmzmgbvXUnkaBJA1CbmpIxf-uBRU1xINUDHPqgsjucrqEh5ImJQqw/s72-c/WeArePlay_GlobalGrid_2024.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-3820756307966321563</id><published>2024-12-12T14:00:00.000-08:00</published><updated>2024-12-13T06:16:32.819-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Baseline Profiles"/><category scheme="http://www.blogger.com/atom/ns#" term="case study"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetpack Compose"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Optimization"/><category scheme="http://www.blogger.com/atom/ns#" term="Startup Speed"/><category scheme="http://www.blogger.com/atom/ns#" term="user experience"/><title type="text">Reddit improved app startup speed by over 50% using Baseline Profiles and R8</title><content type="html">&lt;meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiebmCHV09MYh7RuEDKNF8AdnxV8TvB615z810WeQ-2kwbknGvowSf4xYq82CuRc1khTcMvpS_3jivuIbvQTP5BLj8ydN5MxUdyChgVxPEFrn8Xql7NwvfBNuVjzg3locOFqLVZmHOopu45N01xyl_6b5oPe9byqZ5QzvKyIIxEVLxwZJVHZWV980v3nRE/s1600/image6.png"&gt;
&lt;img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiebmCHV09MYh7RuEDKNF8AdnxV8TvB615z810WeQ-2kwbknGvowSf4xYq82CuRc1khTcMvpS_3jivuIbvQTP5BLj8ydN5MxUdyChgVxPEFrn8Xql7NwvfBNuVjzg3locOFqLVZmHOopu45N01xyl_6b5oPe9byqZ5QzvKyIIxEVLxwZJVHZWV980v3nRE/s1600/image6.png"&gt;

&lt;em&gt;Posted by Ben Weiss – Developer Relations Engineer, and Lauren Darcey – Senior Engineering Manager, Reddit&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiebmCHV09MYh7RuEDKNF8AdnxV8TvB615z810WeQ-2kwbknGvowSf4xYq82CuRc1khTcMvpS_3jivuIbvQTP5BLj8ydN5MxUdyChgVxPEFrn8Xql7NwvfBNuVjzg3locOFqLVZmHOopu45N01xyl_6b5oPe9byqZ5QzvKyIIxEVLxwZJVHZWV980v3nRE/s1600/image6.png" imageanchor="1" &gt;&lt;img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiebmCHV09MYh7RuEDKNF8AdnxV8TvB615z810WeQ-2kwbknGvowSf4xYq82CuRc1khTcMvpS_3jivuIbvQTP5BLj8ydN5MxUdyChgVxPEFrn8Xql7NwvfBNuVjzg3locOFqLVZmHOopu45N01xyl_6b5oPe9byqZ5QzvKyIIxEVLxwZJVHZWV980v3nRE/s1600/image6.png" data-original-width="100%" data-original-height="800" /&gt;&lt;/a&gt;


&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.reddit.frontpage&amp;amp;hl=en_US" target="_blank"&gt;Reddit&lt;/a&gt; is one of the world’s largest internet forums, bringing together countless communities looking for entertainment, answers to everyday questions, and so much more.&lt;/p&gt;

&lt;p&gt;Recently, the team optimized its Android app to reduce startup times and improve rendering performance using &lt;a href="https://developer.android.com/topic/performance/baselineprofiles/overview" target="_blank"&gt;Baseline Profiles&lt;/a&gt;. But the team didn’t stop there. Reddit app developers also enabled Android’s &lt;a href="https://developer.android.com/build/shrink-code" target="_blank"&gt;R8&lt;/a&gt; compiler in full mode to maximize bytecode optimization and used &lt;a href="https://developer.android.com/compose" target="_blank"&gt;Jetpack Compose&lt;/a&gt; to rewrite legacy UI, improving both the user and developer experience.&lt;/p&gt;

&lt;h3&gt;Maximizing optimization using Baseline Profiles and R8 full mode&lt;/h3&gt;

&lt;p&gt;The Reddit Android app has undergone countless performance upgrades over the years. Reddit developers have long since cleared the list of quick and easy tasks for optimization, but the team still wants to improve the app, bringing its performance to the next level and ensuring it runs well on every Android device.&lt;/p&gt;

&lt;p&gt;“Reddit is looking for any strategic improvement to its app performance so we can make the app experience better for new and existing users,” said Rob McWhinnie, a staff engineer at Reddit. “Baseline Profiles fit this use case well since they are based on critical user journeys.”&lt;/p&gt;

&lt;p&gt;Reddit’s platform engineering team used screen-specific performance metrics and observability to help its feature teams improve key metrics like time to interactive and scroll performance. Baseline Profiles were a natural fit to help improve these metrics and the user experience behind them, so the team integrated them to make tracking and optimizing easier, using insights from geodata and device classes.&lt;/p&gt;

&lt;p&gt;The team built Baseline Profiles for five critical user journeys so far, like scrolling the home feed, logging in, launching the full-screen video player, navigating between subreddits and scrolling their feeds, and using the chat feature.&lt;/p&gt;

&lt;p&gt;Simplifying Baseline Profile management in their continuous integration processes, enabled Reddit to remove the need for manual maintenance and streamlining optimization. Now, Baseline Profiles are automatically regenerated for each release.&lt;/p&gt;

&lt;p&gt;Enabling Android’s R8 optimization compiler in full mode was another area Reddit engineers worked on. The team had already used R8 in compatibility mode, but some of Reddit’s legacy code would’ve made implementing R8’s more aggressive features difficult. The team worked through the app’s existing technical debt first, making it easier to integrate R8's full mode capabilities and maximize Android app optimization.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="Quote card with image of Catherine Chi, Senior Engineer at Reddit that reads: 'It’s now trivial to work with a team to instrument Baseline Profiles for their critical user journeys. We turn them around in a couple of hours and see results in production a week later." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfHcj57QRX3inY74cEoBBkYLlF7UBx2RXj7fE0k1x3NNFHNX-m3yTUdYdlu6YORJ0FA4DaQw0A3i0iGWHjWeU-JP822F7tnA1Ncq1EyQPweYgMSThCdwZ_LjsdDBtNxdjhAYk7h4DhrOf2rhAk7mJAmvQEEAJRcDbRgHUcsM6g1lkeQiQdSTOP0siE0VA/s1600/image5.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;h3&gt;Improvements with Baseline Profiles and R8 full mode&lt;/h3&gt;

&lt;p&gt;Reddit's Baseline Profiles and R8 full mode optimization led to multiple performance improvements across the app, with &lt;b&gt;early benchmarks of the first Baseline Profile for feeds showing a 51% median startup time improvement&lt;/b&gt;. While responses from Redditors initially confirmed large startup improvements, Baseline Profile optimizations for less frequent journeys, like logging in, saw fewer user reports.&lt;/p&gt;
  
&lt;p&gt;Baseline Profiles for the home feed had a 36% reduction in frozen frames' 95th percentile. Baseline Profiles for the community feed also delivered strong screen load and scroll performance improvements. At the 90th percentile, screen &lt;a href="https://developer.android.com/topic/performance/vitals/launch-time#time-full" target="_blank"&gt;Time To Interactive&lt;/a&gt; improved by 12% and time to first draw decreased by 22%. Reddit’s scrolling performance also saw a 12% reduction in P90 slow frames.&lt;/p&gt;

&lt;p&gt;The upgrade to R8 full mode led to an increase in Google Play average ratings. &lt;b&gt;The proportion of global positive ratings (fours and fives) increased by four percent&lt;/b&gt;, with a notable decrease in negative reports. R8 full mode also reduced total &lt;a href="https://developer.android.com/topic/performance/anrs/diagnose-and-fix-anrs" target="_blank"&gt;application-not-responding&lt;/a&gt; errors by almost 30%.&lt;/p&gt;

&lt;p&gt;Overall, the app saw cold start improvements of 20%, scroll performance improvements of 15%, and widespread enhancements in lower-end devices and emerging markets. Google Play vitals saw improvements in slow cold starts, a 10% reduction in excessive frozen frames, and a 30% reduction in excessive slow frames. &lt;b&gt;Nearly 75% of screens, refactored using Jetpack Compose, experienced performance gains&lt;/b&gt;.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="Quote card with image of Lauren Darcey, Senior Engineering Manager at Reddit that reads: 'When you find a feature that users love and engage with, taking the time to refine and optimize it can be the difference between a good and a great experience for your users." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikeB2pRK8FBc_Dzl8JZDZ5sWDYMGe1EdJhG-jR6GqQaLFFH6Nwh_QAIw8N4xtf8vdHKJhbsUpdl7KrFIX7cPc5eUY-UPxqxurtQG3b01xJ8d3aQZYFdV33IVayOj0dJmwt3OOFo9AoW88TFRCjCp57eymYBMYta1HcqTYmrxyzaqUHF8cGCM7MD0EXkrU/s1600/image4.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;h3&gt;Further optimizations using Jetpack Compose&lt;/h3&gt;

&lt;p&gt;Reddit adopted Jetpack Compose years ago and has since rebuilt much of its UI with the toolkit, benefitting both the app and its design system. According to the Reddit team, Google’s ongoing support for Compose’s stability and performance made it a strong fit as Reddit scaled its app, allowing for more efficient feature development and better performance.&lt;/p&gt;

&lt;p&gt;One major example is Reddit’s feed rewrite using Compose, which resulted in more maintainable code and an improved developer experience. Compose enabled teams to focus on future work instead of being bogged down by legacy code, allowing them to fix bugs quickly and improve overall app stability.&lt;/p&gt;

&lt;p&gt;“The R8 and Compose upgrades were important to deploy in relative isolation and stabilize,” said Drew Heavner, a staff engineer at Reddit. “We feel like we got great outcomes from this work for all teams adopting our modern tech stack and Compose.”&lt;/p&gt;

&lt;p&gt;After upgrading to the September 2024 release of Compose, the latest iteration, Reddit saw significant performance gains across the board. Cold start times improved by 13%, excessive slow frames decreased by 25%, and frozen frames dropped by 10%. &lt;b&gt;Low- and mid-tier devices saw even greater improvements where app start times improved by up to 40%&lt;/b&gt;, especially in markets with lower-performing devices.&lt;/p&gt;

&lt;p&gt;Screens using Reddit’s modern Compose-powered design stack showed substantial improvements in both slow and frozen frame rates. For example, the home feed saw a 23% reduction in frozen frames, and scrolling performance visibly improved according to internal reviews. These updates were well received among users and reflected a &lt;b&gt;17% increase in the app’s Google Play average rating&lt;/b&gt;.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="Quote card with image of the Android Bot peeking in from the right side that reads: Compose continues to deliver great new features for a more responsive user experience. It also provides stability and performance improvements we get to take advantage of.” — Eric Kuck, a Principal Engineer at Reddit" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK5qOHBFfIMskMdX9CxEzgYr56nqMheLYhFAfo-2d65AKepjXiE80Mf4J9Y0ft56i-xio2NiLbxd_lDIKUeY_qHr0pNFH9mqvyr323qXIiVi3Ix4kQIzWdzt6XCaorpHx6gkUt9nkX9QWFHTQsnzjcnx268ciQCyuORtJiJSqEAF1_eRdngSYaCXid02Q/s1600/image2.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;


&lt;h3&gt;Up-leveling UX through optimization&lt;/h3&gt;

&lt;p&gt;Adding value to an app isn’t just about introducing new features—it's about refining and optimizing the ones users already love. Investing in performance improvements made Reddit’s key features faster and more reliable, enhancing the overall user experience. These optimizations not only improved app startup and runtime performance but also simplified development workflows, increasing both developer satisfaction and app stability.&lt;/p&gt;

&lt;p&gt;The focus on high-traffic features, such as feeds, has demonstrated the power of performance tuning, with substantial gains in user engagement and satisfaction. As the app has become more efficient, both users and developers have benefitted from a cleaner codebase and faster performance.&lt;/p&gt;

&lt;p&gt;Looking ahead, Reddit plans to extend the usage of Baseline Profiles to other critical user journeys, including Reddit’s post and comment experiences, ensuring even more users benefit from these ongoing performance improvements.&lt;/p&gt;

&lt;p&gt;Reddit’s platform engineers also want to continue collaborating with feature teams to integrate performance improvements across the app. These efforts will ensure that as the app evolves, it remains a smooth, fast, and engaging experience for all Redditors.&lt;/p&gt;

&lt;p&gt;“Adding new features isn’t the only way to add value to an experience for users,” said Lauren Darcey, a senior engineering manager at Reddit. “When you find a feature that users love and engage with, taking the time to refine and optimize it can be the difference between a good and a great experience for your users.”&lt;/p&gt;

&lt;h3&gt;Get started&lt;/h3&gt;

&lt;p&gt;Improve your app performance using &lt;a href="https://developer.android.com/topic/performance/baselineprofiles/overview" target="_blank"&gt;Baseline Profiles&lt;/a&gt;, &lt;a href="https://developer.android.com/build/shrink-code" target="_blank"&gt;R8 full mode&lt;/a&gt;, and &lt;a href="https://developer.android.com/jetpack/compose" target="_blank"&gt;Jetpack Compose&lt;/a&gt;.&lt;/p&gt;
</content><link href="http://android-developers.googleblog.com/feeds/3820756307966321563/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/reddit-improved-app-startup-speed-using-baseline-profiles-r8.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3820756307966321563" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3820756307966321563" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/reddit-improved-app-startup-speed-using-baseline-profiles-r8.html" rel="alternate" title="Reddit improved app startup speed by over 50% using Baseline Profiles and R8" 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/AVvXsEiebmCHV09MYh7RuEDKNF8AdnxV8TvB615z810WeQ-2kwbknGvowSf4xYq82CuRc1khTcMvpS_3jivuIbvQTP5BLj8ydN5MxUdyChgVxPEFrn8Xql7NwvfBNuVjzg3locOFqLVZmHOopu45N01xyl_6b5oPe9byqZ5QzvKyIIxEVLxwZJVHZWV980v3nRE/s72-c/image6.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-770866887054828315</id><published>2024-12-12T08:00:00.000-08:00</published><updated>2024-12-12T12:35:15.093-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android XR"/><category scheme="http://www.blogger.com/atom/ns#" term="Android XR SDK"/><category scheme="http://www.blogger.com/atom/ns#" term="ar"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Preview"/><category scheme="http://www.blogger.com/atom/ns#" term="immersive experiences"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetpack Compose"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenXR"/><category scheme="http://www.blogger.com/atom/ns#" term="spatial computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Unity"/><category scheme="http://www.blogger.com/atom/ns#" term="VR"/><category scheme="http://www.blogger.com/atom/ns#" term="WebXR"/><title type="text">Introducing Android XR SDK Developer Preview</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHFxb0eGpenOcRJdGhlH_0Rlrqzq3mWejCBW7SQt5C881pR3OFvn7Q1yqDIJbuUaNl2xLAsgrBjarkgSUiWXUZMZY4VZG6nVWm8K7u3OsmQpDulK91Ym39zwoT4yqf4p-UAig7bA8gF1U-S1HBuHHH2pvlhakizVo5sZKS3LClG6FwXAK6X7qHee0v0E8/s1600/0017-AfD-Android-XR-Blog-Social-1920x1080.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHFxb0eGpenOcRJdGhlH_0Rlrqzq3mWejCBW7SQt5C881pR3OFvn7Q1yqDIJbuUaNl2xLAsgrBjarkgSUiWXUZMZY4VZG6nVWm8K7u3OsmQpDulK91Ym39zwoT4yqf4p-UAig7bA8gF1U-S1HBuHHH2pvlhakizVo5sZKS3LClG6FwXAK6X7qHee0v0E8/s1600/0017-AfD-Android-XR-Blog-Social-1920x1080.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Matthew McCullough – VP of Product Management, Android Developer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcJQGWHNdEWzN-LHEFLwhTAcca0ZqLjJh950rydwh5T5cGzSfkTSYdLb_-C1yOUbnngrbB_kg_cTwBpnJSRhbPcUo0nTuQVlsnn7P4Om7vrrls48nhUuQIS8Tf5qlwyn3rVziFJ0As-NqxeNSCnvt3KObNp0sehxcWJcp154ztkHPqXAcSzAOfX2qP874/s1600/Android-XR-Unlocked.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcJQGWHNdEWzN-LHEFLwhTAcca0ZqLjJh950rydwh5T5cGzSfkTSYdLb_-C1yOUbnngrbB_kg_cTwBpnJSRhbPcUo0nTuQVlsnn7P4Om7vrrls48nhUuQIS8Tf5qlwyn3rVziFJ0As-NqxeNSCnvt3KObNp0sehxcWJcp154ztkHPqXAcSzAOfX2qP874/s1600/Android-XR-Unlocked.png" /&gt;&lt;/a&gt;


&lt;p&gt;Today, we're launching the developer preview of the &lt;a href="http://developer.android.com/xr" target="_blank"&gt;&lt;b&gt;Android XR SDK&lt;/b&gt;&lt;/a&gt; - a comprehensive development kit for &lt;a href="https://blog.google/products/android/android-xr" target="_blank"&gt;Android XR&lt;/a&gt;. It's the newest platform in the Android family built for extended reality (XR) headsets (and glasses in the future!). You’ll have endless opportunities to create and develop experiences that blend digital and physical worlds, using familiar Android APIs, tools and open standards created for XR. All of this means: if you build for Android, you're already building for XR!  Read on to get started with development for headsets.&lt;/p&gt;

&lt;p&gt;With the Android XR SDK you can:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Break free of traditional screens by spatializing your app with rich 3D elements, spatial panels, and spatial audio that bring a natural sense of depth, scale, and tangible realism&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Transport your users to a fantastical virtual space, or engage with them in their own homes or workplaces&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Take advantage of natural, multimodal interaction capabilities such as hands and eyes&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;blockquote&gt;&lt;i&gt;"We believe Android XR is a game-changer for storytelling. It allows us to merge narrative depth with advanced interactive features, creating an immersive world where audiences can engage with characters and stories like never before."&lt;/i&gt;&amp;nbsp;&lt;div&gt;- Jed Weintrob, Partner at &lt;a href="https://30ninjas.com/" target="_blank"&gt;&lt;b&gt;30 Ninjas&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;


&lt;h3&gt;Your apps on Android XR&lt;/h3&gt;

&lt;p&gt;The Android XR SDK is built on the existing foundations of Android app development. We're also bringing the Play Store to Android XR, where &lt;b&gt;&lt;a href="https://d.android.com/develop/xr/get-started#app-manifest" target="_blank"&gt;most Android&lt;/a&gt; apps will automatically be made available&lt;/b&gt; without any additional development effort. Users will be able to discover and use your existing apps in a whole new dimension. To differentiate your existing Compose app, you may &lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk/material-design#use-enablexrcomponentoverrides" target="_blank"&gt;opt-in&lt;/a&gt;, to automatically spatialize Material Design (M3) components and &lt;a href="https://developer.android.com/develop/ui/compose/layouts/adaptive" target="_blank"&gt;Compose for adaptive layouts&lt;/a&gt; in XR.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image showing sizing capabilities in Android XR" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbEXaOfE5q49kWLRssmqvCTaSy7C2tygDvFBvrJ99B1CFddU2CLMNEaMYkOwBPFG0iSpUjvAaKBDhu6AvNSQcH2v70n6wXRntYIIVD3dGYFHyoWa0JTSSIgDEWAzuxKipnd8sS54BI16sDm1Pl3XjoN_tTE2whNI8z19XyQTvCsz_F9_l2PEw8qrLsRw/s1600/image2.gif" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Apps optimized for large screens take advantage of sizing capabilities in Android XR 
&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;The Android XR SDK has something for every developer:&lt;/p&gt;

&lt;p&gt;Building with Kotlin and Android Studio? You'll feel right at home with the &lt;b&gt;Jetpack XR SDK&lt;/b&gt;, a suite of familiar libraries and tools to simplify development and accelerate productivity.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Using &lt;a href="https://unity.com/" target="_blank"&gt;Unity’s real-time 3D engine&lt;/a&gt;? The &lt;b&gt;Android XR Extensions for Unity&lt;/b&gt; provides the packages you need to build or port powerful, immersive experiences.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;Developing on the web? Use &lt;b&gt;WebXR&lt;/b&gt; to add immersive experiences supported on Chrome.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;Working with native languages like C/C++? Android XR supports the &lt;b&gt;OpenXR&lt;/b&gt; 1.1 standard.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt; 

  
&lt;h3&gt;Creating with Jetpack XR SDK&lt;/h3&gt;

&lt;p&gt;The Jetpack XR SDK includes new &lt;a href="https://d.android.com/jetpack" target="_blank"&gt;Jetpack&lt;/a&gt; libraries purpose-built for XR. The highlights include:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk/develop-ui" target="_blank"&gt;&lt;b&gt;Jetpack Compose for XR&lt;/b&gt;&lt;/a&gt; - enables you to declaratively create spatial UI layouts and spatialize your existing 2D UI built with Compose or Views&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;&lt;b&gt;&lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk/material-design" target="_blank"&gt;Material Design for XR&lt;/a&gt;&lt;/b&gt; - includes components and layouts that automatically adapt for XR&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;&lt;b&gt;&lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk#jetpack-scenecore" target="_blank"&gt;Jetpack SceneCore&lt;/a&gt;&lt;/b&gt; - provides the foundation for building custom 3D experiences&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;&lt;b&gt;&lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk/work-with-arcore" target="_blank"&gt;ARCore for Jetpack XR&lt;/a&gt;&lt;/b&gt; - brings powerful perception capabilities for your app to understand the real world&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;  

&lt;blockquote&gt;&lt;i&gt;“With Android XR, we can bring Calm directly into your world, capturing the senses and allowing you to experience it in a deeper and more transformative way. By collaborating closely with the Android XR team on this cutting-edge technology, we’ve reimagined how to create a sense of depth and space, resulting in a level of immersion that instantly helps you feel more present, focused, and relaxed.”&lt;/i&gt;&amp;nbsp;&lt;div&gt; - Dan Szeto,  Vice President at &lt;a href="https://www.calm.com/" target="_blank"&gt;&lt;b&gt;Calm Studios&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;Kickstart your Jetpack XR SDK journey with the &lt;b&gt;&lt;a href="https://github.com/android/xr-samples" target="_blank"&gt;Hello XR Sample&lt;/a&gt;&lt;/b&gt;, a straightforward introduction to the essential features of Jetpack Compose for XR.&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk" target="_blank"&gt;developing with the Jetpack XR SDK&lt;/a&gt;.&lt;/p&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image of the JetNews sample app adapted for Android XR" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYN9IFGBfr1YHz9A1KJn1GNiQJTrFcQ7KsHwQ7V8j9PhA9cieAALA_jf9EDiXwbzXvYZOF8x1NzFQXItF2f3sA3RAc9IOmJAqG2lGAtv082ZVrCWq8YTk-r8A9cf4x3unG-8DGM-AYiar97dFbrkGV1edRb4uuNBJFVRJkAb10mwNFCQ9d0FVQKzbJEoQ/s1600/image4.gif" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;The JetNews sample app is an Android large-screen app adapted for Android XR&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;We're also introducing new tools and capabilities to the latest preview of &lt;a href="https://developer.android.com/studio/preview" target="_blank"&gt;Android Studio Meerkat&lt;/a&gt; to boost productivity and simplify your creation process for Android XR.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Use the new &lt;b&gt;Android XR Emulator&lt;/b&gt; to create a virtualized XR device for deploying and testing apps built with the Jetpack XR SDK. The emulator includes XR-specific controls for using a keyboard and mouse to navigate an emulated virtual space.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;Use the Android XR template to get a jump-start on creating an app with Jetpack Compose for XR.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;Use the updated Layout Inspector to inspect and debug spatialized UI components created with Jetpack Compose for XR.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt; 
  
&lt;p&gt;Learn more about the XR enabled tools in &lt;a href="https://d.android.com/develop/xr/jetpack-xr-sdk/studio-tools" target="_blank"&gt;Android Studio and the Android XR Emulator&lt;/a&gt;.&lt;/p&gt;
  
&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image of the The Android XR Emulator in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKiz8-kYXH23Ut7w41I2zfusk9mAYFtbH_7koSB2cq5iCA7LJDxFtDW7Fn5e36lPDi0LTqwRK_P-IamIHCUpdl52ni0ZFOJ8f9w3dKn3D_sEcZxBsN4DrJYH3NqkzXp3mykRPIFo4iCNyovoduMNZa9P-fQc9fWQoi3e_yXz0yFwQxBHB-XPR7kgHP4I/s1600/xr_emulator2.gif" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;The Android XR Emulator in Android Studio has new controls to explore 3D space within the emulator&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt; 
  
&lt;h3&gt;Creating with Unity&lt;/h3&gt;

&lt;p&gt;We've partnered with Unity to natively integrate their real-time 3D engine with Android XR starting with &lt;a href="https://unity.com/releases/unity-6" target="_blank"&gt;Unity 6&lt;/a&gt;. Unity is introducing the &lt;a href="https://docs.unity3d.com/Packages/com.unity.xr.androidxr-openxr@latest" target="_blank"&gt;Unity OpenXR: Android XR&lt;/a&gt; package for bringing your multi-platform XR experiences to Android XR.&lt;/p&gt;

&lt;p&gt;Unity is adding Android XR support to these popular XR packages:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.13/manual/index.html" target="_blank"&gt;OpenXR&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@6.1/manual/index.html" target="_blank"&gt;AR Foundation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@3.0/manual/index.html" target="_blank"&gt;XR Interaction Toolkit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://docs.unity3d.com/Packages/com.unity.xr.hands@1.5/manual/index.html" target="_blank"&gt;XR Hands&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://docs.unity3d.com/Packages/com.unity.xr.compositionlayers@1.0/manual/usage-guide.html" target="_blank"&gt;XR Composition Layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt; 

&lt;p&gt;We're also rolling out the Android XR Extensions for Unity with samples and innovative features such as mouse interaction profile, environment blend mode, personalized hand mesh, object tracking, and more.&lt;/p&gt;
  
&lt;blockquote&gt;&lt;i&gt;"Having already brought Demeo to most commercially available platforms, it's safe to say we were impressed with the process of adapting the game to run on Android XR."&lt;/i&gt;&amp;nbsp;&lt;div&gt; 
  – Johan Gastrin, CTO at &lt;a href="https://www.resolutiongames.com/" target="_blank"&gt;&lt;b&gt;Resolution Games&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;Check out our &lt;a href="https://d.android.com/develop/xr/unity" target="_blank"&gt;getting started guide for unity&lt;/a&gt; and &lt;a href="https://on.unity.com/3DdnxJW" target="_blank"&gt;Unity’s blog post&lt;/a&gt; to learn more.&lt;/p&gt;
  
&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image of the The Vacation Simulator" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicNKeCyUzb594u9vDDz8ZnO_iI75eFmZS6S9D9Z9-MpWmetPTLXFUgsDDcyAuTSMC8IDCSzUSPvkLor6sZESB1iRD5EmDcvTqBlGFeXJfXgqW9pAYo5ud0EvpDIq3IOI_XqeJ68FM-5N9DB7KiEAx6bYM4jsPcA2g9p-PhZmiZ20Pc3XuY_0B1hjj6sKA/s1600/image5.gif" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;&lt;a href="https://owlchemylabs.com/blog/owlchemy-labs-announces-android-xr-support-for-job-simulator-vacation-simulator" target="_blank"&gt;Vacation Simulator&lt;/a&gt; has been updated to Unity 6 and supports Android XR&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;
  
  
&lt;h3&gt;Creating for the Web&lt;/h3&gt;

&lt;p&gt;Chrome on Android XR supports the &lt;b&gt;WebXR&lt;/b&gt; standard. If you're building for the web, you can enhance existing sites with 3D content or build new immersive experiences. You can also use full-featured frameworks like &lt;a href="https://threejs.org/" target="_blank"&gt;three.js&lt;/a&gt;, &lt;a href="https://aframe.io/" target="_blank"&gt;A-Frame&lt;/a&gt;, or &lt;a href="https://github.com/playcanvas/engine" target="_blank"&gt;PlayCanvas&lt;/a&gt; to create virtual worlds, or you can use a simpler API like &lt;a href="https://modelviewer.dev/" target="_blank"&gt;model-viewer&lt;/a&gt; so your users can visualize products in an e-commerce site.  And because WebXR is an &lt;a href="https://www.w3.org/TR/webxr/" target="_blank"&gt;open standard&lt;/a&gt;, the same experiences you build for mobile AR devices or dedicated VR hardware seamlessly work on Android XR.&lt;/p&gt; 

&lt;p&gt;Learn more about &lt;a href="https://d.android.com/develop/xr/develop-with-webxr" target="_blank"&gt;developing with WebXR&lt;/a&gt;.&lt;/p&gt;
  
&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image demonstrating virtual objects interacting with real world surfaces in Chrome on Android XR" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTqoGTJxZZAZZHjVvzAWuwRF0LUbfQyHhT-ISEVoaohPugXKBd1tX9ZL0OthhyA2dDEf1Ct-2frTvccOhjfBxGBfFFLSHJp5R0WyOHvUCf0TDYAO0bLpLGJPWgNoAB-730UdK16iO_0PEUVv0o7ElIugjunVVXW_UbDAH37KKZzvU_KW1hyI7R9dEr2iU/s1600/webxr_blur.gif" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Chrome on Android XR supports WebXR features including depth maps allowing virtual objects to interact with real world surfaces&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


  
&lt;h3&gt;Built on Open Standards&lt;/h3&gt;

&lt;p&gt;We’re continuing the Android tradition of building with open standards. At the heart of the Android perception stack is &lt;b&gt;OpenXR&lt;/b&gt; - a high-performance, cross-platform API focused on portability. Android XR is compliant with &lt;a href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html" target="_blank"&gt;OpenXR 1.1&lt;/a&gt;, and we’re also expanding the Open XR standards with leading-edge &lt;a href="https://d.android.com/develop/xr/openxr/extensions" target="_blank"&gt;vendor extensions&lt;/a&gt; to introduce powerful world-sensing capabilities such as:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;  
&lt;li&gt;AI-powered &lt;a href="https://d.android.com/develop/xr/openxr/extensions/XR_ANDROID_hand_mesh" target="_blank"&gt;hand mesh&lt;/a&gt;, designed to adapt to the shape and size of hands to better represent the diversity of your users&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://d.android.com/develop/xr/openxr/extensions/XR_ANDROID_depth_texture" target="_blank"&gt;Detailed depth textures&lt;/a&gt; that allow real world objects to occlude virtual content&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;Sophisticated &lt;a href="https://d.android.com/develop/xr/openxr/extensions/XR_ANDROID_light_estimation" target="_blank"&gt;light estimation&lt;/a&gt;, for lighting your digital content to match real-world lighting conditions&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://d.android.com/develop/xr/openxr/extensions/XR_ANDROID_trackables_object" target="_blank"&gt;New trackables&lt;/a&gt; that let you bring real world objects like laptops, phones, keyboards, and mice into a virtual environment&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;
  
&lt;p&gt;The Android XR SDK also supports open standard formats such as &lt;a href="https://www.khronos.org/gltf/" target="_blank"&gt;glTF 2.0&lt;/a&gt; for 3D models and &lt;a href="https://openexr.com/en/latest/TechnicalIntroduction.html" target="_blank"&gt;OpenEXR&lt;/a&gt; for high-dynamic-range environments.&lt;/p&gt; 

&lt;h3&gt;Building the future together&lt;/h3&gt;

&lt;p&gt;We couldn't be more proud or excited to be announcing the Developer Preview of the Android XR SDK. We’re releasing this developer preview, because we want to build the future of XR together with you. We welcome your &lt;a href="https://d.android.com/develop/xr/support" target="_blank"&gt;feedback&lt;/a&gt; and can’t wait to work with you and build your ideas and suggestions into the platform. Your passion, expertise, and bold ideas are absolutely essential as we continue to build Android XR.&lt;/p&gt; 

&lt;p&gt;We look forward to interacting with your apps, reimagined to take advantage of the unique spatial capabilities of Android XR, using familiar tools like Android Studio and Jetpack Compose. We’re eager to visit the amazing 3D worlds you build using powerful tools and open standards like Unity and OpenXR. Most of all, we can’t wait to go on this journey with all of you that make up the amazing community of Android and Unity developers.&lt;/p&gt;

&lt;p&gt;To get started creating and developing for Android XR, check out &lt;a href="https://d.android.com/develop/xr" target="_blank"&gt;developer.android.com/develop/xr&lt;/a&gt; where you will find all of the tools, libraries and resources you need to create with the Android XR SDK! If you are interested in getting access to prerelease hardware and collaborating with the Android XR team, express your interest to participate in an &lt;b&gt;Android XR Developer Bootcamp&lt;/b&gt; in 2025 by filling out this &lt;a href="https://d.android.com/develop/xr#bootcamp" target="_blank"&gt;form&lt;/a&gt;.&lt;/p&gt;</content><link href="http://android-developers.googleblog.com/feeds/770866887054828315/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/introducing-android-xr-sdk-developer-preview.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/770866887054828315" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/770866887054828315" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/introducing-android-xr-sdk-developer-preview.html" rel="alternate" title="Introducing Android XR SDK 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/b/R29vZ2xl/AVvXsEgHFxb0eGpenOcRJdGhlH_0Rlrqzq3mWejCBW7SQt5C881pR3OFvn7Q1yqDIJbuUaNl2xLAsgrBjarkgSUiWXUZMZY4VZG6nVWm8K7u3OsmQpDulK91Ym39zwoT4yqf4p-UAig7bA8gF1U-S1HBuHHH2pvlhakizVo5sZKS3LClG6FwXAK6X7qHee0v0E8/s72-c/0017-AfD-Android-XR-Blog-Social-1920x1080.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8002435194379785189</id><published>2024-12-09T12:00:00.000-08:00</published><updated>2024-12-09T12:01:55.216-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="app development"/><category scheme="http://www.blogger.com/atom/ns#" term="App quality"/><category scheme="http://www.blogger.com/atom/ns#" term="Explore"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="Indie Games"/><category scheme="http://www.blogger.com/atom/ns#" term="monetization"/><category scheme="http://www.blogger.com/atom/ns#" term="Playtime"/><category scheme="http://www.blogger.com/atom/ns#" term="User Acquisition"/><category scheme="http://www.blogger.com/atom/ns#" term="User Engagement"/><title type="text">Notes from Google Play: The next phase of Play</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAJ7SBwGxazH_UuGtBGs8vkVcnNJIVMEdtN10yp-1-lL_RqrNOll6txAHna8rOFUJ54kpkXnv_New0_plzPbFikSrKiEiirdmee_LwbGrnyw1jhx7gUVqvjhwm8ni9fTqFTOrpQaTmpJQfdoCcsRvsBD-ElEB5n74ey5durFLMvxEugAWGjW8l9r1Rxao/s1600/Android%20Blog%20Post%20-%20Metadata%20card%20-%201234x820.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAJ7SBwGxazH_UuGtBGs8vkVcnNJIVMEdtN10yp-1-lL_RqrNOll6txAHna8rOFUJ54kpkXnv_New0_plzPbFikSrKiEiirdmee_LwbGrnyw1jhx7gUVqvjhwm8ni9fTqFTOrpQaTmpJQfdoCcsRvsBD-ElEB5n74ey5durFLMvxEugAWGjW8l9r1Rxao/s1600/Android%20Blog%20Post%20-%20Metadata%20card%20-%201234x820.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Sam Bright – VP &amp;amp; GM, Google Play + Developer Ecosystem&lt;/em&gt;

&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Hello everyone,&lt;/p&gt;

&lt;p&gt;Thank you for making this year another incredible one! Your innovative experiences continue to inspire us and bring joy to billions. We recently celebrated some of your amazing work in our &lt;a href="https://blog.google/products/google-play/google-play-best-apps-games-2024/" target="_blank"&gt;Best of 2024&lt;/a&gt; awards, showcasing moments of delight across phones, large-screen devices, watches, and PCs.&lt;/p&gt;

&lt;p&gt;This year, we shared our vision for the &lt;a href="https://blog.google/products/google-play/google-play-july-2024-new-updates/" target="_blank"&gt;next phase of Play&lt;/a&gt; where Play leans into being more than a store and becomes a dynamic platform that connects people with your content, when and where they need it most. To help people discover all you have to offer, truly engage with your experiences, and keep them coming back for more, we’re making Play:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;A destination for discovery: Helping people find their new favorite apps and games and the content within&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;The best place for gaming: So people can play more of the games they love across more surfaces, with exclusive rewards available only through &lt;a href="https://play.google.com/console/about/programs/googleplaypoints/" target="_blank"&gt;Play Points&lt;/a&gt;, and&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Go &lt;a href="https://www.youtube.com/watch?v=peEbiF8PsT4" target="_blank"&gt;beyond the store&lt;/a&gt;: Where people can get relevant content from installed apps directly on their home screen through our new Collections experience&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="398" src="https://www.youtube.com/embed/51OUvg6vNpw" width="100%" youtube-src-id="51OUvg6vNpw"&gt;&lt;/iframe&gt;&lt;/p&gt;Check out the video above, or keep reading for some of the key features we've launched this year to help you succeed at every stage of your app’s lifecycle.&lt;div&gt;&lt;br /&gt;&lt;h3&gt;New tools and features built in 2024&lt;/h3&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Launch with confidence&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;Launching a new app or update is a critical moment and we want to make this process as smooth and successful as possible.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="https://play.google/howplayworks/the-latest/?section=latest-drawer&amp;amp;content=latest-2024-q2&amp;amp;article=2024-q2-the-latest-helping-users-discover-content" target="_blank"&gt;Pre-review checks&lt;/a&gt;&lt;/b&gt; help you catch policy and compatibility issues before launch.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://support.google.com/googleplay/android-developer/answer/9844486" target="_blank"&gt;&lt;b&gt;new quality panel&lt;/b&gt;&lt;/a&gt; gives you a centralized view of your app's quality so you can proactively find and address issues like crashes and ANRs, and see recommendations related to user experience.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;And with &lt;b&gt;&lt;a href="https://play.google.com/sdk-console/about/" target="_blank"&gt;SDK Console&lt;/a&gt;&lt;/b&gt;, we’re connecting you with SDK owners who can alert you in Android Studio and Play Console when new versions may address quality issues or help your app or game comply with Play policies.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Quality Panel in Google Play" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMaSLIqnwuTN6dIDHmdgRRI2HIDupfywsDEsXudQNnXMQhBUoZN93jI53dFEt6bRNh_hPKx3nAvJyIboUGHeGQjS4NhTk9WS5Vq4KpdycgOFU1c7BiRGydPmcEg10dW9ptAXYZ7EGuRMuu8YYUr9TNaZj3n47QBBY4hZD0mpnOvYuTUY63386yoxiuN0M/s1600/Google-Play-Quality-Panel.png" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Features like quality panel help you proactively find and address issues before you launch, helping you have a smooth and successful experience&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;h4&gt;&lt;span style="font-size: large;"&gt;Accelerate your growth and deepen your engagement with users&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;We've made Google Play even more content-forward with a visually engaging design that helps people discover the best of what you have to offer, wherever they are.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;We &lt;b&gt;integrated Gemini models&lt;/b&gt; to make it easier for everyone to find what they're looking for with AI-generated &lt;a href="https://blog.google/products/google-play/google-play-july-2024-new-updates/" target="_blank"&gt;app review summaries&lt;/a&gt;, FAQs, and &lt;a href="https://play.google/howplayworks/the-latest/?section=latest-drawer&amp;amp;content=latest-2024-q3&amp;amp;article=2024-q3-the-latest-helping-users-discover-content" target="_blank"&gt;app highlights&lt;/a&gt;, providing key information at a glance.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://play.google/howplayworks/the-latest/?section=latest-drawer&amp;amp;content=latest-2024-q1&amp;amp;article=2024-q1-the-latest-helping-users-discover-content" target="_blank"&gt;&lt;b&gt;Seamless app discovery&lt;/b&gt;&lt;/a&gt; helps users enjoy amazing experiences across their devices. Now, when people search for apps on their phone, they'll easily discover and install relevant apps for their TV, watch, and more.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;b&gt;Enhanced custom store listings&lt;/b&gt; give you even more ways to &lt;a href="https://support.google.com/googleplay/android-developer/answer/9867158?hl=en&amp;amp;sjid=13509440887419003928-NC" target="_blank"&gt;tailor your content&lt;/a&gt;. And now, with the ability to segment by search keyword, you can connect with users who are actively searching for the specific benefits your app offers. Play Console will even give you keyword suggestions.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://play.google.com/console/about/deeplinks/" target="_blank"&gt;Deep links&lt;/a&gt; help you create &lt;b&gt;seamless web-to-app journeys&lt;/b&gt; to take users directly to the content they want, right inside your app. And now, &lt;a href="https://android-developers.googleblog.com/2024/05/io-24-whats-new-in-google-play.html" target="_blank"&gt;we’ve made it even easier&lt;/a&gt; for you to manage and experiment with these deep links in Play Console, where you can make quick changes without waiting to publish a new app release.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="App highlights in Google Play" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqR2Fgrh7ycXo5sar5eLnU-M0r5Wf7JilgU2C-wIrsKZHSI51-e35fFuLY4cls63E8EX8doGLBE1dgf9FK5tQ2EuqyTjcYtdiZbLCVDkh4wPQyKwYh3iD8peJdJovuUCs9wAGhslxoj5d7dkgp7nAnxz0mDj3AQ723KpGJq6XjSJ65YqocVXWbpvnEmtw/s1600/Google-Play-App-Highlights.png" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;App highlights is one of our latest AI-powered features making it easier for users to discover their next favorite apps.&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;h4&gt;&lt;span style="font-size: large;"&gt;Optimize revenue with Google Play Commerce&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;We're continuing to make it easier and more convenient for over 2.5 billion users in over 190 markets to have seamless and secure purchase experiences.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;This year, we've helped over &lt;b&gt;half a billion people be ready to make purchases&lt;/b&gt; by proactively encouraging them to set up &lt;a href="https://support.google.com/googleplay/answer/1626831?hl=en" target="_blank"&gt;payment and authentication methods&lt;/a&gt; in advance. With new secure biometric authentication options like fingerprint and facial recognition, checkout is now faster and more secure.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;Our &lt;a href="https://play.google/howplayworks/the-latest/?section=latest-drawer&amp;amp;content=latest-2024-q3&amp;amp;article=2024-q3-the-latest-driving-global-growth" target="_blank"&gt;&lt;b&gt;extensive payment method library&lt;/b&gt;&lt;/a&gt;, which includes over 300 local forms of payment in more than 65 markets, continues to grow. This year, we added CashApp (US), Blik Banking (Poland), Pix (Brazil), and MoMo (Vietnam).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;b&gt;&lt;a href="https://play.google/howplayworks/the-latest/?section=latest-drawer&amp;amp;content=latest-2024-q2&amp;amp;article=2024-q2-the-latest-driving-global-growth" target="_blank"&gt;Expanded payment options&lt;/a&gt;&lt;/b&gt; give more ways for users to pay for content. Parents with Google Family setup can now approve their child's in-app purchases from any OS, not just on Android devices.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;And new &lt;b&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/12154973#base_plan_installments" target="_blank"&gt;subscription platform improvements&lt;/a&gt;&lt;/b&gt;, like flexible payment plans for long-term subscriptions, give users more options throughout the purchase experience, which helps drive higher conversions and new subscribers.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt; 


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Installment subscriptions in Google Play" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH3n2fwJ35Hd_ZPgeY2silt4D3K5560eT67DZhK_XCgkfdLVSKWVK8_KN1ke3Ti4BlWdSm2PVH6Z8c4UuLmABo-WFwxA0ayc-Mlv3NSQV64vtXFnwaol9bNJ1U4jNEKAjHY2a_hZIXYQyRv2hr78yBNenwpYqmvvXcm8EqpL4PnRlLrZ8m7wNGzQdA7Xg/s1600/Google-Play-Installment-Subscriptions.png" width="100%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Flexible payment plans give users more options throughout the purchase experience, helping drive higher conversions and new subscribers for your app&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Reinforcing trust, safety, and security&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;We continue to invest in more ways to protect users, your business, and the ecosystem. This includes actively combating bad actors who try to deceive users or spread malware, and giving you tools to combat abuse.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="https://developers.google.com/android/play-protect" target="_blank"&gt;Google Play Protect&lt;/a&gt;&lt;/b&gt; scans 200 billion apps daily. When it finds a potentially harmful app, we let people know and may even disable particularly dangerous apps.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;b&gt;Easier automatic app updates&lt;/b&gt; help ensure users have the latest features and improved security. Users with limited Wi-Fi access have the option to get their app updates over mobile data, and within their data budgets. We also launched a &lt;a href="https://android-developers.googleblog.com/2024/01/prompt-users-to-update-to-your-latest-app-version-google-play.html" target="_blank"&gt;new tool&lt;/a&gt; that empowers you to prompt users for timely updates.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;b&gt;Play Integrity API&lt;/b&gt; helps you detect suspicious activity so you can decide how to respond to abuse, like fraud, cheating, or data theft. Now, Play integrity &lt;a href="https://android-developers.googleblog.com/2024/12/making-play-integrity-api-faster-resilient-private.html" target="_blank"&gt;verdicts are faster, more resilient, and more privacy-friendly&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;/ul&gt;&lt;/ul&gt; 

&lt;p&gt;These are just the highlights. To see how we're continuously improving the experience, check out our quarterly roundup of programs and launches on &lt;a href="https://play.google/howplayworks/the-latest/" target="_blank"&gt;The Latest&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Investing in our app and game community&lt;/h3&gt;

&lt;p&gt;We’re continuing to help app and game businesses of all sizes reach their full potential.&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;This year, we’ve doubled the size of our global &lt;a href="https://android-developers.googleblog.com/2024/03/meet-class-of-2024-for-google-play-indie-games-accelerator.html" target="_blank"&gt;Indie Games Accelerator program&lt;/a&gt; and selected 60 game studios from around the world to participate in a 10-week program of masterclasses, workshops, and access to industry experts.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;Ten studios from across Latin America were selected to receive a share of $2 million in equity-free funding and hands-on guidance from the Google Play team as part of our &lt;a href="https://blog.google/products/google-play/10-indie-game-studios-making-moves-in-latin-america/" target="_blank"&gt;Indie Games Fund&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;500 aspiring developers in Indonesia participated in our &lt;a href="https://grow.google/intl/id_id/gamedevelopertraining/" target="_blank"&gt;Google Play x Unity Game Developer Training Program&lt;/a&gt; to build top-notch skills in game design, development, and monetization to kick-start their game development careers.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;And the &lt;a href="https://blog.google/intl/ko-kr/company-news/outreach-initiatives/go-global-with-google-play-changgoo/" target="_blank"&gt;ChangGoo&lt;/a&gt; initiative in Korea has nurtured a thriving startup ecosystem, supporting over 500 startups and attracting over KRW 147.6 billion in investments.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt; 

&lt;p&gt;And with another year of &lt;a href="https://play.google.com/console/about/weareplay/" target="_blank"&gt;#WeArePlay&lt;/a&gt;, we shared and celebrated the stories of 300 app and game businesses from all over the world. Take a look back at just a few of the inspiring founders we’ve featured.&lt;/p&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="420" src="https://www.youtube.com/embed/P6oWGNWuLeA" width="100%" youtube-src-id="P6oWGNWuLeA"&gt;&lt;/iframe&gt;


&lt;h3&gt;Looking ahead&lt;/h3&gt;

&lt;p&gt;I’m excited about the future of Google Play as a dynamic platform that connects users with your amazing content, wherever they are.&lt;/p&gt;

&lt;p&gt;Next year, we're going to continue helping you maximize your investments on Play by:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Leaning into content-rich and interactive experiences for apps both within and beyond the Play store,&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;Building on our gaming destination to make it even more personalized, engaging, and part of daily routines, and,&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;Simplifying the payment and checkout experience for your apps and content.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt; 

&lt;p&gt;Thanks again for your continued partnership and the innovation you’ve put into your apps and games. From our team to yours, happy holidays and best wishes for an amazing 2025!&lt;/p&gt;

&lt;div&gt;Sam Bright&amp;nbsp;
  &lt;div&gt;VP &amp;amp; GM, Google Play + Developer Ecosystem&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link href="http://android-developers.googleblog.com/feeds/8002435194379785189/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/notes-from-google-play.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8002435194379785189" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8002435194379785189" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/notes-from-google-play.html" rel="alternate" title="Notes from Google Play: The next phase of Play" 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/AVvXsEgAJ7SBwGxazH_UuGtBGs8vkVcnNJIVMEdtN10yp-1-lL_RqrNOll6txAHna8rOFUJ54kpkXnv_New0_plzPbFikSrKiEiirdmee_LwbGrnyw1jhx7gUVqvjhwm8ni9fTqFTOrpQaTmpJQfdoCcsRvsBD-ElEB5n74ey5durFLMvxEugAWGjW8l9r1Rxao/s72-c/Android%20Blog%20Post%20-%20Metadata%20card%20-%201234x820.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1544049452285008898</id><published>2024-12-06T09:00:00.000-08:00</published><updated>2024-12-06T09:00:17.479-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Privacy"/><category scheme="http://www.blogger.com/atom/ns#" term="User-Agent Reduction"/><category scheme="http://www.blogger.com/atom/ns#" term="Web"/><category scheme="http://www.blogger.com/atom/ns#" term="WebView"/><title type="text">User-Agent Reduction on Android WebView</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0MVh_bJgcw0FmQxOxWhDXa9HtSap2_XhOtgl3lW2aMN75fxs1Eg4j5UxZTx4TjbvHaOUkpkO80ClKladrbF-Os9Zg-_fv71RkHacBblIALAuAiHINQuiZEXOet471dNMqPHy7FgZcHcOG8uGgFP66w_CJ28eZbe4uLuvOB9ivGJHOSfAVJF0BFbKXPL8/s1600/Embedded-Media-and-Privacy%20%281%29.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0MVh_bJgcw0FmQxOxWhDXa9HtSap2_XhOtgl3lW2aMN75fxs1Eg4j5UxZTx4TjbvHaOUkpkO80ClKladrbF-Os9Zg-_fv71RkHacBblIALAuAiHINQuiZEXOet471dNMqPHy7FgZcHcOG8uGgFP66w_CJ28eZbe4uLuvOB9ivGJHOSfAVJF0BFbKXPL8/s1600/Embedded-Media-and-Privacy%20%281%29.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Mike Taylor (Privacy Sandbox), and Mihai Cîrlănaru (Web on Android)&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM8Q-ylwgpNWRJtnoOukb5OuXda374tCfol2i6mOZ8TcaupEdFxvOQ3HQJcjnarbMKRwMAyK4GXiwYWZ-lad_ZvMpHLqQ9fDuUcqm75tVZ2qLNqWcxcH_KxtGXho2A10nlqqMGo6Nu0G_6owR8RUIxoEohkukA6slv7kH6-QSDJg-YQnTWmZJLU1Iprj4/s1600/Embedded-Media-and-privacy.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM8Q-ylwgpNWRJtnoOukb5OuXda374tCfol2i6mOZ8TcaupEdFxvOQ3HQJcjnarbMKRwMAyK4GXiwYWZ-lad_ZvMpHLqQ9fDuUcqm75tVZ2qLNqWcxcH_KxtGXho2A10nlqqMGo6Nu0G_6owR8RUIxoEohkukA6slv7kH6-QSDJg-YQnTWmZJLU1Iprj4/s1600/Embedded-Media-and-privacy.png" /&gt;&lt;/a&gt;


&lt;p&gt;The User-Agent string has been &lt;a href="https://developers.google.com/privacy-sandbox/protections/user-agent" target="_blank"&gt;reduced&lt;/a&gt; in Chrome on Desktop and Chrome on Android platforms since Chrome 107. Beginning in Android 16, the &lt;i&gt;default&lt;/i&gt; User-Agent string in Android WebView will be similarly reduced.&lt;/p&gt;

&lt;h3&gt;Updated User-Agent string&lt;/h3&gt;

&lt;p&gt;The &lt;i&gt;default&lt;/i&gt;, reduced WebView User-Agent string is as follows:&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;Mozilla/&lt;span style="color: #666666;"&gt;5.0&lt;/span&gt; (Linux; Android &lt;span style="color: #666666;"&gt;10&lt;/span&gt;; K; wv) AppleWebKit/&lt;span style="color: #666666;"&gt;537.36&lt;/span&gt; (KHTML, like Gecko) Version/&lt;span style="color: #666666;"&gt;4.0&lt;/span&gt; Chrome/&lt;span style="color: #666666;"&gt;125.000&lt;/span&gt; Mobile Safari/&lt;span style="color: #666666;"&gt;537.36&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A diagram illustrating how different parts of a user agent string are updated." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRhWFSwEBSSq4G_W1wFto-C-UObiJQ2WCCQLiEx4FuEn_Y5xXPjHtZtyhtEvKJQRFGphhVqfSXA8T-q2N-HkOicQHZxbOn0TzeedTUR4BH8JV6HUd_lwrb5wmsvudY_2FO9C7vCxzK3KySh4aballiotDZVeN_FViFPqtFiGVbZXS7VAGVWImN7JDcubs/s1600/image1.png" width="80%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;As seen in the diagram, the OS, CPU, and Build information will be reduced to the static "Linux; Android 10; K" string. Minor/build/patch version information is also reduced to "0.0.0" The rest of the default User-Agent remains unchanged (and is unchanging).&lt;/p&gt;

&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;How can I detect WebView via the User-Agent string?&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;Sites can continue to look for the &lt;span style="color: #0d904f; font-family: Courier;"&gt;wv&lt;/span&gt; token in the User-Agent string, unless an application has decided to override the User-Agent string.&lt;/p&gt;

&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Does WebView support User-Agent Client Hints?&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;Android WebView has supported User-Agent Client Hints since version 116, but only for applications that send the default User-Agent string.&lt;/p&gt;

&lt;h4 style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Will a custom WebView User-Agent string be affected?&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;The ability to set a custom User-Agent via &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/webkit/WebSettings#setUserAgentString%28java.lang.String%29" target="_blank"&gt;setUserAgentString()&lt;/a&gt;&lt;/span&gt; won’t be affected - and applications that choose to do so won’t send the reduced User-Agent string.&lt;/p&gt;






</content><link href="http://android-developers.googleblog.com/feeds/1544049452285008898/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/user-agent-reduction-on-android-webview.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1544049452285008898" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1544049452285008898" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/user-agent-reduction-on-android-webview.html" rel="alternate" title="User-Agent Reduction on Android WebView" 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/AVvXsEg0MVh_bJgcw0FmQxOxWhDXa9HtSap2_XhOtgl3lW2aMN75fxs1Eg4j5UxZTx4TjbvHaOUkpkO80ClKladrbF-Os9Zg-_fv71RkHacBblIALAuAiHINQuiZEXOet471dNMqPHy7FgZcHcOG8uGgFP66w_CJ28eZbe4uLuvOB9ivGJHOSfAVJF0BFbKXPL8/s72-c/Embedded-Media-and-Privacy%20%281%29.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8148743406026049273</id><published>2024-12-04T12:00:00.000-08:00</published><updated>2024-12-05T11:00:00.639-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Development"/><category scheme="http://www.blogger.com/atom/ns#" term="app development"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="user safety"/><title type="text">Four Tips to Help You Build High-Quality, Engaging, and Age-Appropriate Apps</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpZZECD6v6Oe6NOAfHECBkglPgmtKCfpHhyOlh_xk42sZonI-XVbEjlMtil3oPmxKicWpfdbqsQKSpktd4VQfJWcA2yqn_dDRsX0uTNR7RBVPsgHHfAFoB3ZK0REkt4SFyBtwq4VYOgyYxeLZ4j7V3LARW6AbsnXExgVFHrQCDAhDzpwqdtfa6OduK/s1600/Android-KidsandFamilies_1024x512.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpZZECD6v6Oe6NOAfHECBkglPgmtKCfpHhyOlh_xk42sZonI-XVbEjlMtil3oPmxKicWpfdbqsQKSpktd4VQfJWcA2yqn_dDRsX0uTNR7RBVPsgHHfAFoB3ZK0REkt4SFyBtwq4VYOgyYxeLZ4j7V3LARW6AbsnXExgVFHrQCDAhDzpwqdtfa6OduK/s1600/Android-KidsandFamilies_1024x512.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Mindy Brooks – Senior Director, Android Platform&lt;/em&gt;
  
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0dFfNFKUlc_64L7o7AHhmbCICWev_05aki86EKm9vF5WpdszfwxVX7ICsU8ytWhBX9z_3lmp1p_UtPsPqMqXJ-HRLhWe5Sz8bRGmXY7Rw9BJn0utansHa6ShItCCGmC3LKXix1lMwsXVaFN98AuyABRT6fMvjBlzpqiowufcH4sLkHkjyWgBcsNC3/s1600/Android-KidsandFamilies_4209x1253.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="1058" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0dFfNFKUlc_64L7o7AHhmbCICWev_05aki86EKm9vF5WpdszfwxVX7ICsU8ytWhBX9z_3lmp1p_UtPsPqMqXJ-HRLhWe5Sz8bRGmXY7Rw9BJn0utansHa6ShItCCGmC3LKXix1lMwsXVaFN98AuyABRT6fMvjBlzpqiowufcH4sLkHkjyWgBcsNC3/s1600/Android-KidsandFamilies_4209x1253.png" width="670" /&gt;&lt;/a&gt;
  
&lt;p&gt;App developers play a vital role in shaping how people of all ages interact with technology. Whether your app content is specifically designed for kids or simply attracts their attention, there is an added responsibility to ensure a safe and trusted experience. Google is here to support you in that work. Today, we’re sharing some important reminders and updates on how we empower developers to build high-quality, engaging, and age-appropriate apps across the Android ecosystem.&lt;/p&gt;

&lt;h3&gt;Help Determine Android User Age with Digital IDs&lt;/h3&gt;

&lt;p&gt;Understanding a user's age range can be critical for providing minors with safer and more appropriate app experiences, as well as complying with local age-related regulations. Android’s new Credential Manager API, &lt;a href="https://developer.android.com/reference/kotlin/androidx/credentials/DigitalCredential" target="_blank"&gt;now in Beta for Digital IDs&lt;/a&gt;, addresses this challenge by helping developers verify a user’s age with a digital ID saved to any digital wallet application. Importantly, Android’s Credential Manager was built with both safety and privacy at its core – it minimizes data exposure by only sharing information necessary with developers and asks the user for explicit permission to share an age signal. We encourage you to &lt;a href="https://developer.android.com/identity/verify" target="_blank"&gt;try out&lt;/a&gt; the Beta API for yourself and look forward to hearing your feedback.&lt;/p&gt;

&lt;p&gt;While digital IDs are still in their early days, we’re continuing to work with governments on further adoption to strengthen this solution. Android is also exploring how the API can support a range of age assurance methods, helping developers to safely confirm the age of their users, especially for users that can't or don't want to use a digital ID. Please keep in mind that ID-based solutions are just one tool that developers can use to determine age and the best approach will depend on your app.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A diagram showing the flow of information between a user, their Android device, and a developer's app when using the Credential Manager API. The diagram shows how a digital ID from a user's digital wallet is used to provide app information to the developer's app." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdSQMp7m7bwu9QFLg8pEAWApSFZ-wGI8ZKAxANEyUl7PhvuqrC13L1sVUsDF-1RxxrIc2XiAenc5Fx86PEbuW0_dSMf20M0bUH7c1-9o9mwON1zO66qd7a5Y4PwqB9wcT7ZUMBF_BnPDoRpvCf6fhfOkAeMcKDojqN-p36uEYh8zuGXiA3hWRZjaTMguc/s1600/credential_mngr_apigraphic.png" width="100%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;


&lt;h3&gt;Shield Young Users from Inappropriate Content on Google Play&lt;/h3&gt;

&lt;p&gt;As part of our continued commitment to creating a safe and positive environment for children across the Play Store, we recently launched the Restrict Declared Minors (RDM) setting within the Google Play Console that allows developers to designate their app as inappropriate for minors. When enabled, Google Play users with declared ages below 18 will not be able to download or purchase the app nor will they be able to continue subscriptions or make new purchases if the app is already installed.&lt;/p&gt;

&lt;p&gt;Beyond Play’s broader kids safety policies, this new setting gives developers an additional tool to proactively prevent minors from accessing content that may be unsuitable for them. It also empowers developers to take a more proactive role in ensuring their apps reach the appropriate audience. As a reminder, this feature is simply one tool of many to keep your apps safe and we are continuing to improve it based on early feedback. Developers remain solely responsible for compliance with relevant laws and regulations. You can learn more about opting in to RDM &lt;a href="https://support.google.com/googleplay/android-developer/answer/9867159#zippy=%2Cages-and-over" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Develop Teacher Approved Apps and Games on Google Play&lt;/h3&gt;

&lt;p&gt;Great content for kids can take many forms, whether that’s sparking curiosity, helping kids learn, or just plain fun. Google Play’s &lt;a href="https://play.google.com/console/about/programs/teacherapproved/" target="_blank"&gt;Teacher Approved&lt;/a&gt; program highlights high-quality apps that are reviewed and rated by teachers and child development specialists. Our team of teachers and experts across the world review and rate apps on factors like age-appropriateness, quality of experience, enrichment, and delight. For added transparency, we include information in the app listing about why the app was rated highly to help parents determine if the app is right for their child. Apps in the program also must meet &lt;a href="https://play.google.com/console/about/programs/families/" target="_blank"&gt;strict privacy and security requirements&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Building a teacher-approved app not only helps raise app quality for kids – it can also increase your reach and engagement. All apps in this program are eligible to appear and be featured on &lt;a href="https://play.google.com/store/apps/category/FAMILY?hl=en_US&amp;amp;gl=US" target="_blank"&gt;Google Play's Kids&lt;/a&gt; tab where families go to easily discover quality apps and games. Please visit &lt;a href="https://playacademy.exceedlms.com/student/path/22151?sid=ef8b4aa9-5ba9-4c6a-a81e-49e0778090b0&amp;amp;sid_i=4" target="_blank"&gt;Google Play Academy&lt;/a&gt; for more information about how to design high-quality apps for kids.&lt;/p&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="398" src="https://www.youtube.com/embed/-FUmVUPThX8" width="100%" youtube-src-id="-FUmVUPThX8"&gt;&lt;/iframe&gt;&lt;br /&gt;

&lt;h3&gt;Stay Updated With Google Play’s Families Policies&lt;/h3&gt;
  
&lt;p&gt;Google Play policies provide additional protections for children and families. Our &lt;a href="https://support.google.com/googleplay/android-developer/answer/9893335?hl=en&amp;amp;ref_topic=9877766" target="_blank"&gt;Families policies&lt;/a&gt; require that apps and games targeted to children have appropriate content, show ads suitable for children, and meet other requirements including ones related to personally identifiable information. We frequently update and strengthen these policies to ensure that Google Play remains a place where families can find safe and high-quality content for their children. This includes our &lt;a href="https://support.google.com/googleplay/android-developer/answer/14585136?sjid=8930141697655092967-NC" target="_blank"&gt;new Child Safety Standards Policy&lt;/a&gt; for social and dating apps that goes into effect in January.&lt;/p&gt;

&lt;p&gt;Developers can showcase compliance with Play’s &lt;a href="https://support.google.com/googleplay/android-developer/answer/9893335?hl=en&amp;amp;ref_topic=9877766" target="_blank"&gt;Families policies&lt;/a&gt; with a special badge on the Google Play Data safety section. This is another great way that you can better help families find apps that meet their needs, while supporting Play’s commitment to provide users more transparency and control over their data. To display the badge, please visit the "Security practices" section of your Data Safety form in your Google Play Developer Console.&lt;/p&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A mobile phone screen displays an app's data safety information, including data encryption, deletion options, and adherence to Play Families Policy. The 'Data safety' section is expanded within the app's details page." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinnrasC9YHU5XIlOPAPbcNMuWYLSit5h5yjvbtEIhOczFc-TI5uc3SE_Np04QDms-dxo3lubjDTLBJxLrKLN21oxHCGLl-ZGHGYwXHPCU4WZ09s6kBTmfmginK-HDWMwxofG6hH8eemwImyHLLMbHSxS5wqft_AOIyg7OP9vjj3XYD1A-yVwz06lQPOO4/s1600/image1.png" width="40%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;Additional Resources&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;Protecting kids online is a responsibility we all share and we hope these reminders are helpful as you prepare for 2025. We’re grateful for your partnership in making Android and Google Play fantastic platforms for delightful, high-quality content for kids and families. For more resources: &lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Learn more about &lt;a href="https://developer.android.com/identity/verify" target="_blank"&gt;Android’s Credential Manager API&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Watch our interactive &lt;a href="https://playacademy.exceedlms.com/student/path/19753" target="_blank"&gt;Play Academy courses&lt;/a&gt; on complying with Play’s Families policies, including SDK requirements, selecting your target age and content settings, and more.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Review the updated &lt;a href="https://support.google.com/googleplay/android-developer/answer/14585136?sjid=8930141697655092967-NC" target="_blank"&gt;Child Safety Standards Policy&lt;/a&gt; ahead of the January deadline.&lt;/li&gt;
  
&lt;/ul&gt;&lt;/ul&gt; 


</content><link href="http://android-developers.googleblog.com/feeds/8148743406026049273/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/build-high-quality-enagaing-age-appropriate-apps.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8148743406026049273" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8148743406026049273" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/build-high-quality-enagaing-age-appropriate-apps.html" rel="alternate" title="Four Tips to Help You Build High-Quality, Engaging, and Age-Appropriate Apps" 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/AVvXsEhpZZECD6v6Oe6NOAfHECBkglPgmtKCfpHhyOlh_xk42sZonI-XVbEjlMtil3oPmxKicWpfdbqsQKSpktd4VQfJWcA2yqn_dDRsX0uTNR7RBVPsgHHfAFoB3ZK0REkt4SFyBtwq4VYOgyYxeLZ4j7V3LARW6AbsnXExgVFHrQCDAhDzpwqdtfa6OduK/s72-c/Android-KidsandFamilies_1024x512.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7880191014050332426</id><published>2024-12-04T06:00:00.000-08:00</published><updated>2024-12-04T06:03:32.534-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#WeArePlay"/><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="app development"/><category scheme="http://www.blogger.com/atom/ns#" term="developer stories"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Game Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="google play developers"/><category scheme="http://www.blogger.com/atom/ns#" term="success stories"/><title type="text">#WeArePlay | Tentang Anak connects parents to experts across Indonesia</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Gl7Aura9SiUpfcIyLSP6W8YBGb76MMr3YxDcZD2Dc6WlvPJZ17dBIhZazB_-tsaiPVPFWRDRb8FS8b9XOBTlkpMNHGCCVBP2rkmub3mjHCVdAf-cuavtGO6Z8wxQaUF82vg92PexgU9t70JBnzy84lmffADvKzqgYxwUsOtDHKVIBF6CimT3bYxmOD8/s1600/WeArePlay-Tentang-Anak.jpg" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Gl7Aura9SiUpfcIyLSP6W8YBGb76MMr3YxDcZD2Dc6WlvPJZ17dBIhZazB_-tsaiPVPFWRDRb8FS8b9XOBTlkpMNHGCCVBP2rkmub3mjHCVdAf-cuavtGO6Z8wxQaUF82vg92PexgU9t70JBnzy84lmffADvKzqgYxwUsOtDHKVIBF6CimT3bYxmOD8/s1600/WeArePlay-Tentang-Anak.jpg" style="display: none;" /&gt;

&lt;em&gt;Posted by Robbie McLachlan, Developer Marketing&lt;/em&gt;

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


&lt;p&gt;In our latest film for &lt;a href="https://play.google.com/console/about/weareplay/" target="_blank"&gt;#WeArePlay&lt;/a&gt;, which celebrates the people behind apps and games, we meet Mesty and Garri - the husband and wife duo who created &lt;a href="https://play.google.com/store/apps/dev?id=7254559593325176277&amp;amp;hl=en&amp;amp;gl=id" target="_blank"&gt;Tentang Anak&lt;/a&gt;. Their app helps parents across Indonesia navigate their parenting journey with confidence: with a focus on child health, growth tracking, and providing accessible expert consultations.&lt;/p&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/NDdzo7Uichc" width="100%" youtube-src-id="NDdzo7Uichc"&gt;&lt;/iframe&gt;&lt;br /&gt;

&lt;h4&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;What inspired you to create Tentang Anak?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;&lt;b&gt;Mesty:&lt;/b&gt; I saw so much misinformation about child health and parenting, especially in Indonesia where there’s a huge gap between the number of pediatricians and children. I wanted to provide parents with reliable, accessible information that could help them raise healthy, well-rounded children, allowing them to feel confident and calm in their parenting journey.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Garri:&lt;/b&gt; For me, it was about seeing the need for a one-stop solution for parents. Everything was scattered—pregnancy, growth tracking, expert advice—and I realized we could create something that brings it all together in one place. I wanted to build a platform that supported parents, especially in remote areas, with everything they need to raise their kids with confidence.&lt;/p&gt;&lt;br/&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A child has their height measured against a wall-mounted height chart. Mesty holds the measuring bar, while a hand holding a smartphone appears to be taking a picture." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO4of55LYFztOF71EJNN2hAt7wmqkSX9p9rYl0CRj0RcPDHXcbDwegIGc3niTZLNAlB_LuShb2A0jQ9vhfq-jPMSGrTUeKk-xQYiAy7Z1w_lNeTn6HK9JzGbYb7YIvbW3NWLYwJO_BsfqCynUlLWstNxZpWjBTWLaTVztpZCOiKwEXaSC0xAhFziltNaE/s1600/08_TENTANG_ANAK_Mesty&amp;amp;kid.jpg" width="100%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;h4&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;How does Tentang Anak ensure that the expert advice is both accurate and accessible to parents in remote areas of Indonesia?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;&lt;b&gt;Mesty:&lt;/b&gt; We make sure to partner with a team of highly qualified pediatricians, psychologists, and child development experts to ensure our advice is accurate and up-to-date.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Garri:&lt;/b&gt; Exactly, staying current with the latest research and best practices is crucial. Misinformation can have a huge impact, especially when it comes to child health. Parents often turn to social media or unverified sources for answers, which can lead to confusion or even harm. By partnering with qualified experts and constantly updating our content, we make sure that parents get accurate, reliable, and timely advice. This is especially important in remote areas where access to healthcare professionals can be limited.&lt;/p&gt;&lt;br/&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt=" A hand holds a smartphone displaying a webpage with various colorful sections and icons." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0QZfZNhrbmpKtqNQJj_SqeoAGLFZBQWKOkB0qkwfWE0sB6w0-nEiqGCnab4gT4ldm6PkFYf34YiVCEgQTd_rZtlAbLbAXW93yk5u2zByuX_0YCwjNkq-kSoHMiXmaipgmyTAo-zkdTsqo3uOumKQsxrLVvR1gpsDdbJ83AO_nFEiR6OBZ2lfeVwNxJR4/s1600/07_TENTANG_ANAK_app2.jpg" width="100%" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;h4&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;How has Google Play supported Tentang Anak?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;&lt;b&gt;Garri:&lt;/b&gt; Google Play has provided us with the tools and support to optimize our app's performance and engagement. From using Google’s analytics and A/B testing to improve the user experience, to the seamless distribution through the Play Store, Google has been a key partner in scaling Tentang Anak and making sure parents across Indonesia can access the app.&lt;/p&gt;

&lt;h4&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;What is next for Tentang Anak?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;&lt;b&gt;Mesty:&lt;/b&gt; We’re focused on expanding our reach across Indonesia, ensuring that more parents, especially in remote areas, have access to the support and resources they need. We’re also enhancing our app with more interactive features to keep parents engaged and informed.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Garri:&lt;/b&gt; At the same time, we’re expanding our offerings with products for children, including children's books, vitamins, and skincare. Our goal is to make Tentang Anak the go-to platform and brand for all things parenting in Indonesia, and we’re excited to see how we can grow and help even more families.&lt;/p&gt;&lt;br/&gt;

&lt;p&gt;Discover more &lt;a href="https://play.google.com/console/about/weareplay/" target="_blank"&gt;global #WeArePlay stories&lt;/a&gt; and share your favorites.&lt;/p&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;center&gt; How useful did you find this blog post?&lt;/center&gt;
&lt;br/&gt;&lt;center&gt;
&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt;
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"&gt;&lt;img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;






</content><link href="http://android-developers.googleblog.com/feeds/7880191014050332426/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/weareplay-tentang-anak-connects-parents-to-experts-indonesia.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7880191014050332426" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7880191014050332426" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/weareplay-tentang-anak-connects-parents-to-experts-indonesia.html" rel="alternate" title="#WeArePlay | Tentang Anak connects parents to experts across Indonesia" 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/AVvXsEg0Gl7Aura9SiUpfcIyLSP6W8YBGb76MMr3YxDcZD2Dc6WlvPJZ17dBIhZazB_-tsaiPVPFWRDRb8FS8b9XOBTlkpMNHGCCVBP2rkmub3mjHCVdAf-cuavtGO6Z8wxQaUF82vg92PexgU9t70JBnzy84lmffADvKzqgYxwUsOtDHKVIBF6CimT3bYxmOD8/s72-c/WeArePlay-Tentang-Anak.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-3987704822806623177</id><published>2024-12-03T09:00:00.000-08:00</published><updated>2024-12-03T10:36:22.717-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="Develop"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Game"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type="text">Making the Play Integrity API faster, more resilient, and more private</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJQzqdYU20KTV9vFI313J1jXMuQxyQEuz41zSOuGQFgwGJUS2vQ7yKeD3pYyyJ3OdLEIf_C3kJNDZu6-ND_RX_EFR_I2TdT93azG69KMtGBYcM2-gOpUI9_PGkJcZqSdWey51epJerkhcjzLfAewDKsypNBZhtu5CfGRkzwidct-TBcaxnc78RsHcZM5c/s1600/Play_DES_Metacard@2x.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJQzqdYU20KTV9vFI313J1jXMuQxyQEuz41zSOuGQFgwGJUS2vQ7yKeD3pYyyJ3OdLEIf_C3kJNDZu6-ND_RX_EFR_I2TdT93azG69KMtGBYcM2-gOpUI9_PGkJcZqSdWey51epJerkhcjzLfAewDKsypNBZhtu5CfGRkzwidct-TBcaxnc78RsHcZM5c/s1600/Play_DES_Metacard@2x.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Dom Elliott – Group Product Manager, Google Play&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCNVyrqIVkUkempeF4ecgXEVa2GTErLylCwgMzbnP8Pli1kjCR_x_BmwA-HldQIO9npEjG0xnvKH29FYm7oyAw7chBjxFTsiwaNjIfSiPGjjKTPsDmzRmJpxIxuhGEHvCU22jafTISyXEP72GUOzVyVUCQDg6CrNlQ37XkLVLKlGAjsZimJGfHvn5KJaE/s1600/Play_DES_Google%20Play%20AI%20Medium%20Header%20@2x.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCNVyrqIVkUkempeF4ecgXEVa2GTErLylCwgMzbnP8Pli1kjCR_x_BmwA-HldQIO9npEjG0xnvKH29FYm7oyAw7chBjxFTsiwaNjIfSiPGjjKTPsDmzRmJpxIxuhGEHvCU22jafTISyXEP72GUOzVyVUCQDg6CrNlQ37XkLVLKlGAjsZimJGfHvn5KJaE/s1600/Play_DES_Google%20Play%20AI%20Medium%20Header%20@2x.png" width="680" /&gt;&lt;/a&gt;

&lt;p&gt;At Google Play, we’re committed to providing a safe and secure environment for your business to thrive. That’s why we continually invest in reinforcing user trust, protecting your business, and safeguarding the ecosystem. This includes actively combating bad actors who try to deceive users or spread malware, and giving you tools to combat abuse.&lt;/p&gt;

&lt;p&gt;Our tools like the &lt;a href="http://g.co/play/integrityapi" target="_blank"&gt;Play Integrity API&lt;/a&gt; helps protect your business from revenue loss and enhance user safety. You can use the Play Integrity API to detect suspicious activity and decide how to respond to abuse, such as fraud, bots, cheating, or data theft. In fact, apps that use Play Integrity features have seen 80% less unauthorized usage on average compared to other apps. Today, we’re sharing how we’re enhancing the Play Integrity API for everyone.&lt;/p&gt;

&lt;h3&gt;Play integrity verdicts are becoming faster, less spoofable, and more privacy-friendly&lt;/h3&gt;

&lt;p&gt;Starting today, we’re changing the technology that powers the Play Integrity API on all devices running Android 13 (API level 33) and above to make it &lt;b&gt;faster, more reliable, and more private&lt;/b&gt; for users. Developers already using Play Integrity API can &lt;a href="https://play.google.com/console/u/0/developers/app/app-integrity/integrity-api-settings" target="_blank"&gt;opt-in to start using the new verdicts&lt;/a&gt; today; all API integrations will automatically transition to the new verdicts in May 2025. The improved verdicts will require, and make greater use of, hardware-backed security signals using &lt;a href="https://developer.android.com/privacy-and-security/security-key-attestation" target="_blank"&gt;Android Platform Key Attestation&lt;/a&gt;, making it significantly &lt;b&gt;harder and more costly for attackers&lt;/b&gt; to bypass. We’ll also be adjusting verdicts when we detect security threats across Android SDK versions, such as when there is evidence of excessive activity or key compromise, without requiring any developer work. And now, Play Integrity API will have the same level of reliability and support across all &lt;b&gt;Android form factors&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;The transition to the new verdicts will reduce the device signals that need to be collected and evaluated on Google servers by ~90% and our testing indicates verdict latency can improve by up to ~80%.&lt;/p&gt;

&lt;h3&gt;You can now check whether a device has a recent security update&lt;/h3&gt;

&lt;p&gt;Play Integrity API offers enhanced security signals, like the optional “meets-strong-integrity” and “meets-basic-integrity” responses in the device recognition verdict, to help you decide how much you trust the environment your app is running in. Now, we’re updating the &lt;b&gt;“meets-strong-integrity” response to require a security update&lt;/b&gt; within the last year on devices running Android 13 and above. This update gives apps with higher security needs, like banking and finance apps, governments, and enterprise apps, more ways to tailor their level of protection for sensitive features, like transferring money. When the strong label isn’t available for the user, we recommend that you have a fallback option. Learn more about our &lt;a href="https://developer.android.com/google/play/integrity/overview#security-considerations" target="_blank"&gt;recommended API practices&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’re also making it easier for you to adjust your app's behavior based on the user’s Android SDK version with a &lt;b&gt;new device attributes&lt;/b&gt; field. For example, your app could respond differently to the legacy “meets-strong-integrity” definition on devices running Android 12 and lower than to the enhanced definition on devices running Android 13 and higher. The &lt;a href="https://developer.android.com/google/play/integrity/improvements" target="_blank"&gt;FAQ&lt;/a&gt; includes some example code for using the new device attributes field.&lt;/p&gt;

&lt;h3&gt;We’re standardizing all optional verdict signals so it’s consistent for you to use&lt;/h3&gt;

&lt;p&gt;We’re simplifying and standardizing all verdict content across apps, games, SDKs, and more, so that what you see will be more consistent and predictable. For apps installed by Google Play, you can get enhanced verdicts with optional signals such as the improved “meets-strong-integrity” device verdict and the recently launched &lt;a href="https://developer.android.com/google/play/integrity/setup#optional_environment_details" target="_blank"&gt;app access risk verdict&lt;/a&gt; (which helps you detect and and respond to apps that can capture the screen or control the device, so you can protect your users from scams or malicious activity). For apps installed out of Google Play and all other API requests, you’ll receive a verdict with information about the device, account license, and app, but without the extra security signals.&lt;/p&gt;

&lt;h3&gt;Developers can start using the improved verdicts today and they’ll go live for all integrations in May 2025&lt;/h3&gt;

&lt;p&gt;Starting today, all new integrations will automatically receive the improved verdicts. Developers who already use the Play Integrity API can &lt;a href="https://play.google.com/console/u/0/developers/app/app-integrity/integrity-api-settings" target="_blank"&gt;opt-in&lt;/a&gt; to the new verdicts now, or wait until it automatically updates for them in May 2025. For more information, see the &lt;a href="https://developer.android.com/google/play/integrity/improvements" target="_blank"&gt;Play Integrity API documentation&lt;/a&gt;. With these ongoing enhancements, the Play Integrity API is becoming an even more essential tool for safeguarding your apps and users.&lt;/p&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;
 How useful did you find this blog post? 
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;
&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt;
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"&gt;&lt;img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;




</content><link href="http://android-developers.googleblog.com/feeds/3987704822806623177/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/making-play-integrity-api-faster-resilient-private.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3987704822806623177" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3987704822806623177" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/12/making-play-integrity-api-faster-resilient-private.html" rel="alternate" title="Making the Play Integrity API faster, more resilient, and more private" 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/AVvXsEjJQzqdYU20KTV9vFI313J1jXMuQxyQEuz41zSOuGQFgwGJUS2vQ7yKeD3pYyyJ3OdLEIf_C3kJNDZu6-ND_RX_EFR_I2TdT93azG69KMtGBYcM2-gOpUI9_PGkJcZqSdWey51epJerkhcjzLfAewDKsypNBZhtu5CfGRkzwidct-TBcaxnc78RsHcZM5c/s72-c/Play_DES_Metacard@2x.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2300394023109928869</id><published>2024-11-21T09:30:00.000-08:00</published><updated>2024-11-21T09:33:02.518-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#GenerativeAI"/><category scheme="http://www.blogger.com/atom/ns#" term="accessibility"/><category scheme="http://www.blogger.com/atom/ns#" term="Android app development"/><category scheme="http://www.blogger.com/atom/ns#" term="assistive technology"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini 1.5 Flash"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini API"/><category scheme="http://www.blogger.com/atom/ns#" term="ML Kit Face Detection"/><title type="text">Gaze Link Wins Best Android App in Gemini API Developer Competition</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Xdz-Px0B-EF3k3x3WIf22_nA1cPvrLG10k-Dnh6rQpk5xkfRjxUXl6RqQ7mkJt9zHGPxeg5ZA6CChdcJvhrJTn5sxREKHmOVcM_63msA5E_CHQ20pBI9Wbkx2xG7uWd1ldolevs6nOCGkHzqGxcKdL17LBw2sQBFsbNyhwwHNpredESWDQx__EirhYU/s1600/Gemini%20Competition%20G4D%20-%20meta.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Xdz-Px0B-EF3k3x3WIf22_nA1cPvrLG10k-Dnh6rQpk5xkfRjxUXl6RqQ7mkJt9zHGPxeg5ZA6CChdcJvhrJTn5sxREKHmOVcM_63msA5E_CHQ20pBI9Wbkx2xG7uWd1ldolevs6nOCGkHzqGxcKdL17LBw2sQBFsbNyhwwHNpredESWDQx__EirhYU/s1600/Gemini%20Competition%20G4D%20-%20meta.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Thomas Ezan – Sr Developer Relation Engineer (@lethargicpanda)&lt;/em&gt;

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


&lt;p&gt;We're excited to announce &lt;a href="https://play.google.com/store/apps/details?id=com.demo.opencv" target="_blank"&gt;Gaze Link&lt;/a&gt; as the winner of the Best Android App for our &lt;a href="https://ai.google.dev/competition" target="_blank"&gt;Gemini API Developer Competition&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;This innovative app demonstrates the potential of the Gemini API in providing a communication system for individuals with Amyotrophic lateral sclerosis (ALS) who develop severe motor and verbal disabilities, enabling them to type sentences with only their eyes.&lt;/p&gt;

&lt;iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="uFBhv3SEFXk" width="100%" height="413" src="https://www.youtube.com/embed/uFBhv3SEFXk"&gt;&lt;/iframe&gt;

&lt;h3&gt;About Gaze Link &lt;/h3&gt;

&lt;p&gt;Gaze Link uses Google’s Gemini 1.5 Flash model to predict the user’s intended sentence based on a few key words and the context of the conversation. &lt;/p&gt;

&lt;p&gt;For example if the context is “Is the room temperature ok?” and the user replies “hot AC two” the app will leverage Gemini to generate the full sentence “I am hot, can you turn the AC down by two degrees?”.&lt;/p&gt;

&lt;p&gt;The Gaze Link team took advantage of Gemini 1.5 Flash multilingual capabilities to let the app generate sentences in English, Spanish and Chinese, the three languages currently supported by the app.&lt;/p&gt;

&lt;p&gt;We were truly impressed by the Gaze Link app. The team used the Gemini API combined with &lt;a href="https://developers.google.com/ml-kit/vision/face-detection" target="_blank"&gt;ML Kit Face Detection&lt;/a&gt; to empower individuals with ALS providing them with a powerful communication system that is both accessible and affordable.&lt;/p&gt;

&lt;p&gt;With Gemini 1.5 Flash currently supporting &lt;a href="https://ai.google.dev/gemini-api/docs/models/gemini#available-languages" target="_blank"&gt;38 languages&lt;/a&gt;, it is possible for Gaze Link to add support for more languages in the future. In addition, the model’s multimodal abilities could enable the team to enhance the user experience by integrating image, audio and video to augment the context of the conversation.&lt;/p&gt;

&lt;h3&gt;Build with the Gemini API&lt;/h3&gt;

&lt;p&gt;The result of the integration of the Gemini API in Gaze Link is inspiring. If you are working on an Android app today, we encourage you to &lt;a href="https://android-developers.googleblog.com/2024/10/gemini-api-showcase-of-innovative-android-apps.html" target="_blank"&gt;learn about the Gemini API capabilities to see how you can successfully add generative AI to your app&lt;/a&gt; and delight your users.&lt;/p&gt;

&lt;p&gt;To get started, go to the &lt;a href="https://d.android.com/ai" target="_blank"&gt;Android AI documentation&lt;/a&gt;!&lt;/p&gt;

</content><link href="http://android-developers.googleblog.com/feeds/2300394023109928869/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/gaze-link-wins-best-android-app-gemini-api-developer-competition.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2300394023109928869" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2300394023109928869" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/gaze-link-wins-best-android-app-gemini-api-developer-competition.html" rel="alternate" title="Gaze Link Wins Best Android App in Gemini API Developer Competition" 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/AVvXsEg5Xdz-Px0B-EF3k3x3WIf22_nA1cPvrLG10k-Dnh6rQpk5xkfRjxUXl6RqQ7mkJt9zHGPxeg5ZA6CChdcJvhrJTn5sxREKHmOVcM_63msA5E_CHQ20pBI9Wbkx2xG7uWd1ldolevs6nOCGkHzqGxcKdL17LBw2sQBFsbNyhwwHNpredESWDQx__EirhYU/s72-c/Gemini%20Competition%20G4D%20-%20meta.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7046622895416558956</id><published>2024-11-21T09:00:00.000-08:00</published><updated>2024-11-21T09:00:55.043-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="case study"/><title type="text">X improved login success rate by 2x after adopting passkeys</title><content type="html">&lt;meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJBDCUgyNU3PZGJjKyeLncL_zp7FIivM5V5Y1sVvf5ftjwbnughwJszK4JvMgcNu_oIukprwUBSwMoEQlGz9Cq4CUNV1iy2OsHwnjLaLVoQ5U5juzQ4u-D9gDFJMwtlSGzEAuv7XdrQMPXzsAObarEhYOWXTicQFQdhQDx4lX3brOWMMCIn4vGOh89CgQ/s1600/image1.png"&gt;
&lt;img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJBDCUgyNU3PZGJjKyeLncL_zp7FIivM5V5Y1sVvf5ftjwbnughwJszK4JvMgcNu_oIukprwUBSwMoEQlGz9Cq4CUNV1iy2OsHwnjLaLVoQ5U5juzQ4u-D9gDFJMwtlSGzEAuv7XdrQMPXzsAObarEhYOWXTicQFQdhQDx4lX3brOWMMCIn4vGOh89CgQ/s1600/image1.png"&gt;

&lt;em&gt;Posted by Niharika Arora – Developer Relations Engineer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJBDCUgyNU3PZGJjKyeLncL_zp7FIivM5V5Y1sVvf5ftjwbnughwJszK4JvMgcNu_oIukprwUBSwMoEQlGz9Cq4CUNV1iy2OsHwnjLaLVoQ5U5juzQ4u-D9gDFJMwtlSGzEAuv7XdrQMPXzsAObarEhYOWXTicQFQdhQDx4lX3brOWMMCIn4vGOh89CgQ/s1600/image1.png" imageanchor="1" &gt;&lt;img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJBDCUgyNU3PZGJjKyeLncL_zp7FIivM5V5Y1sVvf5ftjwbnughwJszK4JvMgcNu_oIukprwUBSwMoEQlGz9Cq4CUNV1iy2OsHwnjLaLVoQ5U5juzQ4u-D9gDFJMwtlSGzEAuv7XdrQMPXzsAObarEhYOWXTicQFQdhQDx4lX3brOWMMCIn4vGOh89CgQ/s1600/image1.png" data-original-width="100%" data-original-height="800" /&gt;&lt;/a&gt;

&lt;p&gt;From breaking news and entertainment to sports and politics, &lt;a href="https://play.google.com/store/apps/details?id=com.twitter.android&amp;amp;hl=en_US" target="_blank"&gt;X&lt;/a&gt; is a social media app that aims to help nearly 500 million users worldwide get the full story with all the live commentary. Recently, X developers revamped the Android app’s login process so users never miss out on the conversations they’re interested in. Using the &lt;a href="https://developer.android.com/identity/sign-in/credential-manager" target="_blank"&gt;Credential Manager API&lt;/a&gt;, the team implemented new &lt;a href="https://developer.android.com/design/ui/mobile/guides/patterns/passkeys" target="_blank"&gt;passkey&lt;/a&gt; authentication for quicker, easier, and safer access to the app.&lt;/p&gt;

&lt;h3&gt;Simplifying login with passkeys&lt;/h3&gt;

&lt;p&gt;Today, traditional password-based authentication systems are &lt;a href="https://www.youtube.com/watch?v=2xdV-xut7EQ" target="_blank"&gt;less secure and more prone to cyber attacks&lt;/a&gt;. Many users often choose easy-to-guess passwords, which bad actors can easily crack using brute force attacks. They also reuse the same passwords across multiple accounts, meaning if one password is hacked, all accounts are compromised.&lt;/p&gt;

&lt;p&gt;Passkeys address the growing concern of account security from weak passwords and phishing attacks by eliminating the need for passwords entirely. The feature provides a safer, more seamless sign-in experience, freeing users from having to remember their usernames or passwords.&lt;/p&gt;

&lt;p&gt;“Passkeys are a simpler, more secure way to log in, replacing passwords with pins or biometric data like fingerprints or facial recognition,” said Kylie McRoberts, head of safety at X. “We explored using passkeys to make signing in easier and safer for users, helping protect their accounts without the hassle of remembering passwords.”&lt;/p&gt;

&lt;p&gt;Since implementing passkeys, the X team has seen a substantial reduction in login times and metrics showing improved login flow. With passkeys, &lt;b&gt;the app’s successful login rate has doubled&lt;/b&gt; compared to when it only relied on passwords. The team has also seen a decline in password reset requests from users who have enabled passkeys.&lt;/p&gt;

&lt;p&gt;According to X developers, adopting passkeys even came with benefits beyond enhanced security and a simplified login experience, like lower costs and improved UX.&lt;/p&gt;

&lt;p&gt;“Passkeys allowed us to cut down on expenses related to SMS-based two-factor authentication because they offer strong, inherent authentication,” said Kylie. “And with the ease of login, users are more likely to engage with our platform since there’s less friction to remember or reset passwords.”&lt;/p&gt;

&lt;p&gt;Passkeys rely on public-key cryptography to authenticate users and provide them with private keys. That means websites and apps can see and store the public key, but never the private key, which is encrypted and stored by the user’s credential provider. As keys are unique and tied to the website or app, they cannot be phished, further enhancing their security.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="We achieved an 80% code reduction in the authentication module, a 90% resolution of legacy edge case bugs, and an 85% decrease in GIS, One Tap, and Smart Lock code using passkeys.” — Saurabh Arora, Staff Engineer at X." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdOQTlO7rbhdnDJJUNpjwWvbCTFpsaRuBPgqVk4hZ4wiyNS5S7uAb8vZN27OhYfuco2MOed59sX3XDebYku_A3T4RaNuo-vwaBaCC_uayVjccYqwyNaUANRIw8b8m5ax4RWNLAvxFhqkJNVC4BWbU0NdHf_4s55gbggc54eTMZomYM943MP9qe4RKjKgc/s1600/image5.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;


&lt;h3&gt;Seamless integration using the Credential Manager API&lt;/h3&gt;

&lt;p&gt;To integrate passkeys, X developers used Android’s Credential Manager API, which made the process “extremely smooth,” according to Kylie. The API unifies Smart Lock, One Tap, and Google Sign-In into a single, streamlined workflow. This also allowed developers to remove hundreds of lines of code, boosting implementation and reducing maintenance overhead.&lt;/p&gt;

&lt;p&gt;In the end, the migration to Credential Manager took X developers only two weeks to complete, followed by an additional two weeks to fully support passkeys. This was a “very fast migration” and the team “didn’t expect it to be that simple and straightforward,” said Saurabh Arora, a staff engineer at X. Thanks to Credential Manager’s simple, coroutine-powered API, the complexities of handling multiple authentication options were essentially removed, reducing code, the likelihood of bugs, and overall developer efforts.&lt;/p&gt;

&lt;p&gt;X developers saw a significant improvement in developer velocity by integrating the Credential Manager API. With their shift to passkey adoption through Credential Manager API, they achieved an:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;80% code reduction in the authentication module&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;90% resolution of legacy edge case bugs&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;85% decrease in GIS, One Tap, and Smart Lock handling code&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;Using the Credential Manager API's top-level methods, like &lt;span style="color:#0d904f ; font-family:Courier"&gt;createCredential&lt;/span&gt; and &lt;span style="color:#0d904f ; font-family:Courier"&gt;getCredential&lt;/span&gt;, simplified integration by removing custom logic complexities surrounding individual protocols. This uniform approach also meant X developers could use a single, consistent interface to handle various authentication types, such as passkeys, passwords, and federated sign-ins like Sign in with Google.&lt;/p&gt;

&lt;p&gt;“With Credential Manager’s simple API methods, we could retrieve passkeys, passwords, and federated tokens with a single call, cutting down on branching logic and making response handling cleaner,” said Saurabh. “Using different API methods, like &lt;span style="color:#0d904f ; font-family:Courier"&gt;createCredential()&lt;/span&gt; and &lt;span style="color:#0d904f ; font-family:Courier"&gt;getCredential()&lt;/span&gt;, also simplified credential storage, letting us handle passwords and passkeys in one place.”&lt;/p&gt;

&lt;p&gt;X developers didn’t face many challenges when adopting Sign in With Google using the Credential Manager API. Replacing X’s previous Google Sign In, One Tap, and Smart Lock code with a simpler Credential Manager implementation meant developers no longer had to handle connection or disconnection statuses and activity results, reducing the margin of error.&lt;/p&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="A UI example of passkeys on X" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM0eHIHOGdMmQIr50uNo7ACAavH1YEvJkhn7RTdb4JWfBYyfxir45Ws0pBVk0s4oVDDX2KvTDFgB6aJkE2yZdqtycecb61RAP4MePkm0QJVEGjRXtp99o1CPl5UJHquTh9ENoPlEZjeiOu2LITV67L-HgvqkKPbyiOk3I-RbkDzueU6FIgHBn7NY9IVJc/s1600/image6.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;h3&gt;A future with passkeys&lt;/h3&gt;

&lt;p&gt;X's integration of passkeys shows that achieving a more secure and user-friendly authentication experience can be achieved. By leveraging Credential Manager API, X developers simplified the integration process, reduced potential bugs, and improved both security and developer velocity—all while sharpening the user experience.&lt;/p&gt;

&lt;p&gt;“Our advice for developers considering passkey integration would be to take advantage of the Credential Manager API,” said Saurabh. “It really simplifies the process and reduces code you need to write and maintain, making implementation better for developers.”&lt;/p&gt;

&lt;p&gt;Looking ahead, X plans to further enhance the user experience by allowing sign-ups with passkeys alone and providing a dedicated passkey management screen.&lt;/p&gt;

&lt;h3&gt;Get started&lt;/h3&gt;

&lt;p&gt;Learn how to improve your app’s login UX using &lt;a href="https://developer.android.com/design/ui/mobile/guides/patterns/passkeys" target="_blank"&gt;passkeys&lt;/a&gt; and the &lt;a href="https://developer.android.com/identity/sign-in/credential-manager" target="_blank"&gt;Credential Manager API&lt;/a&gt;.&lt;/p&gt;





</content><link href="http://android-developers.googleblog.com/feeds/7046622895416558956/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/x-improved-login-success-rate-after-adopting-passkeys.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7046622895416558956" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7046622895416558956" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/x-improved-login-success-rate-after-adopting-passkeys.html" rel="alternate" title="X improved login success rate by 2x after adopting passkeys" 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/AVvXsEiJBDCUgyNU3PZGJjKyeLncL_zp7FIivM5V5Y1sVvf5ftjwbnughwJszK4JvMgcNu_oIukprwUBSwMoEQlGz9Cq4CUNV1iy2OsHwnjLaLVoQ5U5juzQ4u-D9gDFJMwtlSGzEAuv7XdrQMPXzsAObarEhYOWXTicQFQdhQDx4lX3brOWMMCIn4vGOh89CgQ/s72-c/image1.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-5635276498688381873</id><published>2024-11-20T09:00:00.000-08:00</published><updated>2024-11-20T09:17:59.812-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="credential manager"/><category scheme="http://www.blogger.com/atom/ns#" term="FIDO2"/><category scheme="http://www.blogger.com/atom/ns#" term="Onboarding"/><category scheme="http://www.blogger.com/atom/ns#" term="passkeys"/><category scheme="http://www.blogger.com/atom/ns#" term="Restore Credentials"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><category scheme="http://www.blogger.com/atom/ns#" term="user experience"/><category scheme="http://www.blogger.com/atom/ns#" term="User Retention"/><title type="text">Introducing Restore Credentials: Effortless account restoration for Android apps</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFNDf69dCL-P2rn6PajockzNlxC57Z9hy3TaBi4Mi66aoKjamiB3M_nfk1CoSLKSieFcRSJbywsSfcEgvHNAhs3yc8K792Ig5r_lerGg4qL3n1Rb6_Xa0UHXdlHlVFwujegymT5esaB3hBVHS9u113MrDLEYIYda6O1dnQ8UNGTY0E5eiEuDiBSXUY_W4/s1600/Restore-Credentials-Feature.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFNDf69dCL-P2rn6PajockzNlxC57Z9hy3TaBi4Mi66aoKjamiB3M_nfk1CoSLKSieFcRSJbywsSfcEgvHNAhs3yc8K792Ig5r_lerGg4qL3n1Rb6_Xa0UHXdlHlVFwujegymT5esaB3hBVHS9u113MrDLEYIYda6O1dnQ8UNGTY0E5eiEuDiBSXUY_W4/s1600/Restore-Credentials-Feature.png" style="display: none;" /&gt;
&lt;p&gt;
&lt;em&gt;Posted by &lt;a href="https://x.com/NeelanshSahai" target="_blank"&gt;Neelansh Sahai&lt;/a&gt; - Developer Relations Engineer &lt;/em&gt;
&lt;/p&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaUCM7kC2VqW2Qj6AARAvYVJeHB1LuJfEdWyq5Mnti-YWlGWUAR32PkCHbobrLOcX3bZC-ew0hXmMcttv-Xg0fC9xgCyEMNQmNwZfhDpRnksMLANOAYJuTpvpczK39FddpBXFiZiErz31ohyphenhyphen3kO2q3SzfSJEei3Ohpn8o04w0GaSFEneNRwHIKrs89-Po/s1600/Restore-Credentials-Banner.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaUCM7kC2VqW2Qj6AARAvYVJeHB1LuJfEdWyq5Mnti-YWlGWUAR32PkCHbobrLOcX3bZC-ew0hXmMcttv-Xg0fC9xgCyEMNQmNwZfhDpRnksMLANOAYJuTpvpczK39FddpBXFiZiErz31ohyphenhyphen3kO2q3SzfSJEei3Ohpn8o04w0GaSFEneNRwHIKrs89-Po/s1600/Restore-Credentials-Banner.png" /&gt;&lt;/a&gt;

&lt;p&gt;Did you know that, on average, 40% of the people in the US reset or replace their smartphones &lt;a href="https://www.statista.com/statistics/619788/average-smartphone-life/" target="_blank"&gt;every year&lt;/a&gt;? This frequent device turnover presents a challenge – and an opportunity – for maintaining strong user relationships. When users get a new phone, the friction of re-entering login credentials can lead to frustration, app abandonment, and churn.&lt;/p&gt;

&lt;p&gt;To address this issue, we're introducing &lt;a href="https://developer.android.com/identity/sign-in/restore-credentials" target="_blank"&gt;Restore Credentials&lt;/a&gt;, a new feature of Android’s Credential Manager API. With Restore Credentials, apps can seamlessly onboard users to their accounts on a new device after they restore their apps and data from their previous device. This makes the transition to a new device effortless and fosters loyalty and long term relationships.&lt;/p&gt;

&lt;p&gt;On top of all this, there's no developer effort required for the transfer of a restore key from one device to the other, as this process is tied together with the android system’s backup and restore mechanism. However, if you want to login your users silently as soon as the restore is completed, you might want to implement &lt;span style="color: #0d904f; font-family: Courier;"&gt;BackupAgent&lt;/span&gt; and add your logic in the &lt;span style="color: #0d904f; font-family: Courier;"&gt;onRestore&lt;/span&gt; callback. The experience is delightful - users will continue being signed in as they were on their previous device, and they will be able to get notifications to easily access their content without even needing to open the app on the new device.&lt;/p&gt;


&lt;image&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioVNXeUrZrDWS0sg0gXLqSsl6Y8H59_QfiVjGzN_Z7BnHLsqXp9P4vkOYXX2l_G3Onicdfx7Clc6lj1NacegSIdHyumLG15aDdsBxiXFIOmZMo9A7I7bBHyHYOSeiITy5cD4qD8428fmUID2EZ6vq6ooZT7FzcE4Tjf_c8btK8CMr_dF75a7Fnqb-77_Q/s1600/Restore-Credentials-Feature%20%281%29.png" target="_blank"&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="An illustration the process of restoring app data and keys to a new device, highlighting automated steps and user interactions.  The top row shows a user signing into an app and a restore key being saved locally, while the bottom row shows the restore process on a new device." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioVNXeUrZrDWS0sg0gXLqSsl6Y8H59_QfiVjGzN_Z7BnHLsqXp9P4vkOYXX2l_G3Onicdfx7Clc6lj1NacegSIdHyumLG15aDdsBxiXFIOmZMo9A7I7bBHyHYOSeiITy5cD4qD8428fmUID2EZ6vq6ooZT7FzcE4Tjf_c8btK8CMr_dF75a7Fnqb-77_Q/s16000/Restore-Credentials-Feature%20(1).png" /&gt;&lt;/div&gt;&lt;/a&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;click to enlarge&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Some of the benefits of the Restore Credentials feature include:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Seamless user experience:&lt;/b&gt; Users can easily transition to a new Android device.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Immediate engagement:&lt;/b&gt; Engage users with notifications or other prompts as soon as they start using their new device.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Silent login with backup agent integration:&lt;/b&gt; If you're using a backup agent, users can be automatically logged back in after data restoration is complete.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Restore key checks without backup agent integration:&lt;/b&gt; If a backup agent isn't being used, the app can check for a restore key upon first launch and then log the user in automatically.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Easy implementation:&lt;/b&gt; Leverages the same &lt;a href="https://developers.google.com/identity/passkeys/developer-guides/server-registration" target="_blank"&gt;server-side implementation&lt;/a&gt; used for passkeys.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;h3&gt;How does Restore Credentials work?&lt;/h3&gt;

&lt;p&gt;The Restore Credentials feature enables seamless user account restoration on a new device. This process occurs automatically in the background during device setup when a user restores apps and data from a previous device. By restoring app credentials, the feature allows the app to sign the user back in without requiring any additional interaction.&lt;/p&gt;

&lt;p&gt;The credential type that’s supported for this feature is called restore key, which is a public key compatible with &lt;a href="https://fidoalliance.org/passkeys/" target="_blank"&gt;passkey / FIDO2&lt;/a&gt; backends.&lt;/p&gt;


&lt;image&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-sTZ9gUWdJF8GQaex0kGVdy0LSBwfOI9eC_iAozsGw-TaVhLLkUyGvTXqniDeYwy72qvrIVPqUcfODfh2onvm3Lz7GfqDwcvuxjh-lEBY-wF5a0F-_TiZ_8jsSbg9ZI5ROSq35WxWsYapt4LUcwHhUIz8xW4vTG-DqgjnIbPUDzMfgqzFva9vJPESSxo/s1600/image2.png" target="_blank"&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A diagram shows the device-to-device and cloud backup restore processes for app data and restore keys between old and new devices.  Steps are numbered and explained within the diagram." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-sTZ9gUWdJF8GQaex0kGVdy0LSBwfOI9eC_iAozsGw-TaVhLLkUyGvTXqniDeYwy72qvrIVPqUcfODfh2onvm3Lz7GfqDwcvuxjh-lEBY-wF5a0F-_TiZ_8jsSbg9ZI5ROSq35WxWsYapt4LUcwHhUIz8xW4vTG-DqgjnIbPUDzMfgqzFva9vJPESSxo/s1600/image2.png" /&gt;&lt;/div&gt;&lt;/a&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Diagram that depicts restoring an app data to a new device using a restore credential, including creating the credential, initiating a restore flow, and automatic user sign-in.&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;

&lt;h3&gt;User flow&lt;/h3&gt;

&lt;p&gt;On the old device:&lt;/p&gt;
&lt;ul&gt;&lt;ol&gt;
&lt;li&gt;If the current signed-in user is trusted, you can generate a restore key at any point after they've authenticated in your app. For instance, this could be immediately after login or during a routine check for an existing restore key.&lt;/li&gt;
&lt;li&gt;The restore key is stored locally and backed up to the cloud. Apps can opt-out of backing it up to the cloud.&lt;/li&gt;
&lt;/ol&gt;&lt;/ul&gt;

&lt;p&gt;On the new device:&lt;/p&gt;
&lt;ul&gt;&lt;ol&gt;
&lt;li&gt;When setting up a new device, the user can select one of the two options to restore data. Either they can restore data from a cloud backup, or can locally transfer the data. If the user transfers locally, the restore key is transferred locally from the old to the new device. Otherwise, if the user restores using the cloud backup, the restore key gets downloaded along with the app data from cloud backup to the new device.&lt;/li&gt;
&lt;li&gt;Once this restore key is available on the new device, the app can use it to log in the user on the new device silently in the background.&lt;/li&gt;
&lt;/ol&gt;&lt;/ul&gt;

&lt;blockquote&gt;&lt;b&gt;Note:&lt;/b&gt; You should delete the restore key as soon as the user signs out. You don’t want your user to get stuck in a cycle of signing out intentionally and then automatically getting logged back in.&lt;/blockquote&gt;


&lt;h3&gt;How to implement Restore Credentials&lt;/h3&gt;

&lt;p&gt;Using the &lt;a href="https://developer.android.com/jetpack/androidx/releases/credentials" target="_blank"&gt;Jetpack Credential Manager&lt;/a&gt; let you create, get, and clear the relevant Restore Credentials:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Create a Restore Credential:&lt;/b&gt; When the user signs in to your app, create a Restore Credential associated with their account. This credential is stored locally and synced to the cloud if the user has enabled Google Backup and end to end encryption is available. Apps can opt out of syncing to the cloud.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Get the Restore Credential:&lt;/b&gt; When the user sets up a new device, your app requests the Restore Credential from Credential Manager. This allows your user to sign in automatically.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Clear the Restore Credential:&lt;/b&gt; When the user signs out of your app, delete the associated Restore Credential.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;Restore Credentials is available through the Credential Manager Jetpack library. The minimum version of the Jetpack Library is &lt;span style="color: #0d904f; font-family: Courier;"&gt;1.5.0-beta01&lt;/span&gt;, and the minimum GMS version is &lt;span style="color: #0d904f; font-family: Courier;"&gt;242200000&lt;/span&gt;. For more on this, refer to the &lt;a href="https://developer.android.com/identity/sign-in/restore-credentials" target="_blank"&gt;Restore Credentials DAC page&lt;/a&gt;. To get started, follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;p&gt;1. Add the Credential Manager dependency to your project.&lt;/p&gt;&lt;/ul&gt;

&lt;div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"&gt;&lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #408080; font-style: italic"&gt;// build.gradle.kts&lt;/span&gt;
implementation(&lt;span style="color: #BA2121"&gt;&amp;quot;androidx.credentials:credentials:1.5.0-beta01&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;p&gt;2. Create a &lt;span style="color: #0d904f; font-family: Courier;"&gt;CreateRestoreCredentialRequest&lt;/span&gt; object.&lt;/p&gt;&lt;/ul&gt;

&lt;div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"&gt;&lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #408080; font-style: italic"&gt;// Fetch Registration JSON from server&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic"&gt;// Same as the registrationJson created at the time of creating a Passkey&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic"&gt;// See documentation for more info&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; registrationJson = ... 

&lt;span style="color: #408080; font-style: italic"&gt;// Create the CreateRestoreCredentialRequest object&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic"&gt;// Pass in the registrationJSON &lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; createRequest = CreateRestoreCredentialRequest(
  registrationJson,
  &lt;span style="color: #408080; font-style: italic"&gt;/* isCloudBackupEnabled = */&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;true&lt;/span&gt;
)
&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;b&gt;NOTE:&lt;/b&gt; Set the &lt;span style="color: #0d904f; font-family: Courier;"&gt;isCloudBackupEnabled&lt;/span&gt; flag to false if you want the &lt;span style="color: #0d904f; font-family: Courier;"&gt;restoreKey&lt;/span&gt; to be stored locally and not in the cloud. It’s set as &lt;span style="color: #0d904f; font-family: Courier;"&gt;true&lt;/span&gt; by default&lt;/blockquote&gt;&lt;/ul&gt;&lt;/ul&gt;


&lt;ul&gt;
&lt;p&gt;3. Call the &lt;span style="color: #0d904f; font-family: Courier;"&gt;createCredential()&lt;/span&gt; method on the &lt;span style="color: #0d904f; font-family: Courier;"&gt;CredentialManager&lt;/span&gt; object.&lt;/p&gt;&lt;/ul&gt;

&lt;div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"&gt;&lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; credentialManager = CredentialManager.create(context)

&lt;span style="color: #408080; font-style: italic"&gt;// On a successful authentication create a Restore Key&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic"&gt;// Pass in the context and CreateRestoreCredentialRequest object&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; response = credentialManager.createCredential(
    context,
    createRestoreRequest
)
&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;p&gt;4. When the user sets up a new device, call the &lt;span style="color: #0d904f; font-family: Courier;"&gt;getCredential()&lt;/span&gt; method on the &lt;span style="color: #0d904f; font-family: Courier;"&gt;CredentialManager&lt;/span&gt; object.&lt;/p&gt;&lt;/ul&gt;

&lt;div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"&gt;&lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #408080; font-style: italic"&gt;// Fetch the Authentication JSON from server&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; authenticationJson = ...

&lt;span style="color: #408080; font-style: italic"&gt;// Create the GetRestoreCredentialRequest object&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; options = GetRestoreCredentialOption(authenticationJson)
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; getRequest = GetCredentialRequest(Immutablelist.of(options))

&lt;span style="color: #408080; font-style: italic"&gt;// The restore key can be fetched in two scenarios to &lt;/span&gt;
&lt;span style="color: #408080; font-style: italic"&gt;// 1. On the first launch of app on the device, fetch the Restore Key&lt;/span&gt;
&lt;span style="color: #408080; font-style: italic"&gt;// 2. In the onRestore callback (if the app implements the Backup Agent)&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; response = credentialManager.getCredential(context, getRequest)
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you're using a backup agent, perform the &lt;span style="color: #0d904f; font-family: Courier;"&gt;getCredential&lt;/span&gt; part within the &lt;span style="color: #0d904f; font-family: Courier;"&gt;onRestore&lt;/span&gt; callback. This ensures that the app's credentials are restored immediately after the app data is restored.&lt;/p&gt;

&lt;ul&gt;
&lt;p&gt;5. When the user signs out of your app, call the &lt;span style="color: #0d904f; font-family: Courier;"&gt;clearCredentialState()&lt;/span&gt; method on the &lt;span style="color: #0d904f; font-family: Courier;"&gt;CredentialManager&lt;/span&gt; object.&lt;/p&gt;&lt;/ul&gt;

&lt;div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"&gt;&lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #408080; font-style: italic"&gt;// Create a ClearCredentialStateRequest object&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; clearRequest = ClearCredentialStateRequest(&lt;span style="color: #408080; font-style: italic"&gt;/* requestType = */&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;)

&lt;span style="color: #408080; font-style: italic"&gt;// On user log-out, clear the restore key&lt;/span&gt;
&lt;span style="color: #008000; font-weight: bold"&gt;val&lt;/span&gt; response = credentialManager.clearCredentialState(clearRequest)
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://developer.android.com/identity/sign-in/restore-credentials" target="_blank"&gt;Restore Credentials&lt;/a&gt; feature provides significant benefits, ensuring users experience a smooth transition between devices, and allowing them to log in quickly and easily through backup agents or restore key checks. For developers, the feature is straightforward to integrate and leverages existing passkey server-side infrastructure. Overall, Restore Credentials is a valuable tool that delivers a practical and user-friendly authentication solution.&lt;/p&gt;&lt;br/&gt;

&lt;em&gt;&lt;p&gt;This blog post is a part of our series: Spotlight Week: Passkeys. We're providing you with a wealth of resources through the week. Think informative blog posts, engaging videos, practical sample code, and more—all carefully designed to help you leverage the latest advancements in seamless sign-up and sign-in experiences.&lt;/p&gt;

&lt;p&gt;With these cutting-edge solutions, you can enhance security, reduce friction for your users, and stay ahead of the curve in the rapidly evolving landscape of digital identity. To get a complete overview of what Spotlight Week has to offer and how it can benefit you, be sure to &lt;a href="https://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html" target="_blank"&gt;read our overview blog post&lt;/a&gt;.&lt;/p&gt;&lt;/em&gt;










</content><link href="http://android-developers.googleblog.com/feeds/5635276498688381873/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/maintain-strong-user-relationships-with-restore-credentials.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5635276498688381873" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5635276498688381873" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/maintain-strong-user-relationships-with-restore-credentials.html" rel="alternate" title="Introducing Restore Credentials: Effortless account restoration for Android apps" 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/AVvXsEiFNDf69dCL-P2rn6PajockzNlxC57Z9hy3TaBi4Mi66aoKjamiB3M_nfk1CoSLKSieFcRSJbywsSfcEgvHNAhs3yc8K792Ig5r_lerGg4qL3n1Rb6_Xa0UHXdlHlVFwujegymT5esaB3hBVHS9u113MrDLEYIYda6O1dnQ8UNGTY0E5eiEuDiBSXUY_W4/s72-c/Restore-Credentials-Feature.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2932063671258364311</id><published>2024-11-20T06:00:00.000-08:00</published><updated>2024-11-20T06:01:25.614-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#WeArePlay"/><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="app development"/><category scheme="http://www.blogger.com/atom/ns#" term="developer stories"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Game Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="google play developers"/><category scheme="http://www.blogger.com/atom/ns#" term="success stories"/><title type="text">#WeArePlay | Meet more people creating apps and games in Japan</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw7SjF33Z1s7g79wQn8oxRbC0t4NRnaqY_h26L5pBA0oKJywH45K-34oRcYGaCO5dGo65ggsx688OWUNXWrNa3S5p-wDUAXzhnL2hsieYz1ARsYbpJnpe3E0jMK1AMEQwcShbZXF-Edxu-33TuONr9oNfj9j-BzLyRBzcrW5-fYq_bCR1rNwxGskJ0wVE/s1600/%23WeArePlay-%20Fujio,%20Pirika%20-%20Japan.jpg" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw7SjF33Z1s7g79wQn8oxRbC0t4NRnaqY_h26L5pBA0oKJywH45K-34oRcYGaCO5dGo65ggsx688OWUNXWrNa3S5p-wDUAXzhnL2hsieYz1ARsYbpJnpe3E0jMK1AMEQwcShbZXF-Edxu-33TuONr9oNfj9j-BzLyRBzcrW5-fYq_bCR1rNwxGskJ0wVE/s1600/%23WeArePlay-%20Fujio,%20Pirika%20-%20Japan.jpg" style="display: none;" /&gt;

&lt;em&gt;Posted by Robbie McLachlan, Developer Marketing&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0e_oDY0o32InJr4RvvPgzKremIOPhUBDaVHAsSeBKw7uejpIw2Rxioz3IigmQeMIYaVXJgSHMrIP3UiB40TeI4EIetGlUgIdgCE_Y9VFOMJj0IHQGenyiSqTHZaGyCqhuWD4nKc0NonpSVefNRnbznFXfjnS1W5bEkC-LFZXet6F5oo4ECPfdyUU8dbI/s1600/WeArePlay-Japan.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0e_oDY0o32InJr4RvvPgzKremIOPhUBDaVHAsSeBKw7uejpIw2Rxioz3IigmQeMIYaVXJgSHMrIP3UiB40TeI4EIetGlUgIdgCE_Y9VFOMJj0IHQGenyiSqTHZaGyCqhuWD4nKc0NonpSVefNRnbznFXfjnS1W5bEkC-LFZXet6F5oo4ECPfdyUU8dbI/s1600/WeArePlay-Japan.png" /&gt;&lt;/a&gt;

&lt;p&gt;Earlier this year #WeArePlay went on a virtual tour of &lt;a href="http://g.co/play/weareplay-australia" target="_blank"&gt;Australia&lt;/a&gt; and the &lt;a href="https://play.google.com/console/about/weareplay-us/?_gl=1*1p6xvq7*_up*MQ..*_ga*MTk2MzI2OTI5MC4xNzIwNDU1MDA4*_ga_4872ESP9WN*MTcyMDQ1NTAwOC4xLjAuMTcyMDQ1NTAwOC4wLjAuMA.." target="_blank"&gt;U.S.&lt;/a&gt; to spotlight the stories of app and game founders. Today, we’re rounding up our tour across the world with the last stop for 2024: &lt;a href="https://play.google.com/console/about/weareplay-japan/" target="_blank"&gt;Japan&lt;/a&gt;. From an app that uses AI to promote early health intervention to one that’s turning litter picking into a social movement, meet the 49 apps and games founders building growing businesses on Google Play.&lt;/p&gt;

&lt;p&gt;Let’s take a quick road trip across Japan by reading some of my favorite stories.&lt;/p&gt;&lt;br /&gt;


&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/P2LPxXKMvYI" width="100%" youtube-src-id="P2LPxXKMvYI"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Fujio, founder of Pirika&amp;nbsp;&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Tokoyo, Tokyo &lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;

&lt;h3&gt;Fujio’s app is turning litter collection into a global movement&lt;/h3&gt;

&lt;p&gt;When Fujio was a child, his love for environmental books ignited his passion for protecting nature. Later, while traveling through different countries, he was shocked to find litter everywhere, even in remote jungles. This experience inspired him to create &lt;a href="https://play.google.com/store/apps/details?id=com.epirka.mobile.android&amp;amp;referrer=snsjp" target="_blank"&gt;Pirika&lt;/a&gt; – named after the Ainu word for “beautiful” – a social platform that encourages people to pick up litter, document it with photos, and geotag locations to track problem areas. With over over 360 million pieces of trash collected globally, Pirika is fostering a nationwide movement towards cleaner communities. Fujio plans on expanding the app’s reach worldwide, mobilizing communities to fight pollution collectively.&lt;/p&gt;&lt;br/&gt;

&lt;image&gt;&lt;a href="g.co/play/weareplay-jp"&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="CHARROOM with short, dark hair, wearing a mask and a light-colored blouse and gray skirt, holds a small, white, long-haired dog. They are standing in front of a floral arch with text partially visible, including the words 'BE' and 'COMING'. " border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiotL5VDLRxrqvnSNUYgTvqupIvqEJu_rtCy08MgJ9OUsfEb1AABLmweL-yH6BqcLVy1KoZQKaM-g7nzcQTKh_yDkgq11kurdxIsMVKr9-qw1u9ThO64xq2F6h903W24d0_TxCLBxm4Ufj5xmzP9-w0Uy8eQVjGDTcEPA5tMpSXxRWE2VglxSQDcL4PhE/s1600/01_Hyogo_CharRoom_Dog%20-%20char%20room%20%28%E3%82%AD%E3%83%A3%E3%83%A9%20%E3%83%AB%E3%82%A5%E3%83%A0%29_edited.png"  width="600"/&gt;&lt;/div&gt;&lt;/a&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;CHARROOM, founder of CHARROOM&amp;nbsp;&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Osaka, Kinki&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br/&gt;

&lt;p&gt;Self-taught game developer and illustrator CHARROOM turned her passion for mini-games into a full-time career. Her latest project, &lt;a href="https://play.google.com/store/apps/dev?id=5912799325646201933&amp;amp;gl=jp" target="_blank"&gt;Sushi Food Cart&lt;/a&gt;, combines two of her favorite things: sushi and cats. In this fun cooking game, players manage a sushi food cart, preparing and serving sushi to customers quickly and accurately. The game features quirky cat characters, time-management challenges, and colorful art. As players progress, they unlock new recipes, upgrades, and meet new cat characters. For Char, creating apps is her ‘ikigai’—her purpose in life. She’s currently working on a new restaurant game to continue spreading her playful approach to gaming.&lt;/p&gt;&lt;br/&gt;


&lt;image&gt;&lt;a href="g.co/play/weareplay-jp"&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="Kota and Yoshinori, co-founders of Ubie, wearing suits and white shirts, smile and talk in front of a white wall." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxpuRXleETtXcb38VByBw8NLdA7E4TyWBJqBxsWai_1bgMN8ZJPRHrmZPySLttjnSCBumduEBpY6HV5Kx6sgaLro7D34y1XhW0IBFScJrjyf2tprR0SXuq6qCBQQk-B_fCAR_POeh983akZ0VIBLDCoGnKSK1vCY8nHbiXaVGlmKzgzNiwTfikQC-3Uo/s1600/01_Ubie_Founders_Kota%20Kubo_Yoshinori%20Abe.jpg"  width="600"/&gt;&lt;/div&gt;&lt;/a&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Kota and Yoshinori, co-founders founders of Ubie&amp;nbsp;&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Tokyo, Tokyo&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br/&gt;

&lt;h3&gt;Kota and Yoshinori’s app uses AI to help people research their health concerns and connect with medical specialists&lt;/h3&gt;

&lt;p&gt;When entrepreneur Kota decided to create a healthcare app, he partnered with his high school friend and roommate, Dr. Yoshinori. Combining Kota’s tech expertise with Yoshinori’s medical knowledge, they developed &lt;a href="https://play.google.com/store/apps/details?id=app.ubie&amp;amp;gl=jp" target="_blank"&gt;Ubie&lt;/a&gt;, an AI-powered symptom checker that allows people to research their symptoms and connect with medical specialists. The app promotes early detection and intervention by offering them tailored information on potential health concerns and guidance on finding care. Ubie's goal is not just limited to symptom checking; the founders plan to expand its services to include tracking treatments and managing day-to-day healthcare needs alongside transforming Ubie into a global brand.&lt;/p&gt;


&lt;image&gt;&lt;a href="g.co/play/weareplay-jp"&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt=" Takuji, co-founders of IzumiArtisan, sits in a folding chair at a campsite. He is wearing a brown sweater, khaki pants, and black shoes. A car and tent are visible in the background. " border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn3gdrcJF29V5jHRwbUdrHvXPjLTHAd05TVnUHkIlncAQpRYwox8CRz1p_fEnqwbrwE9KMS_y1cgQJn2HD-lnKh5O_4hr9ept0Y94hUmHI6j8BthBu9ylI6btGyvOpQh-gYsXCOaK2fcrnTZmYu9Yy7NZh4ZjhiSjVC2sKbyE8dHe5KrKXiuhYHXOu_mo/s1600/01_Osaka_IzumiArtisan_Takuji%20%28younbrother%29_edited.jpg"  width="600"/&gt;&lt;/div&gt;&lt;/a&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Takuji and Shohei, co-founders of IzumiArtisan&amp;nbsp;&lt;/em&gt;&lt;/center&gt;&lt;center&gt;&lt;em&gt;Osaka, Kinki&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br/&gt;

&lt;p&gt;Takuji has always been passionate about travel and music, but when he learned programming 15 years ago, he discovered a new creative outlet. Together with his brother, Shohei, he launched IzumiArtisan from their parents' house in Osaka. The duo specializes in creating escape room games, heavily influenced by the detective stories Takuji loves. Their popular game, &lt;i&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.izumiartisan.rime&amp;amp;gl=jp" target="_blank"&gt;Rime&lt;/a&gt;&lt;/i&gt;, is filled with mysterious puzzles and plot twists and has been translated into 18 languages, capturing a global audience. The brothers are now working on a new title inspired by the American Underground Railroad.&lt;/p&gt;&lt;br/&gt;

&lt;p&gt;Discover more #WeArePlay stories from &lt;a href="https://play.google.com/console/about/weareplay-japan/" target="_blank"&gt;Japan&lt;/a&gt;, and stories from &lt;a href="https://play.google.com/console/about/weareplay/" target="_blank"&gt;across the globe&lt;/a&gt;.&lt;/p&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;
 How useful did you find this blog post? 
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;
&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt;
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"&gt;&lt;img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;





















</content><link href="http://android-developers.googleblog.com/feeds/2932063671258364311/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/weareplay-meet-more-people-creating-apps-games-japan.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2932063671258364311" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2932063671258364311" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/weareplay-meet-more-people-creating-apps-games-japan.html" rel="alternate" title="#WeArePlay | Meet more people creating apps and games in Japan" 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/AVvXsEhw7SjF33Z1s7g79wQn8oxRbC0t4NRnaqY_h26L5pBA0oKJywH45K-34oRcYGaCO5dGo65ggsx688OWUNXWrNa3S5p-wDUAXzhnL2hsieYz1ARsYbpJnpe3E0jMK1AMEQwcShbZXF-Edxu-33TuONr9oNfj9j-BzLyRBzcrW5-fYq_bCR1rNwxGskJ0wVE/s72-c/%23WeArePlay-%20Fujio,%20Pirika%20-%20Japan.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-5838119739692772310</id><published>2024-11-18T11:00:00.000-08:00</published><updated>2024-11-19T11:09:30.705-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="android16"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Preview"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="latest"/><title type="text">The First Developer Preview of Android 16</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipxy9M_N_1ALvqd9gX2gr49EHwhZl5la4BL6IuD4HOQ6DYUAkIU3riaDVpFiLKFoCfW5PZk1gRfcp8o5DBmuayvSK3irYNGK0uyAkWS6lpLHQuUIO4ddYm88Q33bvMbcAGfTvn4ZqnIskRuMvOZh3WputmbIzxrdTH5Jzd79qXMh_1qIEzkwg6EWKNwxU/s1600/A16DP1-Feature%20%281%29.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipxy9M_N_1ALvqd9gX2gr49EHwhZl5la4BL6IuD4HOQ6DYUAkIU3riaDVpFiLKFoCfW5PZk1gRfcp8o5DBmuayvSK3irYNGK0uyAkWS6lpLHQuUIO4ddYm88Q33bvMbcAGfTvn4ZqnIskRuMvOZh3WputmbIzxrdTH5Jzd79qXMh_1qIEzkwg6EWKNwxU/s1600/A16DP1-Feature%20%281%29.png" style="display: none;" /&gt;

&lt;em&gt; Posted by Matthew McCullough – VP of Product Management, Android Developer&lt;/em&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/AVvXsEgzSaHHuD_g2OfrXVDWsS3bG2buhYeEinrxt3WYp0qqEiv6QfR_QxJguw_gUprGOtbfkN6rZ-C2vUPzEYBpdoQKga4DqTbqulMDiuD2ECzZSs6-XrBPslsgGBGB-s03DoPQAu1Vxt1CDn4Xsugru5SuOaLjBKatTZ_RjcSrjHsy2v4qtlyIwca0I5-BCh4/s1600/android_16_platlogo_512px.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzSaHHuD_g2OfrXVDWsS3bG2buhYeEinrxt3WYp0qqEiv6QfR_QxJguw_gUprGOtbfkN6rZ-C2vUPzEYBpdoQKga4DqTbqulMDiuD2ECzZSs6-XrBPslsgGBGB-s03DoPQAu1Vxt1CDn4Xsugru5SuOaLjBKatTZ_RjcSrjHsy2v4qtlyIwca0I5-BCh4/w320-h320/android_16_platlogo_512px.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Android 16 Developer Preview 1 is available now to test with your apps. This is the start of Android having more frequent API releases as part of our effort to drive faster innovation in apps and devices.&lt;/p&gt;

&lt;h3&gt;Two Android API releases in 2025&lt;/h3&gt;

&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;This preview is for the next major release of Android with a planned launch in Q2 of 2025. This release is similar to all of our API releases in the past, where we can have planned behavior changes that are often tied to a &lt;span style="color: #0d904f; font-family: Courier;"&gt;targetSdkVersion&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;

&lt;li&gt;We’re planning the major release a quarter earlier (Q2 rather than Q3 in prior years) to better align with the schedule of device launches across our ecosystem, so more devices can get the major release of Android sooner. With the major release coming in Q2, you’ll need to do your annual compatibility testing a few months earlier than in previous years to make sure your apps are ready.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
&lt;li&gt;We plan to have another release in Q4 of 2025 which also will include new developer APIs. The Q2 major release will be the only release in 2025 to include planned behavior changes that could affect apps.&lt;/li&gt; 
&lt;/ul&gt;&lt;/ul&gt;
  
&lt;p&gt;In addition to new developer APIs, the Q4 minor release will pick up feature updates, optimizations, and bug fixes; it will not include any app-impacting behavior changes.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A timeline shows the release schedule for software development kits (SDKs), marked as 25Q1 through 25Q4.  25Q2 is a major release with behavior changes, APIs, and features, while 25Q4 is a minor release with APIs and features; 25Q1 and 25Q3 include features only." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAaLP-m3QRddUjzrMlgC-uH0casI6gqtooaIPGwldGS-pbcotGLA2jKeBWjjpHBm7D8c6TkYWIwIqne_ajvA5N8KpXt8ZqOfHXqrHYVin5SbxlZsqkMA0KELPl9YbO1H7D49SCKAhnkp-wnH6EWuVzVDAaWmXRzlTgmY15n-Dj4bEHqEuFurdIqvrcjyE/s1600/image3.png" width="640" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;We'll continue to have quarterly Android releases. The Q1 and Q3 updates  in-between the API releases will provide incremental updates to help ensure continuous quality. We’re actively working with our device partners to bring the Q2 release to as many devices as possible.&lt;/p&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/tU9-p4jME_w" width="100%" youtube-src-id="tU9-p4jME_w"&gt;&lt;/iframe&gt;

&lt;h3&gt;Using new APIs with major and minor releases&lt;/h3&gt;

&lt;p&gt;Guarding a code block with a check for Android's API level is done today using the &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/os/Build.VERSION#SDK_INT" target="_blank"&gt;SDK_INT&lt;/a&gt;&lt;/span&gt; constant with &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/os/Build.VERSION_CODES" target="_blank"&gt;VERSION_CODES&lt;/a&gt;&lt;/span&gt;. This will continue to be supported for major Android releases.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (SDK_INT &amp;gt;= VERSION_CODES.BAKLAVA) {
  &lt;span style="color: #408080; font-style: italic;"&gt;// Use APIs introduced in Android 16&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The new &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/os/Build.VERSION#SDK_INT_FULL" target="_blank"&gt;SDK_INT_FULL&lt;/a&gt;&lt;/span&gt; constant can be used for API checks against both major and minor versions with the new &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/os/Build.VERSION_CODES_FULL" target="_blank"&gt;VERSION_CODES_FULL&lt;/a&gt;&lt;/span&gt; enumeration.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;if&lt;/span&gt; (SDK_INT_FULL &amp;gt;= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  &lt;span style="color: #408080; font-style: italic;"&gt;// Use APIs introduced in a major or minor release&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You can also use the &lt;span style="font-family: Courier;"&gt;&lt;a href="https://developer.android.com/reference/android/os/Build#getMinorSdkVersion%28int%29" target="_blank"&gt;Build.getMinorSdkVersion()&lt;/a&gt;&lt;/span&gt; method to get just the minor SDK version.&lt;/p&gt;

&lt;div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"&gt;&lt;pre style="line-height: 125%; margin: 0px;"&gt;&lt;span style="color: green; font-weight: bold;"&gt;val&lt;/span&gt; minorSdkVersion = Build.getMinorSdkVersion(VERSION_CODES_FULL.BAKLAVA)
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;These APIs have not yet been finalized and are subject to change, so please send us &lt;a href="https://developer.android.com/about/versions/16/feedback" target="_blank"&gt;feedback&lt;/a&gt; if you have any concerns.&lt;/p&gt;

&lt;blockquote&gt;Note that there’s no change to the target API level requirements and the associated dates for apps in Google Play; our plans are for one annual requirement each year, and that will be tied to the major API level.&lt;/blockquote&gt;
  
&lt;h3&gt;Embedded photo picker&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://developer.android.com/training/data-storage/shared/photopicker" target="_blank"&gt;photo picker&lt;/a&gt; provides a safe, built-in way for users to grant your app access to selected images and videos from both local and cloud storage, instead of their entire media library. Using a combination of  &lt;a href="https://source.android.com/devices/architecture/modular-system" target="_blank"&gt;Modular System Components&lt;/a&gt; through &lt;a href="https://support.google.com/product-documentation/answer/11412553" target="_blank"&gt;Google System Updates&lt;/a&gt; and &lt;a href="https://developers.google.com/android/guides/overview" target="_blank"&gt;Google Play services&lt;/a&gt;, it's supported back to &lt;a href="https://developer.android.com/reference/android/os/Build.VERSION_CODES#KITKAT" target="_blank"&gt;Android 4.4 (API level 19)&lt;/a&gt;. Integration requires just a few lines of code with the associated &lt;a href="https://developer.android.com/jetpack/androidx/releases/activity" target="_blank"&gt;Android Jetpack library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The developer preview &lt;a href="https://developer.android.com/reference/android/widget/photopicker/package-summary" target="_blank"&gt;includes new APIs&lt;/a&gt; that enable apps to embed the photo picker into their view hierarchy. This allows it to feel like a more integrated part of the app while still leveraging the process isolation that allows users to select media without the app needing overly-broad permissions. To maximize compatibility across platform versions and simplify your integration, you'll want to use the forthcoming Android Jetpack library if you wish to integrate the embedded photo picker.&lt;/p&gt;

&lt;h3&gt;Health records&lt;/h3&gt;

&lt;p&gt;The developer preview of Health Connect contains an early version of APIs supporting health records. This allows apps to read and write medical records in FHIR format with explicit user consent. This API is currently in an early access program. Sign up to be part of our &lt;a href="https://forms.gle/43HJz4Fm2UQLWy5W8" target="_blank"&gt;early access program&lt;/a&gt;.

&lt;/p&gt;&lt;h3&gt;Privacy Sandbox on Android&lt;/h3&gt;

&lt;p&gt;Android 16 incorporates the latest version of the &lt;a href="https://developers.google.com/privacy-sandbox/overview/android" target="_blank"&gt;Privacy Sandbox on Android&lt;/a&gt;, part of our ongoing work to develop technologies where users know their privacy is protected. Our &lt;a href="https://developer.android.com/design-for-safety/privacy-sandbox/program-overview" target="_blank"&gt;website has more&lt;/a&gt; about the Privacy Sandbox on Android developer beta program to help you get started. Check out the &lt;a href="https://developers.google.com/privacy-sandbox/private-advertising/sdk-runtime" target="_blank"&gt;SDK Runtime&lt;/a&gt; which allows SDKs to run in a dedicated runtime environment separate from the app they are serving, providing stronger safeguards around user data collection and sharing.&lt;/p&gt;

&lt;h3&gt;How to get ready&lt;/h3&gt;

&lt;p&gt;In addition to performing compatibility testing on the next major release, make sure that you're compiling your apps against the new SDK, and use the compatibility framework to enable &lt;span style="color: #0d904f; font-family: Courier;"&gt;targetSdkVersion&lt;/span&gt;-gated behavior changes as they become available for early testing.&lt;/p&gt;

&lt;h3&gt;App compatibility&lt;/h3&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A timeline shows the release stages of a product from November 2024 to the final release after April 2025." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxJjYTjZ-hHP2hPtBvkX2AH4TxOpKIq1Ml2QBlHxqNEg0pfItX6_0M9f1du8_xjJAev-bl2oiPaHZQRteNswfkbPwsqW3v3KqKpGeQS3Odit1bmNYq6WuKtNUqiVAXfoNj1lQO1oQGI6fb0jx45Vthj2WUQbaM0nbOezdgUVoorGeeBMVMTQyJ1f175fI/s1600/image1.png" width="640" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;The Android 16 Preview program runs from November 2024 until the final public release next year. At key development milestones, we'll deliver updates for your development and testing environments. Each update includes SDK tools, system images, emulators, API reference, and API diffs. We'll highlight critical APIs as they are ready to test in the preview program in blogs and on the &lt;a href="https://developer.android.com/about/versions/16" target="_blank"&gt;Android 16 developer website.&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;We’re targeting Late Q1 of 2025 for our Platform Stability milestone. At this milestone, we’ll deliver final SDK/NDK APIs and also final internal APIs and app-facing system behaviors. We’re expecting to reach Platform Stability in March 2025, and from that time you’ll have several months before the official release to do your final testing. Visit our Android Developers site for &lt;a href="https://developer.android.com/about/versions/16/overview#timeline" target="_blank"&gt;details on the release timeline&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Get started with Android 16&lt;/h3&gt;

&lt;p&gt;You can get started today with Developer Preview 1 by &lt;a href="https://developer.android.com/about/versions/16/get" target="_blank"&gt;flashing a system image&lt;/a&gt; and &lt;a href="https://developer.android.com/about/versions/16/setup-sdk" target="_blank"&gt;updating the tools&lt;/a&gt;. We're looking for your feedback so please &lt;a href="https://developer.android.com/about/versions/16/feedback" target="_blank"&gt;report issues and submit feature requests on the feedback page&lt;/a&gt;. The earlier we get your feedback, the more we can include in the final release.&lt;/p&gt;
  
&lt;p&gt;For the best development experience with Android 16, we recommend that you use the &lt;a href="https://developer.android.com/studio/preview" target="_blank"&gt;latest preview of the Android Studio Ladybug feature drop&lt;/a&gt;. Once you’re set up, here are some of the things you should do:&lt;/p&gt;
&lt;ul&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/16/feedback" target="_blank"&gt;feedback page&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Test your current app for compatibility, learn whether your app is affected by changes in Android 16, and install your app onto a device or emulator running Android 16 and extensively test it.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;We’ll update the preview system images and SDK regularly throughout the Android 16 release cycle. This initial preview release is for developers only and not intended for daily or consumer use, so we're making it available by manual download only. Once you’ve manually installed a preview build, you’ll automatically get future updates over-the-air for all later previews and Betas. Visit the Android developer website for &lt;a href="https://developer.android.com/about/versions/16/overview#pixel" target="_blank"&gt;further information on Android updates&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you've already installed Beta 1 from the &lt;a href="https://developer.android.com/about/versions/15/get-qpr" target="_blank"&gt;Android 15 QPR2 Beta program&lt;/a&gt;, you will not be able to move to the Android 16 Developer Preview program without wiping your device.  Consider avoiding installing future betas to transition to the next developer preview build without a data wipe.&lt;/p&gt; 

&lt;p&gt;As we reach our Beta releases, we'll be inviting consumers to try Android 16 as well, and we'll open up enrollment for Android 16 in the Android Beta program at that time.&lt;/p&gt;

&lt;p&gt;For complete information, visit the &lt;a href="https://developer.android.com/about/versions/16" target="_blank"&gt;Android 16 developer site&lt;/a&gt;.&lt;/p&gt;

















&lt;p&gt;&lt;/p&gt;</content><link href="http://android-developers.googleblog.com/feeds/5838119739692772310/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5838119739692772310" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5838119739692772310" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html" rel="alternate" title="The First Developer Preview of Android 16" 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/AVvXsEipxy9M_N_1ALvqd9gX2gr49EHwhZl5la4BL6IuD4HOQ6DYUAkIU3riaDVpFiLKFoCfW5PZk1gRfcp8o5DBmuayvSK3irYNGK0uyAkWS6lpLHQuUIO4ddYm88Q33bvMbcAGfTvn4ZqnIskRuMvOZh3WputmbIzxrdTH5Jzd79qXMh_1qIEzkwg6EWKNwxU/s72-c/A16DP1-Feature%20%281%29.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-283407399980775123</id><published>2024-11-18T09:30:00.000-08:00</published><updated>2024-12-14T17:49:04.531-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="app developer"/><category scheme="http://www.blogger.com/atom/ns#" term="Authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="credential manager"/><category scheme="http://www.blogger.com/atom/ns#" term="FIDO2"/><category scheme="http://www.blogger.com/atom/ns#" term="Identity"/><category scheme="http://www.blogger.com/atom/ns#" term="passkeys"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type="text">Welcome to Spotlight Week: Passkeys</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJVxF5gYZcIqi6mebL2EusA69IS_vuoUO5571XXP1PBEwRQzy8WshkP5fDK6AcQBQWakRa61qjmn8uz5nimIYO0vtQ2V_XmLPEM6ax_usgTf_Ba1Abwy09wAswaw_EnZWMPmJXTF5OxDXPmWmvGgDUNuFqMVJkzJZMhAEU5a62Z44ewX8lPWs3pS0gXo/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Metadata%20%282%29.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJVxF5gYZcIqi6mebL2EusA69IS_vuoUO5571XXP1PBEwRQzy8WshkP5fDK6AcQBQWakRa61qjmn8uz5nimIYO0vtQ2V_XmLPEM6ax_usgTf_Ba1Abwy09wAswaw_EnZWMPmJXTF5OxDXPmWmvGgDUNuFqMVJkzJZMhAEU5a62Z44ewX8lPWs3pS0gXo/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Metadata%20%282%29.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Joseph Lewis – Android Developer Relations Technical Writer, and Niharika Arora – Android Developer Relations Engineer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZrcQQMDzRnvgdB_K_BQTTneOrs1NC3gluhu0AtSsyacVkXWusKZF_qB6CKiS2Wq9IgnkGCCtC0BNiyHvVEADK1_5Yv78RoeI13XjvAouc8c8JqRgJMAEPzi9h8mv_42JnDCHm0SkjW3pu66RkHYPod_SryEA8D3DO7FZE6J2qvdkDPjoXICtMMS71a0Y/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Banner%20%281%29.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZrcQQMDzRnvgdB_K_BQTTneOrs1NC3gluhu0AtSsyacVkXWusKZF_qB6CKiS2Wq9IgnkGCCtC0BNiyHvVEADK1_5Yv78RoeI13XjvAouc8c8JqRgJMAEPzi9h8mv_42JnDCHm0SkjW3pu66RkHYPod_SryEA8D3DO7FZE6J2qvdkDPjoXICtMMS71a0Y/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Banner%20%281%29.png" /&gt;&lt;/a&gt;

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


&lt;p&gt;We're kicking off Spotlight Week with a deep dive into passkeys! This week we're partnering with the Chrome team to feature exciting announcements, insightful resources, and expert guidance on how to build seamless and secure authentication experiences for your apps.&lt;/p&gt;

&lt;p&gt;Throughout Spotlight Week: Passkeys, we'll share content to help you understand and implement passkeys effectively. Expect technical deep dives, best practices for user experience, case studies from successful implementations, and answers to your questions.&lt;/p&gt;


&lt;h3&gt;Here's what we'll cover during Spotlight Week: Passkeys:&lt;/h3&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Monday, Nov 18: Get started with passkeys&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;We'll start off the week with resources to help you begin passkey integration. Check out these resources to get started!&lt;/p&gt;

&lt;p&gt;Key resources include a quick &lt;a href="https://goo.gle/passkeys-4min-video" target="_blank"&gt;video on passkey basics&lt;/a&gt;, updated &lt;a href="https://developer.android.com/design/ui/mobile/guides/patterns/passkeys" target="_blank"&gt;UX guidelines&lt;/a&gt; for Credential Manager and passkeys, and an in-depth &lt;a href="https://developers.google.com/identity/passkeys/developer-guides/server-registration" target="_blank"&gt;server-side implementation&lt;/a&gt; guide. We will introduce you to the &lt;a href="https://developer.android.com/identity" target="_blank"&gt;Identity hub&lt;/a&gt;, a comprehensive resource for passkeys, passwords, Sign in with Google, authorization, and much more.&lt;/p&gt;&lt;br /&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/2xdV-xut7EQ" width="100%" youtube-src-id="2xdV-xut7EQ"&gt;&lt;/iframe&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Understand passkeys in 4 minutes&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;br/&gt;


&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Tuesday, Nov 19: Updated passkeys developer guides&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;We'll share updated passkeys developer guidance, including migration guides, a new troubleshooting guide, and more. Highlights include a guide on &lt;a href="https://android-developers.googleblog.com/2024/09/streamlining-android-authentication-credential-manager-replaces-legacy-apis.html" target="_blank"&gt;migrating from legacy APIs&lt;/a&gt; to Credential Manager, technical details on &lt;a href="https://android-developers.googleblog.com/2024/09/attestation-format-change-for-android-fido2-api.html" target="_blank"&gt;FIDO2 attestation format changes&lt;/a&gt;, and a &lt;a href="https://developer.android.com/identity/sign-in/credential-manager-troubleshooting-guide" target="_blank"&gt;troubleshooting guide&lt;/a&gt; for common Credential Manager errors.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Developers can also share &lt;a href="https://forms.gle/KCWxdkyVkoPU8Tcg6" target="_blank"&gt;feedback&lt;/a&gt; through a passkeys survey to influence future improvements.&lt;/p&gt;&lt;br /&gt;


&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Wednesday, Nov 20: New Credential Manager features&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt; 

&lt;p&gt;We'll go over some of the new Credential Manager capabilities, including improvements to autofill, single-tap sign-in, and the new Restore Credentials feature. Key updates include &lt;a href="https://developer.android.com/identity/autofill/credential-manager-autofill" target="_blank"&gt;showing Credential Manager results as autofill suggestions&lt;/a&gt;, &lt;a href="https://developer.android.com/identity/sign-in/single-tap-biometric" target="_blank"&gt;single-tap sign-in&lt;/a&gt;, &lt;a href="https://developer.chrome.com/docs/identity/webauthn-signal-api" target="_blank"&gt;Signal API&lt;/a&gt; for Chrome desktop and a &lt;a href="https://developer.android.com/identity/sign-in/restore-credentials" target="_blank"&gt;Restore Credentials&lt;/a&gt; feature, which allows users to conveniently recover their saved login information in case of device loss or upgrades, ensuring uninterrupted access to their accounts. With Android 15, these additions streamline user authentication and reinforce security, making it easier for users to manage and access their credentials securely.&lt;/p&gt;&lt;br /&gt;


&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Thursday, Nov 21: Passkeys #AskAndroid&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt; 

&lt;p&gt;On Thursday at 9AM PT Spotlight Week: Passkeys will feature an &lt;a href="https://youtube.com/live/HvyIcPfS18s?feature=share" target="_blank"&gt;#AskAndroid&lt;/a&gt; session to address your most pressing passkey questions. We'll also share case studies with &lt;a href="https://web.dev/case-studies/tokyu-passkeys" target="_blank"&gt;Tokyu&lt;/a&gt; and &lt;a href="https://android-developers.googleblog.com/2024/11/x-improved-login-success-rate-after-adopting-passkeys.html" target="_blank"&gt;X&lt;/a&gt;, highlighting their successful deployments of passkey authentication.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Watch the live stream:&lt;/b&gt;

&lt;iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="HvyIcPfS18s" width="100%" height="413" src="https://www.youtube.com/embed/HvyIcPfS18s"&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Friday, Nov 22: Learn more about passkeys&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;We'll close out the week with learning pathways for passkeys on &lt;a href="https://developer.android.com/courses/pathways/passkeys" target="_blank"&gt;Android&lt;/a&gt; and &lt;a href="https://developers.google.com/learn/pathways/passkeys_web" target="_blank"&gt;Chrome&lt;/a&gt;, insights from partners, and a new &lt;a href="https://github.com/android/identity-samples/tree/credman-compose/Shrine" target="_blank"&gt;Compose sample app&lt;/a&gt; for Credential Manager with Android best practices and built using Compose.&lt;/p&gt;&lt;br /&gt;


&lt;p&gt;We hope you'll join us in exploring these resources to learn how to elevate your app's security and user experience. We're excited to share this journey with you!&lt;/p&gt;


</content><link href="http://android-developers.googleblog.com/feeds/283407399980775123/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/283407399980775123" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/283407399980775123" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html" rel="alternate" title="Welcome to Spotlight Week: Passkeys" 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/AVvXsEguJVxF5gYZcIqi6mebL2EusA69IS_vuoUO5571XXP1PBEwRQzy8WshkP5fDK6AcQBQWakRa61qjmn8uz5nimIYO0vtQ2V_XmLPEM6ax_usgTf_Ba1Abwy09wAswaw_EnZWMPmJXTF5OxDXPmWmvGgDUNuFqMVJkzJZMhAEU5a62Z44ewX8lPWs3pS0gXo/s72-c/AndroidSpotlightWeek_Passkey_AnnounceBlog_Metadata%20%282%29.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-9003983144135351161</id><published>2024-11-13T09:00:00.000-08:00</published><updated>2024-11-13T09:02:12.392-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Emulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio Emulator"/><category scheme="http://www.blogger.com/atom/ns#" term="androidstudio"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="emulator"/><category scheme="http://www.blogger.com/atom/ns#" term="Problem-Solving"/><category scheme="http://www.blogger.com/atom/ns#" term="Studio Bot"/><title type="text">A Smoother Ride: Android Emulator Stability and Performance Updates</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3EQV5j-ddJhvUjwyJgHmpQkLE-qfgaRaQyBr5f29cOgm8Q6pQ5_yDEVLGTsX-WQaYlBvflq5J4ywoNLLEGtlerHYhyphenhyphenRGjsDH4hq-HTsmWf5Q74iH2qHJ3mkNKqep83s3gg6Tt-koewlbA3bAZY_PvWds1nbEWMjPjyarZlncLH4DlC1PjlMQ0FpdL1UA/s1600/Making-security-easy--How-we-are-helping-developers-fix-vulnerabilities-social.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3EQV5j-ddJhvUjwyJgHmpQkLE-qfgaRaQyBr5f29cOgm8Q6pQ5_yDEVLGTsX-WQaYlBvflq5J4ywoNLLEGtlerHYhyphenhyphenRGjsDH4hq-HTsmWf5Q74iH2qHJ3mkNKqep83s3gg6Tt-koewlbA3bAZY_PvWds1nbEWMjPjyarZlncLH4DlC1PjlMQ0FpdL1UA/s1600/Making-security-easy--How-we-are-helping-developers-fix-vulnerabilities-social.png" style="display: none;" /&gt;

&lt;p&gt;&lt;em&gt;Posted by Neville Sicard-Gregory – Senior Product Manager, Android Studio&lt;/em&gt;&lt;/p&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPf66eBB0y6lfopevRS37fYQbDd5SL7TbEA-V4SY2jd9NMC8VIkZaRZ25-GIJ73Bk8EqwiP6oZ7NewPEaoip5Jw-6WcRm3qeOWEsKpdipRJ-uLIJk42DcE60Vo1n6_3ln7Hs8oELO2wxbmVDfQwCvl8UbTyCcPKZQkeDpUQWj6gyhs8aM9grx4jr1jqEg/s1600/Making-security-easy--How-we-are-helping-developers-fix-vulnerabilities-header.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPf66eBB0y6lfopevRS37fYQbDd5SL7TbEA-V4SY2jd9NMC8VIkZaRZ25-GIJ73Bk8EqwiP6oZ7NewPEaoip5Jw-6WcRm3qeOWEsKpdipRJ-uLIJk42DcE60Vo1n6_3ln7Hs8oELO2wxbmVDfQwCvl8UbTyCcPKZQkeDpUQWj6gyhs8aM9grx4jr1jqEg/s1600/Making-security-easy--How-we-are-helping-developers-fix-vulnerabilities-header.png" /&gt;&lt;/a&gt;

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

&lt;p&gt;Looking for a more stable, reliable, and performant Emulator? Download the latest version of Android Studio or ensure your Emulator is up to date in the SDK Manager.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="A split screen shows Kotlin code on the left and the corresponding Android app display on the right in Android Studio. The app displays the Google Play Store, Photos, YouTube, Gmail, and Chrome icons." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpdPMYzsht4pIoeqviDpgLRLjAXLfYU2twrwePnR5UFZws1R0UEjrI_3L913K9Y0acJJE4wWAAwlLobWUB0fu3K6xdb_TkiEkR1Ut3wx9VYsda2IXDNvWnrH5dOrE4I5uBA5kYX7zlm-HDB3cFsQsN-4t9rT8ExXiEjRpnhgUPcPaTWnb_dY8OMjB2eXA/s1600/image2.png"  width="640"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;p&gt;We know how critical the stability, reliability, and performance of the Android Emulator is to your everyday work as an Android developer. After listening to valuable feedback about stability, reliability, and performance, the Android Studio team took a step back from large feature work on the Android Emulator for six months and started an initiative called Project Quartz. This initiative was made up of several workstreams aimed at reducing crashes, speeding up startup time, closing out bugs, and setting up better ways to detect and prevent issues in the future.&lt;/p&gt;

&lt;h3&gt;Improved stability and reliability&lt;/h3&gt;

&lt;p&gt;A key goal of Project Quartz aimed to reduce Emulator crashes, which can frustrate and block developers, decreasing their productivity. We focused on fixing issues causing backend and UI crashes and freezes, updated the UI framework, updated our hypervisor framework, and our graphics libraries, and eliminated tech debt. This included:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Moving to a newer version of Qt, the cross-platform framework  for building the graphical user interfaces of the Android Emulator, and making it stable on all platforms (as of version 34.2.13/ This was also a required change to ensure things like Google Maps and the location settings UI continued to work in the Android Emulator.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
  &lt;li&gt;Updating &lt;span style="color:#OD904F ; font-family:Courier"&gt;gfxstream&lt;/span&gt;, the graphics rendering system used in the Android Emulator,  to improve our graphics layer.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
&lt;li&gt;Adding more than 600 end-to-end tests to the existing &lt;span style="color:#OD904F ; font-family:Courier"&gt;pytests&lt;/span&gt; test suite.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;
  
&lt;p&gt;As a result, we have seen &lt;b&gt;30% fewer crashes&lt;/b&gt; in the latest stable version of Android Studio, as reported by developers who have opted-in to sharing crash details with us. Along with additional end-to-end testing, this means a more stable, reliable, and higher quality experience with fewer interruptions while using the Android Emulator to test your apps.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="A horizontal bar graph showing performance times of different versions of the Android emulator in milliseconds " border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW-yvJUVqTo896U1BfH3uxjIIbNI8znvZ_7K2moj-Ccsnh1wDW9ZWa9BtZZ21yR_Cr3boilSqUpRQDlrnhpIkBSjDPLIqb1dByqNV8A1RDi9n3dwTh25-lFSbZI9JXCcuIUOBnzNBF0F0pOvkfH8feGGdlWh50WBfmb6H1ApEuHojb-ahrwd8kPgLrbx4/s1600/image1.png"  width="640"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;p&gt;This chart illustrates the reduction in reported crashes by stable versions of the Android Emulator (newer versions are at the top and shorter is better).&lt;/p&gt;

&lt;p&gt;We have also enhanced our opt-in telemetry and logging to better understand and identify the root causes of crashes, and added more testing to our pre-launch release process to improve our ability to detect potential issues prior to release.&lt;/p&gt;

&lt;h3&gt;Improved release quality&lt;/h3&gt;

&lt;p&gt;We also implemented several measures to improve release quality, including increasing the number and frequency of end-to-end, automated, and integration tests on macOS, Microsoft Windows, and Linux. Now, more than 1,100 end-to-end tests are ran in postsubmit, up from 500 tests in the past implementation, on all supported operating system platforms .  These tests cover various scenarios, including (among other features) different Android Emulator snapshot configurations, diverse graphics card considerations , networking and Bluetooth functionality, and performance benchmarks between Android Emulator system image versions.&lt;/p&gt;

&lt;p&gt;This comprehensive testing ensures these critical components function correctly and translates to a more reliable testing environment for developers.  As a result, Android app developers can accurately assess their app's behavior in a wider range of scenarios.&lt;/p&gt;

&lt;h3&gt;Reduced open issues and bugs&lt;/h3&gt;

&lt;p&gt;It was also important for us to reduce the number of open issues and bugs logged for the Android Emulator by addressing their root cause and ensuring we cover more of the use cases you run into in production.  During Project Quartz, we &lt;b&gt;reduced our open issues by 43.5%&lt;/b&gt; from 4,605 to 2,605. 17% of these were actively fixed during Quartz and the remaining were closed as either obsoleted or previously fixed (e.g. in an earlier version of the Android Emulator) or duplicates of other issues.&lt;/p&gt;

&lt;h3&gt;Next Steps&lt;/h3&gt;

&lt;p&gt;While these improvements are exciting, it's not the end. We will continue to build on the quality improvements from Project Quartz to further enhance the Android Emulator experience for Android app developers.&lt;/p&gt; 

&lt;p&gt;As always, your feedback has and continues to be invaluable in helping us make the Android Emulator and Android Studio more robust and effective for your development needs. Sharing your metrics and crashdumps is crucial in helping us understand what specifically causes your crashes so we can prioritize fixes.&lt;/p&gt;

&lt;p&gt;You can opt-in by going to Settings, then Appearance and Behavior, then System Settings, then Data Sharing, and selecting the checkbox marked ‘Send usage statistics to Google.'&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="The Android Studio settings menu displays the Data Sharing settings page, where 'Send usage statistics to Google' option is selected." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3pm5UI2AhYd7j8mRXwq8ex7zx76vWnYj6H-693i_3dQWwey1CBMXsyoXIx5EzVhlGBQR0tXt7cRGmKLDSW515UWHIlQz7pJQU8oN6XzlOEXcBUz_fyaW8A-yOX3LssfAggwT1-EFm0MNQgy0rDxfEZsjIFimfFjrg3xshTz_1ziw45SgeXJJd9nw0YKk/s1600/image4.png"  width="640"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;p&gt;Be sure to download the latest version of the Android Emulator alongside &lt;a href="https://developer.android.com/studio/preview" target="_blank"&gt;Android Studio&lt;/a&gt; to experience these improvements.&lt;/p&gt;

&lt;p&gt;As always, your feedback is important to us – check &lt;a href="https://developer.android.com/studio/known-issues" target="_blank"&gt;known issues&lt;/a&gt;, &lt;a href="https://developer.android.com/studio/report-bugs" target="_blank"&gt;report bugs&lt;/a&gt;, suggest improvements, 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;. Together, we can create incredible Android experiences for users worldwide!&lt;/p&gt;


</content><link href="http://android-developers.googleblog.com/feeds/9003983144135351161/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/android-emulator-stability-performance-updates.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/9003983144135351161" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/9003983144135351161" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/android-emulator-stability-performance-updates.html" rel="alternate" title="A Smoother Ride: Android Emulator Stability and Performance Updates" 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/AVvXsEg3EQV5j-ddJhvUjwyJgHmpQkLE-qfgaRaQyBr5f29cOgm8Q6pQ5_yDEVLGTsX-WQaYlBvflq5J4ywoNLLEGtlerHYhyphenhyphenRGjsDH4hq-HTsmWf5Q74iH2qHJ3mkNKqep83s3gg6Tt-koewlbA3bAZY_PvWds1nbEWMjPjyarZlncLH4DlC1PjlMQ0FpdL1UA/s72-c/Making-security-easy--How-we-are-helping-developers-fix-vulnerabilities-social.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2348654077385368928</id><published>2024-11-12T13:00:00.000-08:00</published><updated>2024-11-12T13:00:06.743-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App Security"/><category scheme="http://www.blogger.com/atom/ns#" term="Apps"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Tools"/><category scheme="http://www.blogger.com/atom/ns#" term="developers"/><category scheme="http://www.blogger.com/atom/ns#" term="ecosystem"/><category scheme="http://www.blogger.com/atom/ns#" term="financial management"/><category scheme="http://www.blogger.com/atom/ns#" term="Games"/><category scheme="http://www.blogger.com/atom/ns#" term="Global"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="growth"/><category scheme="http://www.blogger.com/atom/ns#" term="Onboarding"/><category scheme="http://www.blogger.com/atom/ns#" term="policy compliance"/><category scheme="http://www.blogger.com/atom/ns#" term="regulations"/><category scheme="http://www.blogger.com/atom/ns#" term="Resources"/><category scheme="http://www.blogger.com/atom/ns#" term="taxes"/><category scheme="http://www.blogger.com/atom/ns#" term="trust"/><title type="text">Unlock global growth with Google Play's tax and compliance initiatives</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga3nNXx4_ekEn3B5GVlR93pTllRD1MEd5PPU1gZG87nDDaYXGKefCmtx3bykDgDWcw5bFDGjyYYPKDD9Fn-7Qs1Y937mYKz_NG-ps4LnlFktyxEVFq3BpRL9UzDfO6vBWAlAibW8Ta4kdjNMDP-s0p1GCysRcAyVsx6dntNXar3BKaPbpc9xjW1WgZNKM/s1600/Play%20-%20User%20choice%20billing-%20APIs%20expansion-01.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga3nNXx4_ekEn3B5GVlR93pTllRD1MEd5PPU1gZG87nDDaYXGKefCmtx3bykDgDWcw5bFDGjyYYPKDD9Fn-7Qs1Y937mYKz_NG-ps4LnlFktyxEVFq3BpRL9UzDfO6vBWAlAibW8Ta4kdjNMDP-s0p1GCysRcAyVsx6dntNXar3BKaPbpc9xjW1WgZNKM/s1600/Play%20-%20User%20choice%20billing-%20APIs%20expansion-01.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Aditya Pathak – Product Manager, Google Play&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZvkktGwM5bdA1hZHnEPy7RsjMkRlQjJ1QShJgMDWXojmqU1F_JhtQ-xbHDPke9tEemu_ET6VKxNj6fNHtkokLjju-oMUJurzvr8JF_q1aeiYJ6wzAQMjN-mLhgDljXUBZSp7yCDIrT7UY_kUGtV_pEV92guA_ZvrR4d4Eeu6S7uXkeGrPPLXZ6AZGZsY/s1600/Play%20-%20User%20choice%20billing-%20APIs%20expansion-02.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZvkktGwM5bdA1hZHnEPy7RsjMkRlQjJ1QShJgMDWXojmqU1F_JhtQ-xbHDPke9tEemu_ET6VKxNj6fNHtkokLjju-oMUJurzvr8JF_q1aeiYJ6wzAQMjN-mLhgDljXUBZSp7yCDIrT7UY_kUGtV_pEV92guA_ZvrR4d4Eeu6S7uXkeGrPPLXZ6AZGZsY/s1600/Play%20-%20User%20choice%20billing-%20APIs%20expansion-02.png" /&gt;&lt;/a&gt;

&lt;p&gt;We know how complex it can be to navigate the ever-changing landscape of commerce and payments, especially when it comes to global tax and regulatory compliance. In just two years, we've seen a significant increase in the number of new regulations impacting Google Play developers.&lt;/p&gt;
  
&lt;p&gt;By partnering with Google Play, you're not just accessing a global marketplace serving over 190 countries; you're joining a powerful ecosystem built on security and trust. We understand the challenges these regulatory changes present, and we're here to support your growth every step of the way. That's why at Google Play, our teams work tirelessly behind the scenes to make compliance easier for you, providing a safe, trusted, and thriving marketplace for you and your users.&lt;/p&gt;


&lt;h3&gt;Scaling a trusted ecosystem globally&lt;/h3&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Simplified Compliance:&lt;/b&gt; We have tools and resources to help you navigate international regulations, including consumer protection and payment compliance, so you can focus on building innovative apps and reaching a wider audience.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
&lt;li&gt;&lt;b&gt;Security and Trust:&lt;/b&gt; We prioritize user safety with the best of Google's technology. Our &lt;a href="https://developers.google.com/android/play-protect" target="_blank"&gt;Play Protect service&lt;/a&gt; scans billions of apps daily, and we prevented over $4 billion in fraudulent and abusive transactions in 2022 and 2023 combined. We also continue to invest in innovative features like passwordless risk-based authentication for purchases in Korea that helps prevent fraudulent purchases. This commitment to security builds consumer trust and confidence in Play and the broader Android ecosystem, which ultimately helps all developers succeed.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
  

&lt;h3&gt;Unifying a platform for growth and efficiency&lt;/h3&gt;

&lt;p&gt;We're committed to investing in a seamless and efficient experience for developers on Google Play. Our platform helps you grow your business; here's how:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Flexible Tax Platform:&lt;/b&gt; We're simplifying your tax management by streamlining processes, providing clear guidance, and automating where possible so you can focus on building great apps. For example, in response to recent regulations, we're helping apply lower withholding tax rates to qualifying developers located in India, directly boosting their take-home earnings.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
&lt;li&gt;&lt;b&gt;Streamlined Onboarding:&lt;/b&gt; Our flexible onboarding process guides you through various global compliance requirements, ensuring a smooth and efficient start.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
&lt;li&gt;&lt;b&gt;Effortless Accounting:&lt;/b&gt; Gain clear insights into your earnings and transactions with our powerful tools and tailored reports, empowering you to make informed business decisions.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
  
&lt;li&gt;&lt;b&gt;Enhanced User Conversion:&lt;/b&gt; We're always finding ways to make it easier for users to subscribe to your service, buy your app or make in-app purchases. For example, we're helping more users store their payment information so they can make purchases with a single tap. We're also adding experimentation features to help you test buy flows and optimize user conversions.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;br/&gt;

&lt;p&gt;We're dedicated to supporting your growth in an ever-changing regulatory landscape and are constantly working to make Google Play the best platform for developers to thrive. Stay tuned for updates on new features, tools, and resources designed to help you grow your business and navigate the evolving apps and games landscape.&lt;/p&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;
 How useful did you find this blog post? 
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;
&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;amp;entry.2056663615&amp;amp;entry.646747778=changeme-mm/yy" target="_blank"&gt;★&lt;/a&gt;
  &lt;/center&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"&gt;&lt;img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;


</content><link href="http://android-developers.googleblog.com/feeds/2348654077385368928/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/unlocking-global-growth-google-play-makes-business-easy.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2348654077385368928" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2348654077385368928" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/unlocking-global-growth-google-play-makes-business-easy.html" rel="alternate" title="Unlock global growth with Google Play's tax and compliance initiatives" 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/AVvXsEga3nNXx4_ekEn3B5GVlR93pTllRD1MEd5PPU1gZG87nDDaYXGKefCmtx3bykDgDWcw5bFDGjyYYPKDD9Fn-7Qs1Y937mYKz_NG-ps4LnlFktyxEVFq3BpRL9UzDfO6vBWAlAibW8Ta4kdjNMDP-s0p1GCysRcAyVsx6dntNXar3BKaPbpc9xjW1WgZNKM/s72-c/Play%20-%20User%20choice%20billing-%20APIs%20expansion-01.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-117413297579813231</id><published>2024-11-11T09:00:00.000-08:00</published><updated>2024-11-11T09:00:00.116-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#PasskeysWeek #Identity"/><category scheme="http://www.blogger.com/atom/ns#" term="Authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="Identity"/><category scheme="http://www.blogger.com/atom/ns#" term="passkeys"/><category scheme="http://www.blogger.com/atom/ns#" term="PasskeysWeek"/><title type="text">Passkeys Spotlight Week begins November 18th</title><content type="html">&lt;meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJVxF5gYZcIqi6mebL2EusA69IS_vuoUO5571XXP1PBEwRQzy8WshkP5fDK6AcQBQWakRa61qjmn8uz5nimIYO0vtQ2V_XmLPEM6ax_usgTf_Ba1Abwy09wAswaw_EnZWMPmJXTF5OxDXPmWmvGgDUNuFqMVJkzJZMhAEU5a62Z44ewX8lPWs3pS0gXo/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Metadata%20%282%29.png"&gt;
&lt;img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJVxF5gYZcIqi6mebL2EusA69IS_vuoUO5571XXP1PBEwRQzy8WshkP5fDK6AcQBQWakRa61qjmn8uz5nimIYO0vtQ2V_XmLPEM6ax_usgTf_Ba1Abwy09wAswaw_EnZWMPmJXTF5OxDXPmWmvGgDUNuFqMVJkzJZMhAEU5a62Z44ewX8lPWs3pS0gXo/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Metadata%20%282%29.png"&gt;

&lt;em&gt;Posted by Joseph Lewis – Technical Writer, Android Developer Relations&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZrcQQMDzRnvgdB_K_BQTTneOrs1NC3gluhu0AtSsyacVkXWusKZF_qB6CKiS2Wq9IgnkGCCtC0BNiyHvVEADK1_5Yv78RoeI13XjvAouc8c8JqRgJMAEPzi9h8mv_42JnDCHm0SkjW3pu66RkHYPod_SryEA8D3DO7FZE6J2qvdkDPjoXICtMMS71a0Y/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Banner%20%281%29.png" imageanchor="1" &gt;&lt;img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZrcQQMDzRnvgdB_K_BQTTneOrs1NC3gluhu0AtSsyacVkXWusKZF_qB6CKiS2Wq9IgnkGCCtC0BNiyHvVEADK1_5Yv78RoeI13XjvAouc8c8JqRgJMAEPzi9h8mv_42JnDCHm0SkjW3pu66RkHYPod_SryEA8D3DO7FZE6J2qvdkDPjoXICtMMS71a0Y/s1600/AndroidSpotlightWeek_Passkey_AnnounceBlog_Banner%20%281%29.png" data-original-width="1058" data-original-height="800" /&gt;&lt;/a&gt;

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

&lt;p&gt;Tired of headaches with passwords? Ready for a future where online authentication is both faster and more secure? Then mark your calendars for Passkeys Week, &lt;b&gt;November 18-22&lt;/b&gt;! Passkeys are an easier and more secure alternative to passwords, and are increasingly becoming the industry standard. Google is proud to support passkeys across Chrome, Android and beyond.&lt;/p&gt;

&lt;p&gt;Part of our Spotlight Weeks series, this is your opportunity to dive deep into the world of passkeys – the revolutionary technology poised to replace passwords for good. Whether you're an Android or web developer, a security researcher, or just curious about the future of online identity, this week has something for you.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;What are passkeys?&lt;/b&gt; They're a new type of credential that are far more secure than passwords and much easier to use. Imagine logging in with your device lock you already have set up, such as a fingerprint scan or a face scan, instead of typing out a complex string of characters. No password is used or stored on a server that could be compromised, keeping you safe from phishing attacks. And since there's no password, there' s no arcane string of characters to remember. That's the power of passkeys.&lt;/p&gt;

&lt;h3&gt;What you'll get out of Passkeys Spotlight Week&lt;/h3&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Gain expert insights:&lt;/b&gt; Join a video roundtable with Google identity experts to hear how passkeys are transforming the sign-in experience. Ask your questions on social media tagged with &lt;b&gt;#PasskeysWeek&lt;/b&gt;, or &lt;a href="https://forms.gle/KCWxdkyVkoPU8Tcg6" target="_blank"&gt;submit your questions using our form&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Sharpen your skills:&lt;/b&gt; Explore informative blog posts and practical code samples to learn how to integrate passkeys into your own Android apps and websites.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Discover cross-platform solutions:&lt;/b&gt; See how passkeys work seamlessly across different operating systems and devices for a unified login experience.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Stay ahead of the curve:&lt;/b&gt; Get the latest updates on passkey advancements and learn about modern identity integration solutions.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;We're showcasing content designed to enhance your developer experience and help you get started with adopting passkeys. These items will include:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;In-depth blog posts covering various aspects of passkey implementation and best practices.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Practical code samples to help you get started with passkeys integration.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;A video roundtable where we answer your questions about passkeys, answered by Google experts.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Case studies from developers who have already implemented passkeys.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;
  
&lt;h3&gt;How to participate&lt;/h3&gt;

&lt;p&gt;Passkeys Spotlight Week will happen entirely online at &lt;a href="https://web.dev/" target="_blank"&gt;web.dev&lt;/a&gt;, &lt;a href="http://developer.chrome.com" target="_blank"&gt;developer.chrome.com&lt;/a&gt; and &lt;a href="http://d.android.com" target="_blank"&gt;developer.android.com&lt;/a&gt;, and across Android and Chrome's Developer’s social media channels:&lt;/p&gt; 

&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@ChromeDevs" target="_blank"&gt;Chrome Developers on YouTube&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://www.youtube.com/@AndroidDevelopers" target="_blank"&gt;Android Developers on YouTube&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/chromiumdev" target="_blank"&gt;Chrome for Developers on X&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://twitter.com/androiddev" target="_blank"&gt;Android Developers on X&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;li&gt;&lt;a href="https://www.linkedin.com/showcase/chrome-for-developers" target="_blank"&gt;Chrome Developers on LinkedIn&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/showcase/androiddev" target="_blank"&gt;Android Developers on LinkedIn&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt; 
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;Follow us for the latest updates, spread the word about Passkeys Spotlight Week, and use &lt;b&gt;#PasskeysWeek&lt;/b&gt; on your favorite social media platforms to ask questions and share your passkeys projects with the community. Check the &lt;a href="https://developer.android.com/identity" target="_blank"&gt;Android Identity developer page&lt;/a&gt; on &lt;b&gt;Monday, November 18, 2024&lt;/b&gt; to read our next blog post with full details! &lt;/p&gt;

&lt;p&gt;Don't miss this opportunity to learn from the best and be part of the passwordless revolution. Join us for Passkeys Spotlight Week and help shape the future of online authentication!&lt;/p&gt;

</content><link href="http://android-developers.googleblog.com/feeds/117413297579813231/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/android-passkeys-spotlight-week-begins-november-18.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/117413297579813231" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/117413297579813231" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/11/android-passkeys-spotlight-week-begins-november-18.html" rel="alternate" title="Passkeys Spotlight Week begins November 18th" 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/AVvXsEguJVxF5gYZcIqi6mebL2EusA69IS_vuoUO5571XXP1PBEwRQzy8WshkP5fDK6AcQBQWakRa61qjmn8uz5nimIYO0vtQ2V_XmLPEM6ax_usgTf_Ba1Abwy09wAswaw_EnZWMPmJXTF5OxDXPmWmvGgDUNuFqMVJkzJZMhAEU5a62Z44ewX8lPWs3pS0gXo/s72-c/AndroidSpotlightWeek_Passkey_AnnounceBlog_Metadata%20%282%29.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7958185843340107791</id><published>2024-10-31T10:00:00.000-07:00</published><updated>2024-10-31T10:00:00.110-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#TheAndroidShow"/><title type="text">#TheAndroidShow: live from Droidcon, including the biggest update to Gemini in Android Studio and more SDK releases for Android! </title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG4NSTzVyjQm-1DrUdd3c7J_t9HV7S8dhSXHsytGzsMiNzeYVzlaWUKgSBD50YbyQ-svdDR90Olg9AKB2QJsaWfNpHUVvhidE1ZK6EfTCUA5W_j53H8JUf7jCExabcneKmZBT-bQ9Slo_mOoWapg-UdP4pfFR0vrEqncYz2hld8z9pYTCgoyCIxdrzKxI/s1600/013-AfD-%23TheAndroidShow-Header-Size-2-Animation.gif" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG4NSTzVyjQm-1DrUdd3c7J_t9HV7S8dhSXHsytGzsMiNzeYVzlaWUKgSBD50YbyQ-svdDR90Olg9AKB2QJsaWfNpHUVvhidE1ZK6EfTCUA5W_j53H8JUf7jCExabcneKmZBT-bQ9Slo_mOoWapg-UdP4pfFR0vrEqncYz2hld8z9pYTCgoyCIxdrzKxI/s1600/013-AfD-%23TheAndroidShow-Header-Size-2-Animation.gif" style="display: none;" /&gt;

&lt;em&gt;Posted by Matthew McCullough – Vice President, Product Management, Android Developer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfWkBipBfWxSLBSJaEa3yVgOrdlNwbyYanIh7rG6yK-nOurmw8nmlVtNL1hhHtnm31fq1_h7v-OCodnFIfx3SRGMUh0cTCZFaYtFnHEWL3R7AW5IxmDqbqXYDMYRujdGqj3CnRfx6MNfhxb5tzDCkkzufwn_NTwNyXyj_frmA_YfLHHOlgAEgYBuTJI9M/s1600/013-AfD-%23TheAndroidShow-Header-Size-1-Animation.gif"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfWkBipBfWxSLBSJaEa3yVgOrdlNwbyYanIh7rG6yK-nOurmw8nmlVtNL1hhHtnm31fq1_h7v-OCodnFIfx3SRGMUh0cTCZFaYtFnHEWL3R7AW5IxmDqbqXYDMYRujdGqj3CnRfx6MNfhxb5tzDCkkzufwn_NTwNyXyj_frmA_YfLHHOlgAEgYBuTJI9M/s1600/013-AfD-%23TheAndroidShow-Header-Size-1-Animation.gif" /&gt;&lt;/a&gt;

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

&lt;p&gt;We just dropped our Fall episode of #TheAndroidShow, on &lt;a href="https://www.youtube.com/live/iKTgKGeTRzg?si=J-TlbAFSWMIVcB5x" target="_blank"&gt;YouTube&lt;/a&gt; and on &lt;a href="http://developer.android.com/events/show" target="_blank"&gt;developer.android.com&lt;/a&gt;, and this time are live from Droidcon in London, giving you the latest in Android Developer news including the biggest update to Gemini in Android Studio as well as sharing that there will be more frequent SDK releases for Android, including two next year. Let’s dive in!&lt;/p&gt;&lt;br /&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/iKTgKGeTRzg" width="100%" youtube-src-id="iKTgKGeTRzg"&gt;&lt;/iframe&gt;&lt;br /&gt;

&lt;h3&gt;Gemini in Android Studio: now helping you at every stage of the development cycle&lt;/h3&gt;

&lt;p&gt;AI has the ability to accelerate your development experience, and help you be more productive. That's why we introduced Gemini in Android Studio, your AI-powered development companion, designed to make it easier and faster for you to build high quality Android apps, faster. Today, we're launching &lt;a href="https://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html" target="_blank"&gt;the biggest set of updates to Gemini in Android Studio since launch&lt;/a&gt;: now for the first time, Gemini brings the power of AI with features at every stage of the development lifecycle, directly into your Android Studio IDE experience.&lt;/p&gt;&lt;br /&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/ZfIE-LATgH4" width="100%" youtube-src-id="ZfIE-LATgH4"&gt;&lt;/iframe&gt;&lt;br /&gt;


&lt;h3&gt;More frequent Android SDK releases starting next year&lt;/h3&gt;

&lt;p&gt;Android has always worked to get innovation in the hands of users faster. In addition to our annual platform releases, we’ve invested in &lt;a href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html" target="_blank"&gt;Project Treble&lt;/a&gt;, &lt;a href="https://source.android.com/docs/core/ota/modular-system" target="_blank"&gt;Mainline&lt;/a&gt;, &lt;a href="https://developer.android.com/distribute/play-services" target="_blank"&gt;Google Play services&lt;/a&gt;, monthly security updates, and the quarterly releases that help power Pixel's popular feature drop updates. Building off the success those quarterly Pixel releases have had towards bringing innovation faster to Pixel users, Android will have more frequent SDK releases going forward, with two releases planned in 2025 with new developer APIs. These releases will help to drive faster innovation in apps and devices, with higher stability and polish for users and developers. &lt;a href="https://android-developers.googleblog.com/2024/10/android-sdk-release-update.html" target="_blank"&gt;Stay informed on upcoming releases for the 2025 calendar&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/tU9-p4jME_w" width="100%" youtube-src-id="tU9-p4jME_w"&gt;&lt;/iframe&gt;&lt;br /&gt;



&lt;h3&gt;Make the investment in adaptive, for Large Screens: 20% increased app spend&lt;/h3&gt;

&lt;p&gt;Your users, especially in the premium segment, don’t just buy a phone anymore, they buy into a whole ecosystem of devices. So the experiences you build should follow your users seamlessly across the many screens they own. &lt;a href="https://developer.android.com/large-screens/gallery" target="_blank"&gt;Take large screens, for instance&lt;/a&gt; – foldables, tablets, ChromeOS Devices: there are now over 300 million active Android large-screen devices. This summer, &lt;a href="https://android-developers.googleblog.com/2024/07/updates-samsung-galaxy-unpacked.html" target="_blank"&gt;Samsung released their new foldables&lt;/a&gt; - the Galaxy Z Fold6 and Z Flip6, and &lt;a href="https://android-developers.googleblog.com/2024/08/tas24-recap.html" target="_blank"&gt;at Google we released our own&lt;/a&gt; - the Pixel 9 Pro Fold. We’re also investing in a number of platform features to improve how users interact with these devices, like &lt;a href="https://android-developers.googleblog.com/2024/09/developer-preview-desktop-windowing-on-android-tablets.html" target="_blank"&gt;the developer preview of Desktop Windowing&lt;/a&gt; that we’ve been working on in collaboration with Samsung - optimizing these large screen devices for productivity. High quality apps optimized for large screens have several advantages on Play as well: like improved visibility in the Play Store and eligibility for featuring in curated collections and editorial articles. Apps now get separate ratings and reviews for different form factors, making positive feedback more visible.&lt;/p&gt;


&lt;p&gt;And it’s paying off for those that make the investment: we’ve seen that using a tablet, flip, or fold increases app spend by ~20%. &lt;a href="https://android-developers.googleblog.com/2024/10/flipaclip-optimizes-for-tablets-and-stylus.html" target="_blank"&gt;Flipaclip is proof of this&lt;/a&gt;: they’ve seen a 54% growth in tablet users in the past four months. It has never been easier to build for large screens - with Compose APIs and Android Studio support specifically for &lt;a href="https://android-developers.googleblog.com/2024/10/adaptive-spotlight-week.html" target="_blank"&gt;building adaptive UIs&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;


&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/MFULzlv3pWs" width="100%" youtube-src-id="MFULzlv3pWs"&gt;&lt;/iframe&gt;&lt;br /&gt;

&lt;h3&gt;Kotlin Multiplatform for sharing business logic across Android and iOS&lt;/h3&gt;

&lt;p&gt;Many of you build apps for multiple platforms, requiring you to write platform-specific code or make compromises in order to reuse code across platforms. We’ve seen the most value in reducing duplicated code for business logic. So earlier this year, we &lt;a href="https://android-developers.googleblog.com/2024/05/android-support-for-kotlin-multiplatform-to-share-business-logic-across-mobile-web-server-desktop.html" target="_blank"&gt;announced official support for Kotlin Multiplatform (KMP)&lt;/a&gt; for shared business logic across Android and iOS. KMP, developed by &lt;a href="https://www.jetbrains.com/kotlin-multiplatform/" target="_blank"&gt;JetBrains&lt;/a&gt;, reduces development time and duplicated code, while retaining the flexibility and benefits of native programming.&lt;/p&gt;

&lt;p&gt;At Google, we’ve been migrating Workspace apps, starting with the Google Docs app, to use KMP for shared business logic across Android, iOS and Web. In the community there are a growing number of companies using KMP and getting significant benefits. And it’s not just apps - we’ve seen a 30% increase in the number of KMP libraries developed this year.&lt;/p&gt; 

&lt;p&gt;To make it easier for you to leverage KMP in your apps, we’ve been working on migrating many of our Jetpack libraries to take advantage of KMP. For example, Lifecycle, ViewModel, and Paging are KMP compatible libraries. Meanwhile, libraries like Room, DataStore, and Collections have KMP support, so they work out-of-the-box on Android and iOS. We’ve also added a new template to Android Studio so you can add a shared KMP module to your existing Android app and begin sharing business logic across platforms. &lt;a href="https://developer.android.com/kotlin/multiplatform" target="_blank"&gt;Kickstart your Kotlin Multiplatform journey with this comprehensive guide&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;

&lt;h3&gt;Watch the Fall episode of #TheAndroidShow&lt;/h3&gt;

&lt;p&gt;That’s a wrap on this quarter’s episode of #TheAndroidShow. A special thanks to our co-hosts for the Fall episode, &lt;a href="https://x.com/anomissi" target="_blank"&gt;Simona Milanović&lt;/a&gt; and &lt;a href="https://x.com/astamatok" target="_blank"&gt;Alejandra Stamato&lt;/a&gt;! You can watch the full show on YouTube and on &lt;a href="http://developer.android.com/events/show" target="_blank"&gt;developer.android.com/events/show&lt;/a&gt;.  

&lt;/p&gt;&lt;p&gt;Have an idea for our next episode of #TheAndroidShow? It’s your conversation with the broader community, and we’d love to hear your ideas for our next quarterly episode - you can let us know on &lt;a href="https://twitter.com/AndroidDev" target="_blank"&gt;X&lt;/a&gt; or &lt;a href="https://www.linkedin.com/showcase/androiddev/" target="_blank"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt; 




&lt;p&gt;&lt;/p&gt;</content><link href="http://android-developers.googleblog.com/feeds/7958185843340107791/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/tas-24-recap.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7958185843340107791" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7958185843340107791" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/tas-24-recap.html" rel="alternate" title="#TheAndroidShow: live from Droidcon, including the biggest update to Gemini in Android Studio and more SDK releases 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/AVvXsEgG4NSTzVyjQm-1DrUdd3c7J_t9HV7S8dhSXHsytGzsMiNzeYVzlaWUKgSBD50YbyQ-svdDR90Olg9AKB2QJsaWfNpHUVvhidE1ZK6EfTCUA5W_j53H8JUf7jCExabcneKmZBT-bQ9Slo_mOoWapg-UdP4pfFR0vrEqncYz2hld8z9pYTCgoyCIxdrzKxI/s72-c/013-AfD-%23TheAndroidShow-Header-Size-2-Animation.gif" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-135248351672078129</id><published>2024-10-31T09:59:00.000-07:00</published><updated>2024-10-31T09:59:00.108-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="case study"/><title type="text">FlipaClip optimizes for large screens and sees a 54% increase in tablet users</title><content type="html">&lt;meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUjCOkn2QQnG3JER62F7DxXTb2JZ3Po0Fty3RyOuhmZWB2nkmS9LVVeEvO9Dng5o3O9YcbrpyVqgqbbdfpr7n5OAH98YG8JsDJntLRrtoHHBa1dONw5svUQtopw3fLD92UN4viCikY0puhYwlSzNvtwowb6HdZzIrz-5y55HbhK5hRVV055UTGQ_bGS0Q/s1600/image2.png"&gt;
&lt;img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUjCOkn2QQnG3JER62F7DxXTb2JZ3Po0Fty3RyOuhmZWB2nkmS9LVVeEvO9Dng5o3O9YcbrpyVqgqbbdfpr7n5OAH98YG8JsDJntLRrtoHHBa1dONw5svUQtopw3fLD92UN4viCikY0puhYwlSzNvtwowb6HdZzIrz-5y55HbhK5hRVV055UTGQ_bGS0Q/s1600/image2.png"&gt;

&lt;em&gt;Posted by Miguel Montemayor – Developer Relations Engineer&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUjCOkn2QQnG3JER62F7DxXTb2JZ3Po0Fty3RyOuhmZWB2nkmS9LVVeEvO9Dng5o3O9YcbrpyVqgqbbdfpr7n5OAH98YG8JsDJntLRrtoHHBa1dONw5svUQtopw3fLD92UN4viCikY0puhYwlSzNvtwowb6HdZzIrz-5y55HbhK5hRVV055UTGQ_bGS0Q/s1600/image2.png" imageanchor="1" &gt;&lt;img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUjCOkn2QQnG3JER62F7DxXTb2JZ3Po0Fty3RyOuhmZWB2nkmS9LVVeEvO9Dng5o3O9YcbrpyVqgqbbdfpr7n5OAH98YG8JsDJntLRrtoHHBa1dONw5svUQtopw3fLD92UN4viCikY0puhYwlSzNvtwowb6HdZzIrz-5y55HbhK5hRVV055UTGQ_bGS0Q/s1600/image2.png" data-original-width="100%" data-original-height="800" /&gt;&lt;/a&gt;


&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.vblast.flipaclip&amp;amp;hl=en_US" target="_blank"&gt;FlipaClip&lt;/a&gt; is an app for creating dynamic and engaging 2D animations. Its powerful toolkit allows animators of all levels to bring their ideas to life, and its developers are always searching for new ways to help its users create anything they can imagine.&lt;/p&gt;

&lt;p&gt;Increasing &lt;a href="https://developer.android.com/about/versions/13/features/large-screens" target="_blank"&gt;tablet&lt;/a&gt; support was pivotal in improving FlipaClip users’ creativity, giving them more space and new methods of animating the stories they want to tell. Now, users on these devices can more naturally bring their visions to life thanks to Android’s intuitive features, like stylus compatibility and unique &lt;a href="https://developer.android.com/guide/topics/large-screens" target="_blank"&gt;large screen&lt;/a&gt; menu interfaces.&lt;/p&gt;

&lt;h3&gt;Large screens are a natural canvas for animation&lt;/h3&gt;

&lt;p&gt;FlipaClip initially launched as a phone app, but as tablets became more mainstream, the team knew it needed to adapt its app to take full advantage of larger screens because they are more natural animating platforms. After updating the app, tablet users quickly became a core revenue-generating audience for FlipaClip, representing more than 40% of the app’s total revenue.&lt;/p&gt;

&lt;p&gt;“We knew we needed to prioritize the large screen experience,” said Tim Meson, the lead software engineer and co-founder of FlipaClip. “We believe the tablet experience is the ideal way to use FlipaClip because it gives users more space and precision to create.”&lt;/p&gt;

&lt;p&gt;The FlipaClip team received numerous user requests to optimize styluses on tablets, like pressure sensitivity and tilt for styluses and new brush types. So it gave their users exactly what they wanted. Not only did they implement stylus support, but they also redesigned the large screen drawing area, allowing for more customization with moveable tool menus and the ability to hide extra tools.&lt;/p&gt;

&lt;p&gt;Now, unique menu interfaces and stylus support provide a more immersive and powerful creative experience for FlipaClip’s large screen users. By implementing many of the features its users requested and optimizing existing workspaces, &lt;b&gt;FlipaClip increased its US tablet users by 54% in just four months&lt;/b&gt;. The quality of the animations made by FlipaClip artists also visibly increased, according to the team.&lt;/p&gt;&lt;br/&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="We knew we needed to prioritize the large screen experience...because it gives users more space and precision to create - Tim Meson; Lead Software Engineer and Co-founder of FlipaClip" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6JNGX6niGE4OUXKjbgMl7SygBABepcJ7OBrO_GU48CuRSgpIwW-NtyVCq-Dm7KDxtAR-a09t_XrJkDTVk9SOY9TDZMFu7cxB6SAIaT-nkSQPJH0BHKGv8otzFqhiy9h9LTEnUJgsusnvbZiAIPllbfFMxSeGqfyjrVO1IkhPuqZjlPuAWYEBHNsTRo5Q/s1600/image6.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;


&lt;h3&gt;Improving large screen performance&lt;/h3&gt;

&lt;p&gt;One of the key areas the FlipaClip team focused on was achieving low-latency drawing, which is critical for a smooth and responsive experience, especially with a stylus. To help with this, the team created an entire drawing engine from the ground up using &lt;a href="https://developer.android.com/ndk" target="_blank"&gt;Android NDK&lt;/a&gt;. This engine also improved the overall app responsiveness regardless of the input method.&lt;/p&gt;

&lt;p&gt;“Focusing on GPU optimizations helped create more responsive brushes, a greater variety of brushes, and a drawing stage better suited for tablet users with more customization and more on-screen real estate,” said Tim.&lt;/p&gt;

&lt;p&gt;Previously, FlipClip drawings were rendered using CPU-backed surfaces, resulting in suboptimal performance, especially on lower-end devices. By utilizing the GPU for rendering and consolidating touch input with the app’s historical touch data, the FlipaClip team significantly improved responsiveness and fluidity across a range of devices.&lt;/p&gt;

&lt;p&gt;“The improved performance enabled us to raise canvas size limits closer to 2K resolution,” said Tim. “It also resolved several reported application-not-responding errors by preventing excessive drawing attempts on the screen.”&lt;/p&gt;

&lt;p&gt;After optimizing for large screens and reducing their crash rate across device types, &lt;b&gt;FlipaClip’s user satisfaction improved, with a 15% improvement in their Play Store rating for large screen devices.&lt;/b&gt; The performance enhancements to the drawing engine were particularly well received among users, leading to better engagement and overall positive feedback.&lt;/p&gt;

&lt;p&gt;Using Android Vitals, a tool in the &lt;a href="https://developer.android.com/distribute/console" target="_blank"&gt;Google Play Console&lt;/a&gt; for monitoring the technical quality of Android apps, was invaluable in identifying performance issues across the devices FlipaClip users were on. This helped its engineers pinpoint specific devices lacking drawing performance and provided critical data to guide their optimizations.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img id="imgFull" alt="FlipaClip UI examples across large screen devices" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL-2EElqtke31es1kqLTuYZ1jlE6DlV8vR-9Cu4wiKEW0uqC57sOswWvm1br1a2yvaRf_mXmxqiJgY0H7a0BQe7Eba2av0ILwviJNMeSU7I_I0fStl0dPgh0RF3AMuAxCMlhgktJYAZpjqJwwWyIbmLkMdPa9_jnRWOQBFnMAYsep1T9eOuk9LVvi6XoY/s1600/image5.png"  width="100%"/&gt;&lt;/div&gt;&lt;/image&gt;&lt;br/&gt;

&lt;h3&gt;Listening to user feedback&lt;/h3&gt;

&lt;p&gt;Large screen users are Android’s fastest-growing audience, reaching over 300 million users worldwide. Allowing users to enjoy their favorite apps across device types while making use of the larger screen on tablets, means a more engaging experience for users to love.&lt;/p&gt;

&lt;p&gt;“One key takeaway for us was always to take the time to review user feedback and app stability reports,” said Tim. “From addressing user requests for additional stylus support to pinpointing specific devices to improve drawing performance, these insights have been invaluable for improving the app and addressing pain points of large screen users.”&lt;/p&gt;

&lt;p&gt;The FlipaClip team noted that developing for Android stood out in several ways compared to other platforms. One key difference is the libraries provided by the Android team, which
are continuously updated and improved, allowing its engineers to seamlessly address and resolve any issues without requiring users to upgrade their Android OS.&lt;/p&gt;

&lt;p&gt;“Libraries like Jetpack Compose can be updated independently of the device's system version, which is incredibly efficient,” said Tim. “Plus, Android documentation has gotten a lot better over the years. The documentation for large screens is a great example. The instructions are more thorough, and all the code examples and codelabs make it so much easier to understand.”&lt;/p&gt;

&lt;p&gt;FlipaClip engineers plan to continue optimizing the app’s UI for larger screens and improve its unique drawing tools. The team also wants to introduce more groundbreaking animation tools, seamless cross-device syncing, and tablet-specific gestures to improve the overall animation experience on large screen devices.&lt;/p&gt;

&lt;h3&gt;Get started&lt;/h3&gt;

&lt;p&gt;Learn how to improve your UX by optimizing for &lt;a href="https://developer.android.com/multidevice" target="_blank"&gt;large screens&lt;/a&gt;.&lt;/p&gt;



</content><link href="http://android-developers.googleblog.com/feeds/135248351672078129/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/flipaclip-optimizes-for-tablets-and-stylus.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/135248351672078129" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/135248351672078129" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/flipaclip-optimizes-for-tablets-and-stylus.html" rel="alternate" title="FlipaClip optimizes for large screens and sees a 54% increase in tablet users" 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/AVvXsEjUjCOkn2QQnG3JER62F7DxXTb2JZ3Po0Fty3RyOuhmZWB2nkmS9LVVeEvO9Dng5o3O9YcbrpyVqgqbbdfpr7n5OAH98YG8JsDJntLRrtoHHBa1dONw5svUQtopw3fLD92UN4viCikY0puhYwlSzNvtwowb6HdZzIrz-5y55HbhK5hRVV055UTGQ_bGS0Q/s72-c/image2.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7141040469745754002</id><published>2024-10-31T09:58:00.000-07:00</published><updated>2024-11-04T08:15:36.479-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android developers"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="Play Console"/><title type="text">Updates to power your growth on Google Play</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPg7xcvg7wM-dc8o_9_4Wof-FAlOrwA3cK6d3nV6zx12zhjGZHI_reQNDbc7WppfsJVKrinMpkzokyJLxu2QhVDFGkBcdJT3dSBq7eAXySKEqq3aCDRD6L25CLM5orj09WjZio-YyEFnKVbtst-IunuYNJFxIKxiX1asj7PMx7alBRk1xT5I22eObqjmI/s1600/Google-Play-Playtime-Social.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPg7xcvg7wM-dc8o_9_4Wof-FAlOrwA3cK6d3nV6zx12zhjGZHI_reQNDbc7WppfsJVKrinMpkzokyJLxu2QhVDFGkBcdJT3dSBq7eAXySKEqq3aCDRD6L25CLM5orj09WjZio-YyEFnKVbtst-IunuYNJFxIKxiX1asj7PMx7alBRk1xT5I22eObqjmI/s1600/Google-Play-Playtime-Social.png" style="display: none;" /&gt;

&lt;em&gt;Posted by Paul Feng – Vice President of Engineering, Product and UX, Google Play&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUWpAPx8RhNEVJTLAJyaIGWR-My3N35oqePGxnXMpsF9_TEE_dpUNENGAs5vWhJIjNEy63uG5huLVdF01Jht9JxBiYE5fzFNlgiUmxF9Knxf6wLYum976KvNy1BClFjFutizazs1pk1hWYvHpcZjm2xTMcAlVo3spMBySQP9xVWExNqBtIrU78Ub6mLxY/s1600/Option%202_banner-100.jpg"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUWpAPx8RhNEVJTLAJyaIGWR-My3N35oqePGxnXMpsF9_TEE_dpUNENGAs5vWhJIjNEy63uG5huLVdF01Jht9JxBiYE5fzFNlgiUmxF9Knxf6wLYum976KvNy1BClFjFutizazs1pk1hWYvHpcZjm2xTMcAlVo3spMBySQP9xVWExNqBtIrU78Ub6mLxY/s1600/Option%202_banner-100.jpg" /&gt;&lt;/a&gt;


&lt;p&gt;Our annual Playtime event series kicks off this week and we’re excited to share the latest product updates to help your business thrive. We’re sharing new ways to grow your audience, optimize revenue, and protect your business in an ever-evolving digital landscape. &lt;/p&gt;

&lt;p&gt;Make sure to also check out &lt;a href="https://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html" target="_blank"&gt;news from #TheAndroidShow&lt;/a&gt; to learn more about the biggest update to Gemini in Android Studio since launch that will help boost your team’s developer productivity.&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Growing your audience with enhanced discovery features&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;To help people discover apps and games they'll love, we're continuously improving our tools and personalizing app discovery so you can reach and engage your ideal audience.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Enhanced content formats:&lt;/b&gt; To make your video content more impactful, we’re making enhancements to how it's displayed on the Play Store. Portrait videos on your store listing now have a full-screen experience to immerse users and drive conversions with a prominent "install" button. Simply keep creating amazing portrait videos for your store listing, and we'll handle the rest. &lt;/p&gt;

&lt;p&gt;Our early results are promising: portrait videos drive &lt;b&gt;+7% increase&lt;/b&gt; in total watch time, a &lt;b&gt;+9% increase&lt;/b&gt; in video completion count,  and a &lt;b&gt;+5% increase&lt;/b&gt; in conversions.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Captivate users with full-screen portrait videos on your store listing" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgacwAsOrOo3J1ScsE91pKmkwkRYZgXf0wnzCZAdmrpmLJFVxEBPGuMchf0LCyAPloT5qRhw3hcrCVOhst98xiS9Oa7iMBRU-4Iyx7uDXaO_JRD3AHfc3h9ZdjTEeWRxV6rOCy6QOjuOlW_HxOEL5Bktre9M1sxwk4ydSRKdTkNC4S5oJAhx5UMQRXhKk8/s1600/1000000023.gif" width="50%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Captivate users with full-screen portrait videos on your store listing&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;We’ve also launched new features to create a more engaging and tailored experience for people exploring the Play Store.&lt;/p&gt;

&lt;ul&gt;&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Personalized query recommendations:&lt;/b&gt; To help users start their search journeys right, we’ve introduced personalized search query recommendations on Search Home. This feature is currently available in English, with expanded support for more languages coming soon this year.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;


&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Personalized search queries help tailor search results to user’s interests" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDDAIL4YRyWHe_ezBEkCB4v_dk2UgEj749aIoF1OuU5HexTuw5-I-ZnuoFhaieoEpV6mcZEe4ljBzan2LbuMm-mJoSKrPTaNSPB4lWdBfcqBoZ0poNR5_6CYTvtwvOtO-0aLfNNQPrlq4ER8j9pkywE_JzOYg0VYiIYWzV91QDiYKTpIRp9SElOFfGeno/s1600/image1.png" width="50%" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Personalized search queries help tailor search results to user’s interests&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Interest pickers:&lt;/b&gt; Multi-select interest filters allow people to share their preferences so they can get more helpful recommendations tailored to their interests. Earlier this year, we announced this for games, and now these filters are also available for apps.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;

&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Optimizing your revenue with Google Play Commerce&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;We want to make it effortless for people to buy what you're selling, so we're focused on helping our 2.5 billion users in over 190 markets have a seamless and secure purchase experience. Our tools support you and your users during every step of the journey, from payment setup, to the purchase flow, to ensuring transactions are secure and compliant.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Proactive payment setup:&lt;/b&gt; To help more buyers be purchase ready, we’ve been proactively encouraging people to set up payment methods in advance, both within the Play Store and during Android device setup, and even during Google account creation. Our efforts have doubled the number of purchase-ready users this year, now reaching over half a billion users. And we’re already seeing results from this approach - In September alone, we’ve seen an almost 3% increase in global conversion rates, which means more people are completing purchases, which translates directly to higher revenue potential for you from your apps and games.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Expanded payment options:&lt;/b&gt; Google Play already offers users over 300 local payment methods across 65+ markets, and we’re regularly adding new payment methods. US users can now use Cash App eWallet alongside credit cards, PayPal, direct carrier billing, and gift cards and users in Poland can pay with Blik Banking.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Purchase flow recommendations:&lt;/b&gt; Our new algorithmic recommendation engine helps people discover relevant in-app purchases they’re likely to buy. Simply select products to feature in Play Console, and we'll recommend a popular or related option at different moments in the purchase journey, helping users find what they need. Our early results show an average of 3% increase in spend.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Purchase flow recommendations in Google Play" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoFxXIFG6jDmckQMhbKEyVcXA1TgLs4elSmelpzZfVMhJgFVccCwLyE5Kjl_j7B-QBbpMEepX451nFBlSepqobTh56PoKO1YuBBR17oLsFQ70YT72FVbjfbuq-OUMGsiTr2nYR3KXqKvQLzyJlYQCItFLCEjboiEKEbd246mqXj9CYfxA3sAprq8ThNzw/s16000/Screenshot%202024-10-31%20at%2011.03.58%E2%80%AFAM.png" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Purchase flow recommendations helps people discover relevant in-app purchases&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;&lt;b&gt;Cart abandonment reminders:&lt;/b&gt; If a user is browsing a product in your app or game, but hasn’t yet made a decision to purchase, we’ll remind them about it later when they browse the Play Store. These automatic, opt-out reminders help nudge users to complete their purchase.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Cart abandonment reminders in Google Play" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg0aEOqE-w_RHDmkagWLaqkXOw2ymjOOC4COo2oOOQQYyPCghD6yEXy9qn_eR1cTOO7VTOq8uxaN6uEMpoIFbl21mkCtR_WIscwct7TchemdGJuOaRveZzR3ZehVPVWEE-fQvYTimAjqIrfi0S_LPNndjJioqkofS3vOVI7oaMfsYe0LRsh5Mya-yXYi8/s16000/Screenshot%202024-10-31%20at%2011.01.14%E2%80%AFAM.png" /&gt;&lt;/div&gt;&lt;imgcaption&gt;&lt;center&gt;&lt;em&gt;Cart abandonment reminders help users complete their purchase&lt;/em&gt;&lt;/center&gt;&lt;/imgcaption&gt;&lt;/image&gt;&lt;br /&gt;


&lt;p&gt;&lt;b&gt;Secure bio authentication:&lt;/b&gt; Users can now enjoy a faster and more secure checkout experience by choosing on-device biometrics (fingerprint or face recognition) to verify their purchases, eliminating the need to enter their account password. This year, we’ve seen adoption triple, as more users choose bioauth to make their first purchase.&lt;/p&gt;


&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;Protecting your business with the Play Integrity API&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;Everything we do at Google Play has safety and security at its core.  That’s why we’re continuing to invest in more ways to reinforce user trust, protect your business, and safeguard the ecosystem. This includes actively combating bad actors who try to deceive users or spread malware, and giving you tools to combat abuse.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://developer.android.com/google/play/integrity" target="_blank"&gt;Play Integrity API&lt;/a&gt; can help you detect and respond to potential abuse such as fraud, bots, cheating, or data theft, ensuring everyone experiences your apps and games as intended. Apps that use Play Integrity features are seeing 80% less unauthorized usage on average compared to unprotected apps.&lt;/p&gt;

&lt;p&gt;Here's what's new with the Play Integrity API:&lt;/p&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Hardware-backed security signals:&lt;/b&gt; In the coming months, you can opt-in to improved Play Integrity API verdicts backed by hardware security and other signals on Android 13+ devices. This means faster, more reliable, and more privacy-friendly app and device verification, making it significantly harder and more costly for attackers to bypass.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;

&lt;li&gt;&lt;b&gt;New app access risk feature:&lt;/b&gt; Now out of beta, this feature allows you to detect and respond to apps that can capture the screen or control the device, so you can protect your users from scams or malicious activity.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;Those are the latest updates from Google Play! We're always enhancing our tools to help address the specific challenges and opportunities of different app categories, from games and media to entertainment and social. &lt;/p&gt;

&lt;p&gt;We're excited to see how you leverage both our new and existing features to grow your business. Check out how Spotify and SuperPlay are already taking advantage of features like &lt;a href="https://play.google.com/console/about/programs/googleplaypoints/" target="_blank"&gt;Play Points&lt;/a&gt; and &lt;a href="https://developer.android.com/guide/playcore/engage/preview" target="_blank"&gt;Collections&lt;/a&gt; to achieve powerful results: &lt;/p&gt;&lt;br /&gt;

&lt;center&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/peEbiF8PsT4" width="100%" youtube-src-id="peEbiF8PsT4"&gt;&lt;/iframe&gt;&lt;/center&gt;

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

&lt;center&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/e4tcT1WFRDM" width="100%" youtube-src-id="e4tcT1WFRDM"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;





</content><link href="http://android-developers.googleblog.com/feeds/7141040469745754002/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7141040469745754002" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7141040469745754002" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html" rel="alternate" title="Updates to power your growth on Google Play" 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/AVvXsEjPg7xcvg7wM-dc8o_9_4Wof-FAlOrwA3cK6d3nV6zx12zhjGZHI_reQNDbc7WppfsJVKrinMpkzokyJLxu2QhVDFGkBcdJT3dSBq7eAXySKEqq3aCDRD6L25CLM5orj09WjZio-YyEFnKVbtst-IunuYNJFxIKxiX1asj7PMx7alBRk1xT5I22eObqjmI/s72-c/Google-Play-Playtime-Social.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-6673833374825260467</id><published>2024-10-31T09:57:00.001-07:00</published><updated>2024-10-31T12:14:43.064-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Beta"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Preview"/><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="latest"/><title type="text">More frequent Android SDK releases: faster innovation, higher quality and more polish</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDFewWpsDFAJw4zPllJKaJA05ld0cHiB9GnMLIU-dNtS8j8PEjWMg7xrGoCv9tuWiUi78HZD2H03FXQpy_sg_vCrFC3tZwhnyFiGw-yxXPAjzO3EFHZfQ2XaXyoRRvotCEmkQb6VpihbbenaDO1H1O4CGdx8xQkaxUuIb9bjgeO5hych6bqHqsVRiLoMs/s1600/Editorial-Order-Files-in-Android-header.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDFewWpsDFAJw4zPllJKaJA05ld0cHiB9GnMLIU-dNtS8j8PEjWMg7xrGoCv9tuWiUi78HZD2H03FXQpy_sg_vCrFC3tZwhnyFiGw-yxXPAjzO3EFHZfQ2XaXyoRRvotCEmkQb6VpihbbenaDO1H1O4CGdx8xQkaxUuIb9bjgeO5hych6bqHqsVRiLoMs/s1600/Editorial-Order-Files-in-Android-header.png" style="display: none;" /&gt;
&lt;p&gt;
&lt;em&gt;Posted by &lt;a href="https://twitter.com/matthewmccull" target="_blank"&gt;Matthew McCullough&lt;/a&gt; – Vice President, Product Management, Android Developer&lt;/em&gt;
&lt;/p&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKgZh1goDmOVHccsCUehRKZrSlzgpCQNr3tht6rQOEMN6XTbKy14mYwoV7jY31w9aaUoYUGJM-k23DxFxz2Mxsi6M4mQRX6I0Tfk4GJpB_4ouKKgxHi0H12U7XXE7g_ygFODtMCapQOKn3frI2YzS3GJICr2olpyQ9B41QRFR34xIrX3O-icdWidF_pvQ/s1600/Editorial-Order-Files-in-Android-banener.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKgZh1goDmOVHccsCUehRKZrSlzgpCQNr3tht6rQOEMN6XTbKy14mYwoV7jY31w9aaUoYUGJM-k23DxFxz2Mxsi6M4mQRX6I0Tfk4GJpB_4ouKKgxHi0H12U7XXE7g_ygFODtMCapQOKn3frI2YzS3GJICr2olpyQ9B41QRFR34xIrX3O-icdWidF_pvQ/s1600/Editorial-Order-Files-in-Android-banener.png" /&gt;&lt;/a&gt;


&lt;p&gt;Android has always worked to get innovation into the hands of users faster. In addition to our annual platform releases, we’ve invested in &lt;a href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html" target="_blank"&gt;Project Treble&lt;/a&gt;, &lt;a href="https://source.android.com/docs/core/ota/modular-system" target="_blank"&gt;Mainline&lt;/a&gt;, &lt;a href="https://developer.android.com/distribute/play-services" target="_blank"&gt;Google Play services&lt;/a&gt;, monthly security updates, and the quarterly releases that help power Pixel Drops.&lt;/p&gt;

&lt;p&gt;Going forward, Android will have more frequent SDK releases with two releases planned in 2025 with new developer APIs. These releases will help to drive faster innovation in apps and devices, with higher stability and polish for users and developers.&lt;/p&gt;


&lt;h3&gt;Two Android releases in 2025&lt;/h3&gt;

&lt;p&gt;Next year, we’ll have a major release in Q2 and a minor release in Q4, both of which will include new developer APIs. The Q2 major release will be the only release in 2025 to include behavior changes that can affect apps. We’re planning the major release for Q2 rather than Q3 to better align with the schedule of device launches across our ecosystem, so more devices can get the major release of Android sooner.&lt;/p&gt;

&lt;p&gt;The Q4 minor release will pick up feature updates, optimizations, and bug fixes since the major release. It will also include new developer APIs, but will not include any app-impacting behavior changes.&lt;/p&gt;

&lt;p&gt;Outside of the major and minor Android releases, our Q1 and Q3 releases will provide incremental updates to help ensure continuous quality. We’re actively working with our device partners to bring the Q2 release to as many devices as possible.&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;img alt="2025 SDK release timeline showing a features only update in Q1 and Q3, a major SDK release with behavior changes, APIs, and features in Q2, and a minor SDK release with APIs and features in Q4" border="0" height="164" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSeVe1-ddLYBDekoJnJP_c3Qq3BOxmM8IOvx6DbeaQCpau5VrnpHG8G0UFayJsIrVZehmY-Sf85Wt8iDvxJ5M8D0fGOl4M_ucFffyosC4AgRae6R6gN-mNrm3Jp8XYsJtQVHGqv84obbkuy4DvFbDgwdBXeuQ_JOveA2IWC1hbned7OkXJfWClTO2Szac/w640-h164/image2.png" width="640" /&gt;&lt;/div&gt;

&lt;h3&gt;What this means for your apps&lt;/h3&gt;

&lt;p&gt;With the major release coming in Q2, you’ll need to do your annual compatibility testing a few months earlier than in previous years to make sure your apps are ready. Major releases are just like the SDK releases we have today, and can include behavior changes along with new developer APIs – and to help you get started, we’ll soon begin the developer preview and beta program for the Q2 major release.&lt;/p&gt;

&lt;p&gt;The minor release in Q4 will include new APIs, but, like the incremental quarterly releases we have today, will have no planned behavior changes, minimizing the need for compatibility testing. To differentiate major releases (which may contain planned behavior changes) from minor releases, minor releases will not increment the API level. Instead, they'll increment a new minor API level value, which will be accessed through a constant that captures both major and minor API levels. A new manifest attribute will allow you to specify a minor API level as the minimum required SDK release for your app. We’ll have an initial version of support for minor API levels in the upcoming Q2 developer preview, so please try building against the SDK and let us know how this works for you.&lt;/p&gt;

&lt;p&gt;When planning your targeting for 2026, there’s no change to the target API level requirements and the associated dates for apps in Google Play; our plans are for one annual requirement each year, and that will be tied to the major API level only.&lt;/p&gt;

&lt;h3&gt;How to get ready&lt;/h3&gt;

&lt;p&gt;In addition to compatibility testing on the next major release, you'll want to make sure to test your builds and CI systems with SDK's supporting major and minor API levels – some build systems (including the Android Gradle build) might need adapting. Make sure that you're compiling your apps against the new SDK, and use the compatibility framework to enable &lt;span style="color:#0d904f; font-family:Courier"&gt;targetSdkVersion&lt;/span&gt;-gated behavior changes for early testing.&lt;/p&gt;

&lt;p&gt;Meta is a great example of how to embrace and test for new releases: they &lt;a href="https://android-developers.googleblog.com/2024/03/android-14-meta-early-adoption-enhanced-user-experience.html" target="_blank"&gt;improved their velocity towards &lt;span style="font-family:Courier"&gt;targetSdkVersion&lt;/span&gt; adoption by 4x&lt;/a&gt;. They compiled apps against each platform Beta and conducted thorough automated and smoke tests to proactively identify potential issues. This helped them seamlessly adopt new platform features, and when the release rolled out to users, Meta’s apps were ready - creating a great user experience.&lt;/p&gt;

&lt;h3&gt;What’s next?&lt;/h3&gt;

&lt;p&gt;As always, we plan to work closely with you as we move through the 2025 releases. We will make all of our quarterly releases available to you for testing and feedback, with over-the-air Beta releases for our early testers on Pixel and downloadable system images and tools for developers.&lt;/p&gt;

&lt;p&gt;Our aim with these changes is to enable faster innovation and a higher level of quality and polish across releases, without introducing more overhead or costs for developers. At the same time, we’re welcoming an even closer collaboration with you throughout the year. Stay tuned for more information on the first developer preview of Android 16.&lt;/p&gt;

&lt;p&gt;The shift in platform releases highlights Android's commitment to constant evolution and collaboration. By working closely with partners and listening to the needs of developers, Android continues to push the boundaries of what's possible in the mobile world. It's an exciting time to be part of the Android ecosystem, and I can't wait to see what the future holds!&lt;/p&gt;


</content><link href="http://android-developers.googleblog.com/feeds/6673833374825260467/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/android-sdk-release-update.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6673833374825260467" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6673833374825260467" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/android-sdk-release-update.html" rel="alternate" title="More frequent Android SDK releases: faster innovation, higher quality and more polish" 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/AVvXsEgDFewWpsDFAJw4zPllJKaJA05ld0cHiB9GnMLIU-dNtS8j8PEjWMg7xrGoCv9tuWiUi78HZD2H03FXQpy_sg_vCrFC3tZwhnyFiGw-yxXPAjzO3EFHZfQ2XaXyoRRvotCEmkQb6VpihbbenaDO1H1O4CGdx8xQkaxUuIb9bjgeO5hych6bqHqsVRiLoMs/s72-c/Editorial-Order-Files-in-Android-header.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7202248407282588895</id><published>2024-10-31T09:56:00.000-07:00</published><updated>2024-10-31T10:43:25.066-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI code completion"/><category scheme="http://www.blogger.com/atom/ns#" term="Android app developers"/><category scheme="http://www.blogger.com/atom/ns#" term="Composables"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini APIs"/><category scheme="http://www.blogger.com/atom/ns#" term="Gemini Nano"/><title type="text">Gemini in Android Studio, now helping you across the development lifecycle</title><content type="html">&lt;meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVnu87IHEPK_zBwJnV1NKA94558Dm5_OifXPmT0M7cXGHph4OApNV6wFvohnsdqCWX4y7d6SKu8hr1fH4nTl2KVlht7sQxUGwmTtdttu308tbKp3X_-QtL_pshtOLdFly3cDkLJTl9uWWVy99Be5S9-stSrie15M9IhhU_xade_1WSKfeqxuOnDcK4P74/s1600/Gemini-in-Android-Studio.png" name="twitter:image"&gt;&lt;/meta&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVnu87IHEPK_zBwJnV1NKA94558Dm5_OifXPmT0M7cXGHph4OApNV6wFvohnsdqCWX4y7d6SKu8hr1fH4nTl2KVlht7sQxUGwmTtdttu308tbKp3X_-QtL_pshtOLdFly3cDkLJTl9uWWVy99Be5S9-stSrie15M9IhhU_xade_1WSKfeqxuOnDcK4P74/s1600/Gemini-in-Android-Studio.png" style="display: none;" /&gt;

&lt;em&gt;Posted by &lt;a href="https://x.com/sandhyam1312" target="_blank"&gt;Sandhya Mohan&lt;/a&gt; – Product Manager, Android Studio&lt;/em&gt;

&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVnu87IHEPK_zBwJnV1NKA94558Dm5_OifXPmT0M7cXGHph4OApNV6wFvohnsdqCWX4y7d6SKu8hr1fH4nTl2KVlht7sQxUGwmTtdttu308tbKp3X_-QtL_pshtOLdFly3cDkLJTl9uWWVy99Be5S9-stSrie15M9IhhU_xade_1WSKfeqxuOnDcK4P74/s1600/Gemini-in-Android-Studio.png"&gt;&lt;img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVnu87IHEPK_zBwJnV1NKA94558Dm5_OifXPmT0M7cXGHph4OApNV6wFvohnsdqCWX4y7d6SKu8hr1fH4nTl2KVlht7sQxUGwmTtdttu308tbKp3X_-QtL_pshtOLdFly3cDkLJTl9uWWVy99Be5S9-stSrie15M9IhhU_xade_1WSKfeqxuOnDcK4P74/s1600/Gemini-in-Android-Studio.png" /&gt;&lt;/a&gt;


&lt;h2&gt;&lt;span style="font-size: x-large;"&gt;This is Our Biggest Feature Release Since Launch!&lt;/span&gt;&lt;/h2&gt;


&lt;p&gt;AI can accelerate your development experience, and help you become more productive. That's why we introduced &lt;a href="https://developer.android.com/gemini-in-android" target="_blank"&gt;Gemini in Android Studio&lt;/a&gt;, your AI-powered coding companion. It’s designed to make it easier for you to build high quality Android apps, faster. Today, we're releasing the biggest set of updates to Gemini in Android Studio since launch, and now Gemini brings the power of AI to every stage of the development lifecycle, directly within the Android Studio IDE experience. And for more updates on how to grow your apps and games businesses, check out the latest updates from &lt;a href="https://android-developers.googleblog.com/2024/10/playtime-2024-whats-new-in-google-play.html" target="_blank"&gt;Google Play&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Download the latest version of Android Studio in the canary channel to take advantage of all these new features, and read on to unpack what's new.&lt;/p&gt;&lt;br /&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="413" src="https://www.youtube.com/embed/ZfIE-LATgH4" width="100%" youtube-src-id="ZfIE-LATgH4"&gt;&lt;/iframe&gt;&lt;br /&gt;


&lt;h3&gt;Gemini Can Now Write, Refactor, and Document Android Code&lt;/h3&gt;

&lt;p&gt;Gemini goes beyond just guidance. It can edit your code, helping you quickly move from prototype to implementation, implement common design patterns, and refactor your code. Gemini also streamlines your workflow with features like documentation and commit message generation, allowing you to focus more time on writing code.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Moving image demonstrating Gemini writing code for an Android Composable in real time in Android Studio" border="0" height="454" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvZOFpkH9u5R3ObnBCyi88KY6oO76zNCE3r71Ailgr5uGodtmd49Q0LHFSI_ujLMP604NfuJ7Q5Kei7-y-Y_h7qlygdiyLpAebHfLKjbYzVtvxaedOmE6hH59cI65cydO8H_iklDCdzW9x8guyrTowc6thnR2yJyRbcuA8RLllRndY4zSEhpj3023bQ_w/w640-h454/image1.gif" width="640" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Coding features we are launching include:&lt;/p&gt;

&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Gemini Code Transforms&lt;/b&gt; - modify and refactor code using custom prompts.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="using Gemini to modify code in Android Studio" border="0" height="224" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-nuuz4Gt5nmFHwwkZdiTUV_JtOXz6ilAt0xTXFFIWWjevTDa3_I7wMzU5lj_pwxdSWmf-kFmstPe3JrSILpjFN4wPahGJ1rnX5KDBg93llp0OFRsp5IWA3eHpAV8TwCM9G_5khwflOFzHSOlK5eJNkDhznHagoq0VvvUcZBh3OimMGOoSqUrA49Tk3Yo/w400-h224/image10.png" style="text-align: center;" width="400" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
  
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Commit message generation&lt;/b&gt; - analyze changes and propose VCS commit messages to streamline version control operations.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="using Gemini to analyze changes and propose VCS commit messages in Android Studio" border="0" height="224" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK4Q0xajf7ITTUJizp6uXeHF9Ikmn1ZrYK6c9JdhET3JfH7Y5deLfXOvcOgITPf8iSX4L3QMADwCWEIk2GaaQdOuIlyxFwgW_0j_BrDm6oBK8rcmpnihds6nrFJtS9wdfp41bCxVjDqtf_bl3F4tr6Jc84L8DnO1WunPGzfIO_hTw7nwDSvmLf4TmdXDU/s1600/image4.gif" style="text-align: center;" width="640" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
  

&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Rethink and Rename&lt;/b&gt; - generate intuitive names for your classes, methods, and variables. This can be invoked while you’re coding, or as a larger refactor action applied to existing code.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="using Gemini to generate intuitive names for variables while you're coding in Android Studio" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpFlqM1ImzR-AqI5EvhiAm2yt_u-tCJCwj5PAy0g1nam507MBxtJO8MpheuozJYuUdabd1u9kfUtOKenIbOAaoP5gPF6lFICT8gRY9j0YBip-VTr3ngCDqqBEC8rrBeRiOoysVrxjxJlGs3VsPZ9zvFvH83WSXvYilPLKJ4E4cx3_qK_4gsmxw1T_qiUI/w474-h640/image5.png" style="text-align: center;" width="474" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;

  
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Prompt library&lt;/b&gt; - save and manage your most frequently used prompts. You can quickly recall them when you need them.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="save your frequently used prompts for future use with Gemini in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitJ-Mbck0puYqCbS5StEVCfQjwFLChjqQ_AWnRXw0170do0BdeCRHgaXSWqmtpdh0z8bLNd7yJ4rz8F6LFS53Kq93acdOYsCOqcT0KLpssT8AUbfE4sfqSQUsmBg26LJrEOShZri0kSTjuezJXQuJkbUtpHOOcequryelXE5tFQ3oDXokz-My9v1uy-b8/s16000/Prompt-library-Gemini-in-Android%20(1).gif" style="text-align: center;" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;


&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Generate documentation&lt;/b&gt; - get documentation for selected code snippets with a simple right click. &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="generating code documation in Android Studio" border="0" height="438" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLdrGQE6fYPN69xjaZtckyzaYC9UE7ypmny7G0zTK0ZVp1p1IXuuhB6w6E_MZElM_2Zdn_-PIRwB41lEXGfJEAZZzAJEqrOGLkyvwjuQujJmi9GPYcgAm8VJE2aB9_kbEnu8bHaNALZxjVDK_5CgatBTHfAF2pWj49cq6sku4s2zSIfs2pqbVx-sbKKcI/w640-h438/image9.gif" style="text-align: center;" width="640" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;


&lt;h3&gt;Integrating AI into UI Tools&lt;/h3&gt;

&lt;p&gt;It’s never been easier to build with Compose now that we have integrated AI into Compose workflows. &lt;a href="https://developer.android.com/develop/ui/compose/tooling/previews" target="_blank"&gt;Composable previews&lt;/a&gt; help you visualize your composables during design time in Android Studio.  We understand that manually crafting mock data for the preview parameters can be time-consuming. Gemini can now help auto-generate Composable previews with relevant context using AI, simplifying the process of visualizing your UI during development.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Visualize your composables during design time in Android Studio" border="0" height="454" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBuUdKhhwtRmhw0JccWQcIIPgR-K-GPbLocWtuvQrqMySSgl82zI5k1T74wGC4Izrhmwt0_oSb4Yf56ngdKATOujnj8A-sqc-9AHtAd8tCm3i5_hansg4R1z7zkNwLryCHhvUGVBNBNzTVodmvpK-r3aMEPZkzOVH7_o7Nzh4fvjStVKUyn9YxXPUC9KE/s1600/image2.png" width="640" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;We are continuing to experiment with Multimodal support to speed up your UI development cycle. Coming soon, we will allow for image attachment as context and utilizing Gemini's multimodal understanding to make it easier to create beautiful and engaging user interfaces.&lt;/p&gt;

&lt;h3&gt;Deploy with Confidence&lt;/h3&gt;

&lt;p&gt;Gemini's intelligence can help you release higher quality apps with greater confidence. Gemini can analyze, test code, and suggest fixes — and we are continuing to integrate AI into the IDE’s App Quality Insights tool window by helping you analyze crashes reported by Google Play Console and Firebase Crashlytics. Now, with Ladybug Feature Drop, you can generate deeper insights by using your local code context. This means that you will fix bugs faster and your users will see fewer crashes.&lt;/p&gt;

&lt;image&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="Generate insights using the IDE's App Quality Insights tool window" border="0" height="255" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSpJtVYn8XgkN6VAeToyhYaJwaRSchX6r_TVoUB87vgXcDx-8kXj8upFkyuW3oHZ04LfGr_pvuhoxnj7INu4u2Rvk1NKRFhZo9KLxFPE76OMzIe9TuMr1b4LlFpcvYRcA0IZ6G9uf4gd47T9WvzpstUko7EnwqAY2Rm5zpxnvjUPA8NosVeFeHa0HcxpY/w640-h255/image11.png" width="640" /&gt;&lt;/div&gt;&lt;/image&gt;&lt;br /&gt;

&lt;p&gt;Some of the features we are launching include:&lt;/p&gt;

&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Unit test scenario generation&lt;/b&gt; generates unit test scenarios based on local code context.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"&gt;&lt;img alt="generate unit test scenarios based on local code context in Android Studio" border="0" height="359" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifU8pyRxF18XLONBMNuOGnasUMBgttTH3SXmZTavzPHv0bcPOtigdCy8YIR7jP_1ASK12hAoLGPvYL9MNYUS4aLeaW-fYlrUdoajE1OpA6TWBralbMQaY0ClMODkebKo0kVt5f648V4p3cH2c8ijT1brFZ6ulNoCYpX9cW8bydV5QytOAsFXHFVuHjubo/w640-h359/image3.gif" style="text-align: center;" width="640" /&gt;&lt;/blockquote&gt;&lt;br /&gt;


&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Build / sync error insights&lt;/b&gt; now provides improved coverage for build and sync errors.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="build sync error insights are now avaiable in Android Studio" border="0" height="289" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkK6hr9-SGXgg6YKl1aM4I_CPquQbNeheEJMheqTk-M7i5zqRn8rIDoYvRAmpUu6e6yUFYG8LWkzbjbNCn2ttAU9dehmqUf15QBm1jVns4ClgP8nLGeKlr9MK8oMkavQZVz-BUg9pBvchbot_pro4aP6y4KnR9Vak_EXlQHZ7Ewo2w4vPm1wld8o_HQBU/w640-h289/image6.png" style="text-align: center;" width="640" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;


&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;App Quality Insights&lt;/b&gt; explains and suggests fixes for observed crashes from Android Vitals and Firebase Crashlytics, and now allows you to use local code context for improved insights.
&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;img alt="save your frequently used prompts for future use with Gemini in Android Studio" border="0" height="438" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB2QsB5lRGfRl4ZfSuRA8RdAJjkKAhLejUsOvx3BRn-WDtt61eA1FLagqTnl9TESPGjbPqzJAoRLZDfxmI-gJqP152314hyoU8z0fIn8_r-B9HJSWfJjKBBcRWN6dcVKwS6xZvmBCD5SQBU8_y41_vVidbuC0d-alTarTm_K9Up8mOGCaxahaBm186nrI/w640-h438/image8.gif" style="text-align: center;" width="640" /&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;

&lt;h3&gt;A better Gemini in Android Studio for you&lt;/h3&gt;

&lt;p&gt;We recently surveyed many of you to see how AI-powered code completion has impacted your productivity, and 86% of respondents said they felt more productive. Please continue to provide feedback as you use Gemini in your day-to-day workflows. In fact, a few of you wanted to share some of your tips and tricks for how to get the most out of Gemini in Android Studio.&lt;/p&gt;&lt;br/&gt;

&lt;iframe allowfullscreen="" class="BLOG_video_class" height="398" src="https://www.youtube.com/embed/cmmlqsv3-5A" width="100%" youtube-src-id="cmmlqsv3-5A"&gt;&lt;/iframe&gt;&lt;br /&gt;


&lt;p&gt;Along with the &lt;a href="https://android-developers.googleblog.com/2024/10/gemini-nano-experimental-access-available-on-android.html" target="_blank"&gt;Gemini Nano&lt;/a&gt; APIs that you can integrate with your own app, Android developers now have access to Google's leading edge AI technologies across every step of their development journey — with Gemini in Android Studio central to that developer experience.&lt;/p&gt;

&lt;h3&gt;Get these new features in the latest versions of Android Studio&lt;/h3&gt;

&lt;p&gt;These features are all available to try today in the Android Studio &lt;a href="https://developer.android.com/studio/preview" target="_blank"&gt;canary channel&lt;/a&gt;. We expect to release many of these features in the upcoming Ladybug Feature Drop, to be released in the stable channel in late December — with the rest to follow shortly after.&lt;/p&gt;

&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Gemini Code Transforms - Modify and refactor your code within the editor&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Commit message generation - Automatically generate commit messages with Gemini&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Rethink and Rename - Get help renaming your classes, methods, and variables&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;  
&lt;li&gt;Prompt library - Save and recall your most commonly used prompts&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Compose Preview Generation - Generate previews for your composables with Gemini&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Generate documentation - Have Gemini help you document your code&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Unit test scenario generation - Generate unit test scenarios&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;Build / sync error insights - Ask Gemini for help in troubleshooting build and sync errors&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;li&gt;App Quality Insights - Insights on how you can fix crashes from Android Vitals and Firebase Crashlytics&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;

&lt;p&gt;As always, Google is committed to the &lt;a href="https://ai.google/responsibility/principles/" target="_blank"&gt;responsible use of AI&lt;/a&gt;. Android Studio won't send any of your source code to servers without your consent — which means you'll need to opt in to enable Gemini's developer assistance features in Android Studio. You can read more on Gemini in Android Studio's &lt;a href="https://developer.android.com/studio/preview/gemini/data-and-privacy" target="_blank"&gt;commitment to privacy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Try enabling Gemini in your project and tell us what you think on social media with #AndroidGeminiEra. We're excited to see how these enhancements help you build amazing apps!&lt;/p&gt;
</content><link href="http://android-developers.googleblog.com/feeds/7202248407282588895/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7202248407282588895" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7202248407282588895" rel="self" type="application/atom+xml"/><link href="http://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html" rel="alternate" title="Gemini in Android Studio, now helping you across the development lifecycle" 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/AVvXsEiVnu87IHEPK_zBwJnV1NKA94558Dm5_OifXPmT0M7cXGHph4OApNV6wFvohnsdqCWX4y7d6SKu8hr1fH4nTl2KVlht7sQxUGwmTtdttu308tbKp3X_-QtL_pshtOLdFly3cDkLJTl9uWWVy99Be5S9-stSrie15M9IhhU_xade_1WSKfeqxuOnDcK4P74/s72-c/Gemini-in-Android-Studio.png" width="72"/><thr:total>0</thr:total></entry></feed>