30 Nov 2023
Android Developers Blog
Android Studio Hedgehog is stable
Posted by Sandhya Mohan, Product Manager
Today, we are thrilled to announce the stable release of Android Studio Hedgehog 🦔 : The official IDE for building Android apps!
In this Android Studio release, we have upgraded the IntelliJ platform to 2023.1, with features designed to improve app performance and battery life, make it easier to upgrade applications to the latest Android version, and make it faster to develop using Jetpack Compose. Read on to learn more about how Android Studio Hedgehog can help supercharge your developer productivity.
App performance
Android vitals in App Quality Insights
In addition to helping you investigate crash reports for apps instrumented with the Firebase Crashlytics SDK, App Quality Insights now also includes Android vitals data from Google Play Console. With Android vitals, you can see crash reports for any app you publish to the Google Play Store without requiring additional instrumentation in your app. You can view Android vitals issues, filter them, and see crash insights from Play to quickly understand and resolve the cause of a crash, and jump from stack trace to code all from the App Quality Insights tool window. Learn more.
Note: If you don't have permission to view your app in the Play Console, request that the app admin share read-only access to only app quality information, by clicking Users and permissions > View app quality information (read-only) in the Play Console.

Power Profiler
The new Power Profiler shows power consumption on devices. It segments the power consumption information by subsystems called "Power Rails". This helps you visualize the correlation between power consumed and the actions occurring in your app. This approach of directly measuring power consumption differs from the legacy Energy Profiler, which only used a model to estimate energy consumption.
By understanding this information, you can potentially identify and fix power consumption issues in your app by running A/B tests to compare the power consumption of different algorithms, features or even different versions of your app.
Apps which are optimized for lower power consumption lead to an improved battery and thermal performance, eventually leading to an improved end user experience. Power Rails data is available on Pixel 6+ devices running Android 10+.

Coding productivity
Target Android 14 using Android SDK Upgrade Assistant
The SDK Upgrade Assistant provides a step by step wizard flow to help developers through targetSdkVersion upgrades. It pulls documentation directly into the IDE, saving you time and effort.
Android Studio Hedgehog adds support for upgrading projects to Android 14 (API Level 34). We've also added additional relevance filters so that unnecessary steps are removed - and in some cases, the upgrade assistant will pinpoint exactly where in code the changes need to be made.

New UI updates
In the Giraffe release, we launched a new UI for the IDE. This reimagined theme reduces visual complexity and provides easier access to essential features, resulting in a more modern and clean look and feel. We've listened to your feedback and, in Hedgehog, we've added updates for compact mode, vertical and horizontal splitting, and project tabs for Mac OS. If you have not yet tried the new UI, we encourage you to do so.

Device mirroring
You can now mirror your physical Android device in the Running Devices window in Android Studio. While mirroring your device's display directly via ADB over USB or Wi-FI to Android Studio, you can execute common actions such as starting and interacting with apps, rotating the screen, folding and unfolding the phone, changing the volume, and more - directly from within Android Studio. Learn more.

Embedded Layout Inspector
You now have the option to run the Layout Inspector directly in the Running Devices tool window while running your app on an embedded virtual device or mirrored physical device. This opt-in feature significantly improves performance of Layout Inspector, conserves screen real estate, helps organize your UI debugging workflow in a single tool window, and improves speed while inspecting your layout. In embedded mode, you can show a view hierarchy, inspect the properties of each view, navigate to code using "deep inspect" mode, and access other common Layout Inspector features. Enable it through Settings > Experimental > Layout Inspector

Live Edit updated manual mode shortcut
Live Edit has a new default shortcut for manual mode for: Control+\ (Command+\ for macOS). Manual mode is helpful in situations where you want to have precise control over when updates are deployed to the running application. For more information, see the video clip in Live Edit for Jetpack Compose.
Compose tools
Compose Preview's Gallery Mode
Gallery mode is a new mode in Compose Preview that lets you focus on one Preview at a time to conserve rendering resources. Use Gallery mode when iterating on UI and switch to other modes (Grid or List) when you need to see UI variants.

Compose State information in Debugger
When setting a breakpoint on a Composable function, the debugger now lists the parameters of the composable and their state, so you can more easily identify what changes might have caused unexpected recompositions.

Compose Multipreview templates
Android Studio Hedgehog includes support for the latest annotations added by the Compose Multipreview API, allowing developers to render common layout scenarios side-by-side while working with the Compose Preview.
The new annotations added include: @PreviewScreenSizes, @PreviewFontScales, @PreviewLightDark, and @PreviewDynamicColors

Build tools
New macro to specify JDK path
A new macro, #GRADLE_LOCAL_JAVA_HOME, makes it safer and easier to specify the Java* home path used for the Gradle daemon (background process) execution for your project by referencing your .gradle/config.properties file. This reduces errors related to incompatible Gradle and project JDK versions, since there is now a single source of truth for your Gradle JDK selection.
Starting with Android Studio Hedgehog, new projects will use #GRADLE_LOCAL_JAVA_HOME by default. Existing projects will automatically be migrated to the new macro after a successful sync, unless you're already using a macro like #JAVA_HOME.
[Windows-only] Minimize the impact of antivirus software on build speed
The Build Analyzer informs users if antivirus software may be impacting build performance. This can occur if antivirus software, such as Windows Defender, is performing real-time scanning of directories used by Gradle. Build Analyzer recommends a list of directories to exclude from active scanning, and, if possible, provides a link to add them to the Windows Defender folder exclusion list.
Use Firebase Test Lab devices with Gradle Managed Devices
Gradle Managed Devices can now target Firebase Test Lab devices, and you can utilize it to run your automated tests at scale. Use Gradle Managed Devices to select from a wide range range of both physical and virtual FTL devices, with support for test sharding for accelerated execution time. To use FTL devices, you need Android Gradle Plugin 8.2 with the latest Alpha version of the Firebase Test Lab Gradle plugin. Learn more.
Download Android Studio today!
Now is the time to download Android Studio Hedgehog to incorporate the new features into your workflow. As always, we appreciate any feedback on things you like, issues, or features you would like to see. If you find an issue, please check the known issues and file a bug if needed. Remember to also follow us on X (formerly known as Twitter), Medium, or YouTube for more Android development updates!
*Java is a trademark or registered trademark of Oracle and/or its affiliates.
30 Nov 2023 6:00pm GMT
29 Nov 2023
TalkAndroid
This is our first official look at the OnePlus 12
The OnePlus 12, launching in China on December 4th, refines the OnePlus 11's aesthetic and improves antenna signal performance and gaming latency.
Come comment on this article: This is our first official look at the OnePlus 12
29 Nov 2023 7:01pm GMT
Android Developers Blog
NordVPN boosted the speed of its login user flow by 60% using Baseline Profiles
Posted by Ben Weiss, Senior Developer Relations Engineer
NordVPN is a virtual private network (VPN) app that protects users while they're browsing the web by providing them a more secure and private connection. As a network utility, NordVPN's users deserve a responsive UI, allowing them to set up their protections at a moment's notice. That's why NordVPN developers recently integrated Baseline Profiles, a profile-guided optimization that helps Android developers improve an app's startup and runtime performance using ahead-of-time compilation.
Improving performance with Baseline profiles
As part of its product roadmap for 2023, the NordVPN team wanted to boost the application's performance. Before implementing Baseline Profiles, NordVPN's startup times on Android devices didn't meet the team's standards, prompting them to examine new ways to make the app run better.
After exploring ways to improve its runtime performance and streamline the login process for users, NordVPN developers identified an opportunity to make the app faster using Baseline Profiles. Baseline Profiles lets the Android Runtime (ART) know which code paths to optimize through Ahead-of-Time (AOT) compilation before an app launches, boosting speed, stability, and overall responsiveness during startup, when navigating through the app, and while viewing content.
"App speed and stability are essential for a better user experience, so we're always looking for new ways to improve NordVPN's performance," said Himanshu Singh, senior Android engineer at NordVPN. "We wanted to speed up the app's load time and make launch and navigation faster than ever."
By applying Baseline Profiles, NordVPN improved its launch speed by an average of 24%. Using tools like Android Vitals, the NordVPN team measured that it had reduced the application's cold start time from 4.3 seconds to 3.2 seconds, the warm start time from 2.7 seconds to 1.8 seconds, and the hot start time from 1 second to 0.7 seconds.
After implementation, NordVPN developers' also noticed that Baseline Profiles made it faster for users to login to the app, improving the user login flow. The login flow is measured from when a user starts an app to when a user is logged into it. Using the Macrobenchmark library to monitor the improvements, the team observed that the NordVPN app runs its login flow 60% faster than before.

Integrating and testing Baseline Profiles is easy
The ease of implementing Baseline Profiles impressed NordVPN developers. The available resources, in-depth documentation, and codelabs from Android allowed them to enhance the app's UX without having to write an extensive amount of code themselves.
Using the Macrobenchmark library, NordVPN developers quickly generated Baseline Profiles for the application. To do this, they used a Gradle managed device, which enabled them to create new profiles without a physical device. Using a Gradle Managed Device also allowed NordVPN developers to create fresh profiles for each app release build on their Continuous Integration platform. Looking forward, NordVPN developers plan to migrate Baseline Profile generation to the official Gradle plugin, which will further automate profile generation.
NordVPN developers combined development workflows to create an integration pipeline, allowing them to test the app under various conditions. Then, the Macrobenchmark library ran Baseline generation tests, pushing the latest Baseline Profiles into the code base.

A quick boost to app quality
After integrating Baseline Profiles into NordVPN's code, its developers saw immediate speed improvements. The engineering team assessed the app's overall speed after finishing the project and found that, beyond improving the app's launch times, applying Baseline Profiles led to a 29% improvement to overall in-app speed.
"We're constantly working to improve app quality, and Baseline Profiles integration has proven to be one of the most successful steps we've taken," said Šarūnas Rimša, product owner at NordVPN. "We're helping users access the services they're entitled to faster. What's not to like?"
Get started
Learn how you can improve your app's performance using Baseline Profiles.
29 Nov 2023 7:00pm GMT
Notes from Google Play: Celebrating another year of partnership and innovation
Posted by Sam Bright, Vice President & General Manager, Google Play
Hello everyone,
Since joining the team at the start of this year, I've been continuously inspired by our incredible community of people building apps and games, and it's been my privilege to support your hard work and creativity. In particular, it's been exciting to see you not only identify new user needs, but to develop innovative ways of solving them with your apps and games. This year, our annual Best of Play awards introduced new categories to recognize these achievements, including "Best with AI" and "Best multi-device app and game."
No matter where you are on your developer journey, whether you just published your first app or already reached a global audience, Google Play is committed to being your partner in growth. Here's a look back at some of the key tools, features, and programs we built this year to help you reach your full potential and build a successful business on Google Play.
Check out the video below or keep reading for more details about this year's updates.
New tools and features built in 2023
User growth and engagement:
- Developers can boost discovery and re-engagement with new ways to promote your most exciting moments, including launches, new content, and offers.
- Users are better able to find your high-quality apps and games for their devices with optimized Play Store experiences for large screens and wearables.
- With our store listing tools, you can craft more personalized and effective content with less effort, such as with our store listing AI helper and Google Translate-powered machine translation feature.
- It's now easier to discover new growth and engagement opportunities with the enhanced Play Console page dedicated to deep links.
- And for game businesses, the expanded Google Play Games on PC program can help your core players enjoy seamless and immersive gameplay across phones, tablets, Chromebooks, and Windows PC.
Monetization:
- Generate revenue more effectively with the ability to A/B test prices to optimize for local purchasing power at scale.
- Grow and retain your subscribers with our new subscription capabilities, such as the ability to offer different auto-renewing and prepaid plan prices per billing period.
- To help you optimize for a global audience, we've started automatically updating our min/max price ranges to reflect currency fluctuations against the US dollar. You'll also see a notification anytime we recommend a price adjustment for your in-app products.
- We added several popular local payment methods to our extensive library, including PicPay in Brazil and PayPay in Japan, and expanded our support of UPI in India.
- And with the introduction of our new alternative billing APIs, developers offering an alternative billing system alongside Google Play's can enjoy a more streamlined experience.
Privacy and security:
- To make outstanding tasks clearer and help you identify and fix issues more quickly, we made several improvements to help you navigate privacy and security on Play, including bringing key requirements and deadlines right into Play Console.
- We also updated the Play Integrity API to ensure that users experience your apps and games the way you intend.
Investing in our app and game community
This year, our Indie Games programs helped businesses of all sizes grow on Play. Through our Indie Games Fund, we awarded $2 million and offered hands-on support to 10 Latin American studios to help them grow their games on our platform. And for mentorship from Google and industry experts, early-career indie developers can apply for the Indie Games Accelerator from now until December 12, 2023.
We're also pushing for greater representation and equity in the developer community by giving $600,000 across 13 nonprofit organizations around the world to support more inclusive programming. For example, we've partnered with Global Game Jam and the IGDA Foundation to host a game jam that helps women across Asia and Latin America launch careers in game development.
And finally, we continued our tour of the world by sharing and celebrating your stories through #WeArePlay. This year, we spotlighted over 260 app and game businesses from Europe, Japan, India and more.
Looking ahead
I'm excited about the future of Google Play, which will see even more updates and improvements to the work we did this year.
For example, you may have noticed that we gave the Play Store a fresh look this year, with more visual components, new video capabilities, and fluid animations, and introduced new ways for people to discover, engage, and re-engage with your apps and games. In addition to new original editorial content and livestream events, we also developed new ways for users to be rewarded for their play, such as with time-bound offers and promotions.
Next year, we'll build on that investment, going deeper to provide more value to users - and, in turn, to your businesses. We're looking to:
- Continue to improve gaming experiences across platforms,
- Direct users to the right experiences, within and across apps,
- Help folks get the most out of their devices, and
- Make it easier for users and developers to transact when they want to.
As you know, Google Play is more than an app marketplace. We connect people with the experiences they'll love, wherever they are, on whatever device they're using. A big part of this is our continued focus on making it easier for people to find your latest, most relevant app and game content. It also means going beyond the Play Store to deliver this content to people across their devices, when and where it's most relevant.
Once again, I want to thank you for all the hard work you've put into making Google Play the best place for apps and games. I can't wait to see what you build next.
On behalf of all of us at Google Play, happy holidays and best wishes for an amazing 2024.
29 Nov 2023 3:00pm GMT
23 Nov 2023
TalkAndroid
Save at least 40% on these Ugreen chargers, power banks, and USB-C Hubs this Black Friday weekend
Here to help you keep your smartphone and laptop powered up is Ugreen with a bunch of charging accessories that are hugely discounted this Black Friday weekend. Whether you are on the hunt for a slim 30W charger, a 200W USB-C Desktop charge, 25,000mAh power bank or even a power station and solar panel combo, […]
Come comment on this article: Save at least 40% on these Ugreen chargers, power banks, and USB-C Hubs this Black Friday weekend
23 Nov 2023 3:13pm GMT
The OnePlus 12 will be unveiled on December 4th
Every year, smartphone brands attempt to launch their flagship models that little bit earlier than they did the year before; Samsung has already scheduled its Galaxy S24 series announcement for mid-January and now we have confirmation that the OnePlus 12 will launch in China a few weeks earlier than usual. In commemoration of its 10th […]
Come comment on this article: The OnePlus 12 will be unveiled on December 4th
23 Nov 2023 2:04pm GMT
MediaTek’s new Dimensity 8300 SoC benefits from hefty performance and power efficiency boosts
After unveiling the new Dimensity 9300 flagship processor, MediaTek has just announced the Dimensity 8300 chipset which will power a range of affordable but still premium smartphones. As with the flagship chip, the Dimensity 8300 features on-device generative AI plus hefty performance and power efficiency boosts. Unlike the 9300 which went big on all its […]
Come comment on this article: MediaTek's new Dimensity 8300 SoC benefits from hefty performance and power efficiency boosts
23 Nov 2023 11:25am GMT
17 Nov 2023
TalkAndroid
Canon’s new PowerShot V10 is designed for Vloggers
If you are looking at upgrading your vlogging journey but without spending a ton of money on heaps of equipment, Canon's new PowerShot V10 could be the all-in-one solution you've been looking for. Designed specifically for vloggers, the PowerShot V10 is lightweight enough to fit in your pocket and powerful enough to feature high-quality audio […]
Come comment on this article: Canon's new PowerShot V10 is designed for Vloggers
17 Nov 2023 7:45pm GMT
MediaTek’s RedCap solution aims to bring 5G speeds to IoT devices in the home and beyond
Connected devices in the home are great for convenience and adding ways to make life both more confortable and feature rich. IoT devices, as they are called, is in the process of benefiting from a huge boost in performance thanks to MediaTek's new RedCap T300 and M60 5G Modem IP solution which brings 5G speeds […]
Come comment on this article: MediaTek's RedCap solution aims to bring 5G speeds to IoT devices in the home and beyond
17 Nov 2023 6:46pm GMT
[Deal] Don’t wait for BlackFriday – save a massive $400 on Narwal’s Freo Robot Vacuum & Mop right now
If you are anything like me you then you might believe that doing household chores sucks. I'm just being honest here. I'd far rather be outside in the sun than be stuck in the house vacuuming and mopping the floors. Luckily, we live in an enlightened age where we can enlist the help of a […]
Come comment on this article: [Deal] Don't wait for BlackFriday - save a massive $400 on Narwal's Freo Robot Vacuum & Mop right now
17 Nov 2023 5:59pm GMT
Save up to $300 on your new Motorola smartphone this Black Friday
Black Friday week/month is upon us and for those looking at getting a shiny new smartphone Motorola is reducing a number of its latest handsets, with savings of up to $300 to be had. Whether its the new Razr+ foldable, the powerful Edge+ 2023, or the budget-conscious Moto G 5G 2023, there's a deal to […]
Come comment on this article: Save up to $300 on your new Motorola smartphone this Black Friday
17 Nov 2023 5:20pm GMT
15 Nov 2023
Android Developers Blog
The latest updates to power your growth on Google Play
Posted by Paul Feng - Vice President of Product Management, Google Play
Our annual Playtime event series kicks off tomorrow, with announcements from our product teams and insights from local Google experts. If you're not one of the attendees joining us in person this year, here's a sneak preview of the product news we'll be sharing to help you grow successful, long-term businesses on Google Play.
Check out our top five updates in the video below, or read on for the full list.
More ways to boost growth and engagement
This year, we improved three of our most impactful offerings: custom store listings, the deep links page in Play Console, and Google Play Games on PC.
Custom store listings enable you to optimize your conversion rate and acquisitions by creating different messaging for different user segments. Many of you have already been using your 50 custom store listings to tailor your messaging by country, pre-registration status, Google Ads campaigns, or to inactive users.
Now, we're making it even easier to create and manage your listings with the ability to:
- Save your listings as a draft to continue editing later
- Schedule your listings to publish when you want and for the duration you choose
- Test your listings with a portion of your audience before rolling them out
Last year, we launched a new Play Console page dedicated to deep links to help you discover additional opportunities for growth and engagement. This page flags broken deep links and provides detailed guidance on how to fix them, as well as helps you rationalize your web-to-app mapping by reviewing your top website URLs and their deep link status.
This year, we improved the page with new metrics and insights to help you make the most of your deep link strategy. You can now:
- Make sure the landing pages from your ad campaigns are deep-linked
- See the percentage of your top-performing URLs that have been deep-linked, so you can see where you have an opportunity to direct more users to your app
- Find out what percentage of users with your app installed would have the URL open inside the app

For game developers, we've expanded our Google Play Games on PC beta to help you grow your user base. Since we launched the program last year, we've seen a tremendous amount of growth. Google Play Games on PC currently reaches users in more than 120 countries, offering over 3,000 titles including Clash of Clans, Clash Royale, Free Fire MAX, and Angry Birds 2*. Learn more about how Google Play Games on PC has improved the quality of the gaming experience to accelerate your growth.
More ways to reach your monetization goals
To help you more effectively generate revenue from your audiences, we're rolling out new features on our commerce platform to help you optimize your prices, reach more buyers, and better manage user purchases.
At this year's I/O, we launched price experiments for in-app products, allowing you to test price points and optimize for local purchasing power at scale. Next month, you'll be able to:
- Save your experiments as drafts to edit later
- Remove a poorly performing variant during the experiment
- See warning notifications for potential price configuration issues
- Apply the "winning" price to any and all products within the experiment
We've also started automatically updating our min/max price ranges to reflect currency fluctuations against the US dollar, and you'll see a new Play Console Inbox notification anytime we recommend a price adjustment of your in-app products.
Additionally, we've made several updates to help you better reach a global audience. Now you can more efficiently display available products and offers to users based on regional availability with the new getBillingConfigAsync API, which provides the user's applicable country for Google Play. Our extensive payment method library now includes popular payment methods PayPay eWallet and cash top-ups at over 14,500 Lawson stores throughout Japan, cash top-ups at over 18,000 7-Eleven stores in Mexico, ShopeePay eWallet in the Philippines, Verve Card in Nigeria, and China UnionPay Card throughout select East Asian and Southeast Asian markets.
Coming soon, real-time developer notifications will expand to include notifications for one-time purchases and voided purchases such as cancellations, revocations, and chargebacks. These will give you more visibility and help you better manage purchases, including making quicker entitlement adjustments and taking action against potential fraud and abuse.
We're also continuing our commitment to user choice billing, giving you more flexibility and choice when monetizing on Google Play. Developers enrolled in user choice billing can offer an additional billing system alongside Google Play's in over 35 markets. And now, we're making the alternative billing APIs available to participating developers with users across these markets. With the APIs integrated, developers can look forward to a more streamlined experience:
- User choice screens rendered by Google Play: you will no longer need to build and maintain the information and/or choice screens as required by UX guidelines
- Alternative billing settings in Play Console: manage alternative billing settings for eligible apps, including market enrollment, payment method logo, and more
- Simplified transaction reporting: removing manual touchpoints
- Google Play Top Charts: transactions reported via API are reflected on Top Charts
- Improved reporting: transactions reported via API enable more detailed developer reporting - including exchange rates, associated app package ID, service fee rates, and more

Helping you deliver high-quality experiences
To connect people with experiences they'll love, we continuously invest in new tools, features, and programs to help you build high-quality apps and games. As a reminder, we measure quality across four key pillars: core value, user experience, technical quality, and privacy and security.
For example, we're increasing the app bundle size limit from 150MB to 200MB to help you deliver more functionality to improve your core value and user experience. Because Play will continue to deliver only the relevant content, users will only experience your enhanced functionality and not increased app size.
To help you improve your technical quality, we're excited to announce some new features in Android vitals to help you monitor your title against per-device bad behavior thresholds and effectively manage and debug issues. You can now:
- Monitor and detect issues with release rollouts using hourly vitals data
- Analyze longer-term trends in technical performance with 3 years of Android vitals data
- Prioritize devices by business impact with per-device business metrics like store listing impressions, average rating, and daily active device metrics
- Get notified via email and Play Console Inbox when your per-device bad behavior threshold exceeds 8%
- Analyze Android vitals crash event data and potential fixes alongside your code directly within Android Studio via App Quality Insights
- Grant Play Console teammates limited access to app quality data only
And finally, to help ensure you're delivering the best experience to your users while you're on the go, check out the recently refreshed Play Console app, where you can:
- Monitor the metrics you care about
- View and reply to reviews
- Monitor and manage your apps across tracks and releases
- Manage your app's orders and issue refunds
- Receive messages from Google Play
Protecting your business with the Play Integrity API
Over the last few years, we've continued to invest in the Play Integrity API to ensure that users experience your apps and games the way you intend.
Today, we're announcing several major updates, including:
- Low-latency Play Integrity API standard requests are leaving beta and becoming available to all developers, giving you integrity verdicts that are 10X faster
- A new opt-in Play Protect signal checks whether Play Protect is on or off and whether any known malware is detected
- A new Play Integrity API report and improved controls in Play Console helps you spot issues and adapt your anti-abuse strategy with an analysis and breakdown of API responses across your install base
- SDK providers now have the option to set up and manage their Play Integrity API integration using the Google Play SDK Console, giving them control over their quota and letting them customize API responses
We hope you take advantage of all these new features to continue growing your businesses on Google Play. Please continue sharing your feedback so we can build the tools you need to power your growth. Thank you for being part of the Google Play community.
15 Nov 2023 5:00pm GMT
Google Play Games on PC brings new features to accelerate growth
Posted by Arjun Dayal, Director, Google Play Games
Since we launched Google Play Games on PC beta last year, the product has seen a tremendous amount of growth. Now offering over 3,000 titles, Google Play Games on PC currently reaches users in more than 120 countries, providing a wide range of games across genres for players to enjoy. Our catalog continues to grow with popular mobile titles including Clash of Clans, Clash Royale, Free Fire MAX, and Angry Birds 2 available today*.
We've been engaging with our amazing community of players and have been focused on increasing the quality of the gaming experience by adding new gameplay capabilities. We've recently added support for microphones and popular game controllers, as well as provided dynamic display options that let players select a screen resolution up to 4K.
We've also streamlined the user install journey for Google Play Games on PC to make game discovery easier. When a user visits the Play Store from a Windows PC, the games homepage will now showcase PC optimized games that can be installed directly on their PC.

We're excited to bring more features to Google Play Games on PC to our growing community of players and unlock opportunities for developers to expand their reach. If you're ready to make Google Play Games on PC a part of your growth strategy, learn more about new features and optimization guides from our developer site.
15 Nov 2023 4:44pm GMT
14 Nov 2023
Android Developers Blog
Snapchat integrated new camera features 50% faster with the Camera2 Extensions API
Posted by Fred Chung, Android Developer Relations
Snapchat is a visual messaging app that enhances Snapchatters' relationships with friends, family, and the world. It opens to the camera and offers millions of augmented reality and AI-powered Lenses for self expression, learning, and play. Ensuring Snapchatters can easily capture and share their lives with close friends and family is a priority for Snapchat, and they're always exploring new ways to improve the overall app experience.
As part of this, the Snapchat team added new camera features into the app using Android's Camera2 Extensions API, which allows developers to access various capabilities that OEMs have implemented on various devices, like Night Mode and Bokeh. Thanks to Android's intuitive API, the Snapchat team implemented new camera features 50% faster than before.
Camera2 Extensions API gives access to advanced features
The Snapchat team wanted to optimize the application for the expanding selection of Android devices, knowing many OEMs differentiate their devices with their respective camera technologies. As Snapchat is a primarily visual app that works with a device's camera, the team optimizes the app to take full advantage of each device's unique hardware.
"We wanted to leverage each OEM's software to enhance the Snapchat experience on Android," said Ye Tian, a software engineer at Snapchat. "This would help the app achieve higher-quality Snaps that are comparable to what a device's native camera offers."

What started as a goal to improve the app's low-light capabilities led to much more. The Snapchat team worked on finding new ways to improve the app's camera capabilities by implementing features like night mode, portrait mode, face retouch, tap-to-focus, zoom, and more.
"Our collaboration with Google Pixel paved the way for collaboration with other OEMs to implement night mode and super-night mode in their devices with very minimal code changes," said Ye. "The Camera2 Extensions API is flexible and extensive. Snapchat can now use it to build full-fledged applications on demand without negatively impacting performance and stability."
The implementation via the Camera2 Extension API made it easy for Snapchat developers to add more camera features into the app. And using the extensions made available with Android's camera API, Snapchat integrated new camera features 50% faster when compared to the typical industry-standard approaches it used in the past.

More opportunities on more devices
The Snapchat team was happy to give its users a more cohesive experience using the Camera2 Extensions API. Thanks to the extensions provided in the API, developers easily improved the app's camera on a range of manufacturer devices using the Android platform, and much faster than before.
"I enjoy the diversity of the Android platform and utilizing the unique advantages of each mobile phone manufacturers' devices," said Ye. "It helps us bring their cutting-edge innovations into the Snapchat app, allowing Snapchatters to better capture their life moments."
Snapchat's team looks forward to working with more OEMs to further improve the app's processing capabilities across devices using the Camera2 Extensions API. They're also looking forward to improving the app's backward compatibility using the new API, which will allow even more users to benefit from the extensions.
"I would recommend using Camera2 Extension API. It provides extensive functionalities and stable performance to improve the velocity that developers can deliver features," said Ye.
Get started
Learn how to increase your app's camera capabilities with the Camera2 Extensions API.
14 Nov 2023 10:00pm GMT
TalkAndroid
[Promoted] BLUETTI Black Friday 2023: Exclusive Power Station Deals and Exciting Activities
The countdown to Black Friday has begun, and this year, BLUETTI is set to light up the holiday season with a dazzling array of discounts, gifts, exclusive offers, and more excitingly, a new BLUETTI AC200L power station. It's time to mark your calendar because from November 9th to November 17th, BLUETTI's Early Black Friday Access and […]
Come comment on this article: [Promoted] BLUETTI Black Friday 2023: Exclusive Power Station Deals and Exciting Activities
14 Nov 2023 7:23pm GMT
Android Developers Blog
Bringing New Input Support to Desktop AVD
Posted by Joshua Hale - Software Engineer
As large screens become increasingly important within the Android app ecosystem, we are committed to enhance tools to help Android developers adapt their apps for these large screen form factors. In doing so, we strive to ensure that we can bring impactful tools to enhance the overall experience for building for all large screens such as foldables, tablets, and Chromebooks.
Over the last year, the team has worked on bringing Android 13 to the Desktop AVD, along with some additional enhancements to input support within the emulator. The Android 13 release of the Desktop AVD is now available within Android Studio. To test using this emulator, create a new virtual device.
What is the Desktop AVD?
Android Studio comes bundled with various virtual devices that run on different API levels and architectures. These emulators help developers test Android apps across a variety of devices, allowing for testing across different screen sizes, form factors, and APIs.
When an Android app runs on a Chromebook, it uses functionality that mirrors desktop behaviors, such as minimizing, maximizing, or resizing to a user-specified size. The Desktop Android Virtual Device (AVD) is an emulator that allows testing in a freeform windowing mode, similar to a Chromebook, to support this functionality.
For a deeper dive into the Desktop AVD, check out Desktop AVD in Android Studio.

What enhancements come with the Android 13 desktop AVD?
Most laptops use a keyboard-and it's a common input device for increased productivity with tablets and foldables. Prior to Android 13, the Desktop AVD relied solely on uncustomizable input mapping built into Android Studio, which can cause friction points for users who rely on physical devices for mapped input and shortcuts. The Android 13 release of the Desktop AVD adds support for common keyboard interactions with Android apps. You can now test shortcuts, support keys, and mouse support to help you adhere to the large screen app quality guidelines.
Keyboard Shortcuts
The majority of apps within Google Play are designed for mobile usage and as such do not always support keyboard interactions. In Android 13, the Desktop AVD adds support for commonly used shortcuts, such as Ctrl+C (Copy) and Ctrl+V (Paste). These shortcuts can be used when copying text from a TextView/Text composable or pasting text into an EditText/TextField. These shortcuts are intercepted by the system and automatically applied.
Custom shortcuts (which are not intercepted by the system) are also included in this release. An example of this type of shortcut: a media player app that uses the Spacebar to play or pause media. You must use the new Hardware Input feature within Android Studio Hedgehog to use custom shortcuts. This will allow Android Studio to pass custom shortcuts directly to the emulator. If this is not enabled, Android Studio may consume the key combination.
Support keys
Android 13 supports additional keymappings for support keys. These keys are mapped to controls that are similar to experiences for keyboard shortcuts on a desktop. Some examples of these support keys include:
- Esc: Dismisses pop-ups and notifications.
- Delete / Backspace: Deletes text within an EditText or TextField
- Arrow Keys: Provides in-app navigation (Arrow Up/Down to scroll).
Mouse support
In addition to enhanced keyboard support, there are additional mouse controls integrated into the Desktop AVD. Using the scroll wheel sends a mouse scroll event to the app that has input focus. Right-clicking the mouse sends a right-click event-which can be used to show context menus if the app supports it.
Where can you start?
Large screen app quality provides guidance around creating high quality large screen apps across all form factors, outlining a comprehensive set of quality requirements for most types of Android apps. Not all requirements need to be met, but it's best practice for you to adhere to the requirements that make sense for your apps.
Create a desktop emulator today in Android Studio Hedgehog to see how your Android app responds to keyboard and mouse inputs and freeform window resizing.
14 Nov 2023 6:00pm GMT
13 Nov 2023
Android Developers Blog
The secret to Android's improved memory on 1B+ Devices: The latest Android Runtime update
Posted by Santiago Aboy Solanes - Software Engineer
The Android Runtime (ART) executes Dalvik bytecode produced from apps and system services written in the Java or Kotlin languages. We constantly improve ART to generate smaller and more performant code. Improving ART makes the system and user-experience better as a whole, as it is the common denominator in Android apps. In this blog post we will talk about optimizations that reduce code size without impacting performance.
Code size is one of the key metrics we look at, since smaller generated files are better for memory (both RAM and storage). With the new release of ART, we estimate saving users about 50-100MB per device. This could be just the thing you need to be able to update your favorite app, or download a new one. Since ART has been updateable from Android 12, these optimizations reach 1B+ devices for whom we are saving 47-95 petabytes (47-95 millions of GB!) globally!
All the improvements mentioned in this blog post are open source. They are available through the ART mainline update so you don't even need a full OS update to reap the benefits. We can have our upside-down cake and eat it too!
Optimizing compiler 101
ART compiles applications from the DEX format to native code using the on-device dex2oat tool. The first step is to parse the DEX code and generate an Intermediate Representation (IR). Using the IR, dex2oat performs a number of code optimizations. The last step of the pipeline is a code generation phase where dex2oat converts the IR into native code (for example, AArch64 assembly).
The optimization pipeline has phases that execute in order that each concentrate on a particular set of optimizations. For example, Constant Folding is an optimization that tries to replace instructions with constant values like folding the addition operation 2 + 3 into a 5.

The IR can be printed and visualized, but is very verbose compared to Kotlin language code. For the purposes of this blog post, we will show what the optimizations do using Kotlin language code, but know that they are happening to IR code.
Code size improvements
For all code size optimizations, we tested our optimizations on over half a million APKs present in the Google Play Store and aggregated the results.
Eliminating write barriers
We have a new optimization pass that we named Write Barrier Elimination. Write barriers track modified objects since the last time they were examined by the Garbage Collector (GC) so that the GC can revisit them. For example, if we have:

If an instruction may trigger a GC (for example, Invokes and SuspendChecks), we wouldn't be able to eliminate write barriers. In the following example, we can't guarantee a GC won't need to examine or modify the tracking information between the modifications:
Implementing this new pass contributes to 0.8% code size reduction.
Implicit suspend checks
Let's assume we have several threads running. Suspend checks are safepoints (represented by the houses in the image below) where we can pause the thread execution. Safepoints are used for many reasons, the most important of them being Garbage Collection. When a safepoint call is issued, the threads must go into a safepoint and are blocked until they are released.
The previous implementation was an explicit boolean check. We would load the value, test it, and branch into the safepoint if needed.

Implicit suspend checks is an optimization that eliminates the need for the test and branch instructions. Instead, we only have one load: if the thread needs to suspend, that load will trap and the signal handler will redirect the code to a suspend check handler as if the method made a call.

Going into a bit more detail, a reserved register rX is pre-loaded with an address within the thread where we have a pointer pointing to itself. As long as we don't need to do a suspend check, we keep that self-pointing pointer. When we need to do a suspend check, we clear the pointer and once it becomes visible to the thread the first LDR rX, [rX] will load null and the second will segfault.
The suspend request is essentially asking the thread to suspend some time soon, so the minor delay of having to wait for the second load is okay.
This optimization reduces code size by 1.8%.
Coalescing returns
It is common for compiled methods to have an entry frame. If they have it, those methods have to deconstruct it when they return, which is also known as an exit frame. If a method has several return instructions, it will generate several exit frames, one per return instruction.
By coalescing the return instructions into one, we are able to have one return point and are able to remove the extra exit frames. This is especially useful for switch cases with multiple return statements.
Coalescing returns reduces code size by 1%.
Other optimization improvements
We improved a lot of our existing optimization passes. For this blog post, we will group them up in the same section, but they are independent of each other. All the optimizations in the following section contribute to a 5.7% code size reduction.
Code Sinking
Code sinking is an optimization pass that pushes down instructions to uncommon branches like paths that end with a throw. This is done to reduce wasted cycles on instructions that are likely not going to be used.
We improved code sinking in graphs with try catches: we now allow sinking code as long as we don't sink it inside of a different try than the one it started in (or inside of any try if it wasn't in one to begin with).
In the first example, we can sink the Object creation since it will only be used in the if(flag) path and not the other and it is within the same try. With this change, at runtime it will only be run if flag is true. Without getting into too much technical detail, what we can sink is the actual object creation, but loading the Object class still remains before the if. This is hard to show with Kotlin code, as the same Kotlin line turns into several instructions at the ART compiler level.
In the second example, we cannot sink the code as we would be moving an instance creation (which may throw) inside of another try.
Code Sinking is mostly a runtime performance optimization, but it can help reduce the register pressure. By moving instructions closer to their uses, we can use fewer registers in some cases. Using fewer registers means fewer move instructions, which ends up helping code size.
Loop optimization
Loop optimization helps eliminate loops at compile time. In the following example, the loop in foo will multiply a by 10, 10 times. This is the same as multiplying by 100. We enabled loop optimization to work in graphs with try catches.
In foo, we can optimize the loop since the try catch is unrelated.
In bar or baz, however, we don't optimize it. It is not trivial to know the path the loop will take if we have a try in the loop, or if the loop as a whole is inside of a try.
Dead code elimination - Remove unneeded try blocks
We improved our dead code elimination phase by implementing an optimization that removes try blocks that don't contain throwing instructions. We are also able to remove some catch blocks, as long as no live try blocks point to it.
In the following example, we inline bar into foo. After that, we know that the division cannot throw. Later optimization passes can leverage this and improve the code.
Just removing the dead code from the try catch is good enough, but even better is the fact that in some cases we allow other optimizations to take place. If you recall, we don't do loop optimization when the loop has a try, or it's inside of one. By eliminating this redundant try/catch, we can loop optimize producing smaller and faster code.
Dead code elimination - SimplifyAlwaysThrows
During the dead code elimination phase, we have an optimization we call SimplifyAlwaysThrows. If we detect that an invoke will always throw, we can safely discard whatever code we have after that method call since it will never be executed.
We also updated SimplifyAlwaysThrows to work in graphs with try catches, as long as the invoke itself is not inside of a try. If it is inside of a try, we might jump to a catch block, and it gets harder to figure out the exact path that will be executed.
We also improved:
- Detection when an invoke will always throw by looking at their parameters. On the left, we will mark divide(1, 0) as always throwing even when the generic method doesn't always throw.
- SimplifyAlwaysThrows to work on all invokes. Previously we had restrictions for example don't do it for invokes leading to an if, but we could remove all of the restrictions.
Load Store Elimination - Working with try catch blocks
Load store elimination (LSE) is an optimization pass that removes redundant loads and stores.
We improved this pass to work with try catches in the graph. In foo, we can see that we can do LSE normally if the stores/loads are not directly interacting with the try. In bar, we can see an example where we either go through the normal path and don't throw, in which case we return 1; or we throw, catch it and return 2. Since the value is known for every path, we can remove the redundant load.
Load Store Elimination - Working with release/acquire operations
We improved our load store elimination pass to work in graphs with release/acquire operations. These are volatile loads, stores, and monitor operations. To clarify, this means that we allow LSE to work in graphs that have those operations, but we don't remove said operations.
In the example, i and j are regular ints, and vi is a volatile int. In foo, we can skip loading the values since there's not a release/acquire operation between the sets and the loads. In bar, the volatile operation happens between them so we can't eliminate the normal loads. Note that it doesn't matter that the volatile load result is not used-we cannot eliminate the acquire operation.
This optimization works similarly with volatile stores and monitor operations (which are synchronized blocks in Kotlin).
New inliner heuristic
Our inliner pass has a wide range of heuristics. Sometimes we decide not to inline a method because it is too big, or sometimes to force inlining of a method because it is too small (for example, empty methods like Object initialization).
We implemented a new inliner heuristic: Don't inline invokes leading to a throw. If we know we are going to throw we will skip inlining those methods, as throwing itself is costly enough that inlining that code path is not worth it.
We had three families of methods that we are skipping to inline:
- Calculating and printing debug information before a throw.
- Inlining the error constructor itself.
- Finally blocks are duplicated in our optimizing compiler. We have one for the normal case (i.e. the try doesn't throw), and one for the exceptional case. We do this because in the exceptional case we have to: catch, execute the finally block, and rethrow. The methods in the exceptional case will now not be inlined, but the ones in the normal case will.
Constant folding
Constant folding is the optimization pass that changes operations into constants if possible. We implemented an optimization that propagates variables known to be constant when used in if guards. Having more constants in the graph allows us to perform more optimizations later.
In foo, we know that a has the value 2 in the if guard. We can propagate that information and deduce that b must be 4. In a similar vein, in bar we know that cond must be true in the if case and false in the else case (simplifying the graphs).
Putting it all together
If we take into account all code size optimizations in this blog post we achieved a 9.3% code size reduction!
To put things into perspective, an average phone can have 500MB-1GB in optimized code (The actual number can be higher or lower, depending on how many apps you have installed, and which particular apps you installed), so these optimizations save about 50-100MB per device. Since these optimizations reach 1B+ devices, we are saving 47-95 petabytes globally!
Further reading
If you are interested in the code changes themselves, feel free to take a look. All the improvements mentioned in this blog post are open source. If you want to help Android users worldwide, consider contributing to the Android Open Source Project!
- Write barrier elimination: 1
- Implicit suspend checks: 1
- Coalescing returns: 1
- Code sinking: 1, 2
- Loop optimization: 1
- Dead code elimination: 1, 2, 3, 4
- Load store elimination: 1, 2, 3, 4
- New inlining heuristic: 1
- Constant folding: 1
Java is a trademark or registered trademark of Oracle and/or its affiliates
13 Nov 2023 8:00pm GMT
09 Nov 2023
TalkAndroid
Motorola celebrates Moto G’s tenth anniversary with savings of up to $100
When you think of affordable smartphones that pack a punch, Motorola's Moto G series has almost certainly made its way into the reckoning at one time or another. With the original Moto G having launched back in 2013, Motorola is now celebrating both the tenth anniversary of the series and the sale of over 200 […]
Come comment on this article: Motorola celebrates Moto G's tenth anniversary with savings of up to $100
09 Nov 2023 6:07pm GMT
Android Developers Blog
Ensuring high-quality apps on Google Play
Posted by Kobi Gluck, Director of Product Management, Google Play
Every day, Google Play helps billions of people around the world discover engaging, helpful, and enriching experiences on their devices. Maintaining consistently high app quality across these experiences is our top priority, which is why we continuously invest in new tools, features, and programs to help developers deliver the best apps and games.
Previously, we've highlighted our efforts to amplify the highest-quality apps on Google Play, as well as steer users away from lower-quality ones. Today, we're sharing an update on this work and introducing some new policies and programs to boost app quality across the platform and connect people with experiences they'll love, wherever they are, on whatever device they're using.
Helping existing developers comply with our updated verification requirements
Earlier this year, we announced that all developers must meet an expanded set of verification requirements before publishing apps on Google Play, to help users make informed choices, prevent the spread of malware, and reduce fraud. We've already rolled out the requirements for developers creating new Play Console developer accounts.
Today, we're sharing how developers with existing accounts can complete these verifications to comply with the updated Play Console requirements policy. We know that developers of different types and sizes have different priorities, and that it might take some developers longer to verify than others. Because of this, we're allowing you to choose your own deadline by which to complete account verification.
Starting today, you can choose your preferred deadline in Play Console. Deadlines are available on a first-come, first-served basis, so choose your deadline early to guarantee a timeframe that works for you. If you don't choose a deadline before February 29, 2024, we'll assign one for you automatically.
Required app testing for all new personal developer accounts
Developers who regularly use Play's app testing tools before publishing release higher-quality apps and games, which can lead to higher ratings and more success on Google Play. In fact, apps that use our testing tools have on average 3 times the amount of app installs and user engagement compared to those that don't.
To help developers reap these benefits, developers with newly created personal Play Console accounts will soon be required to test their apps with at least 20 people for a minimum of two weeks before applying for access to production. This will allow developers to test their app, identify issues, get feedback, and ensure that everything is ready before they launch. Developers who create new personal developer accounts will start seeing this requirement in Play Console in the coming days.
Increased investment in app review
As more developers use new technologies in their mobile apps, apps on Play are becoming more sophisticated - but so are abuse methodologies. To ensure we continue to provide a safe and trusted experience, our global review teams now spend more time assessing new apps to make sure they provide a valuable user experience that does not deceive or defraud users, either via the app or off-Play activity, and complies with our policies.
While we do not anticipate significant changes to our overall app review timelines, it may take us longer to review a small portion of apps, such as apps designed for children or that request certain device permissions. These deeper reviews help ensure that users are engaging in safe and trusted experiences through Google Play.
Connecting users to great, trustworthy apps
Given the global reach and regional diversity of the Android ecosystem, it's important that every Play user can easily discover the best content for their needs and not be limited to a single recommendation. To continue providing great content for users that rewards developer investment in quality, we've already begun:
- Providing users with information on whether an app may not perform as well on their device, including phones, large screens, and wearables and
- Surfacing more high-quality local and regional content
Next year, we'll add new signifiers to app listings to help users find what they're looking for, starting with a badge identifying official government apps.
All of these changes are designed to help connect people with safe, high-quality, useful, and relevant experiences they'll love, wherever they are and on whatever device they're using. Thank you for your ongoing investment in the quality of your user experiences. We look forward to continuing to provide you with the platform that helps you supercharge your growth and success.
09 Nov 2023 5:00pm GMT
07 Nov 2023
TalkAndroid
TCL’s NXTPAPER 11 Tablet with a paper-like display is now on sale
While the holy grail of color e-ink displays with fast refresh rates remain a futuristic dream, TCL's NXTPAPER 11 Tablet sports a matte finish with a bright textured screen to provide a paper-like visual experiance . With blue light emissions reduced by up to 61%, the NXTPAPER 11 Tablet could be the e-reader alternative that […]
Come comment on this article: TCL's NXTPAPER 11 Tablet with a paper-like display is now on sale
07 Nov 2023 7:43pm GMT
Android Developers Blog
Order Files in Android
Posted by Aditya Kumar - Software Engineer
Context
Binary layout using a symbol order file (also known as binary order file or linker order file) is a well-known link-time optimization. The linker uses the order of symbols in order file to lay out symbols in the binary. Order file based binary layout improves application launch time as well as other critical user journeys. Order file generation is typically a multi-step process where developers use different tools at every stage. We are providing a unified set of tools and documentation that will allow every native app developer to leverage this optimization. Both Android app developers and the AOSP community can benefit from the tools.
Background
Source code is typically structured to facilitate software development and comprehension. The layout of functions and variables in a binary is also impacted by their relative ordering in the source code. The binary layout impacts application performance as the operating system has no way of knowing which symbols will be required in future and typically uses spatial locality as one of the cost models for prefetching subsequent pages.
But the order of symbols in a binary may not reflect the program execution order. When an application executes, fetching symbols that are not present in memory would result in page faults. For example, consider the following program:
int foo() { /* */ } int bar() { /* */ } // Other functions... int main() { bar(); foo();
Which gets compiled into:
When Test.app starts, its entrypoint _main is fetched first then _bar followed by _foo. Executing Test.app can lead to page faults for fetching each function. Compare this to the following binary layout where all the functions are located in the same page (assuming the functions are small enough).
In this case when _main gets fetched, _bar and _foo can get fetched in the memory at the same time. In case these symbols are large and they are located in consecutive pages, there is a high chance the operating system may prefetch those pages resulting in less page faults.
Because execution order of functions during an application lifecycle may depend on various factors it is impossible to have a unique order of symbols that is most efficient. Fortunately, application startup sequence is fairly deterministic and stable in general. And it is also possible to build a binary having a desired symbol order with the help of linkers like lld which is the default linker for Android NDK toolchain.
Order file is a text file containing a list of symbols. The linker uses the order of symbols in order file to lay out symbols in the binary. An order file having functions that get called during the app startup sequence can reduce page faults resulting in improved launch time. Order files can improve the launch time of mobile applications by more than 2%. The benefits of order files are more meaningful on larger apps and lower end devices. A more mature order file generation system can improve other critical user journeys.
Design
The order file generation involves the following steps
- Collect app startup sequence using compiler instrumentation technique
-
- Use compiler instrumentation to report every function invocation
- Run the instrumented binary to collect launch sequence in a (binary) profraw file
- Generate order file from the profraw files
- Validate order file
- Merge multiple order files into one
- Recompile the app with the merged order file
Overview
The order file generation is based on LLVM's compiler instrumentation process. LLVM has a stage to generate the order file then recompile the source code using the order file.
Collect app startup sequence
The source code is instrumented by passing -forder-file-instrumentation to the compiler. Additionally, the -orderfile-write-mapping flag is also required for the compiler to generate a mapping file. The mapping file is generated during compilation and it is used while processing the profraw file. The mapping file shows the mapping from MD5 hash to function symbol (as shown below).
The profile (profraw file) is generated every time the instrumented application is executed. The profile data in the profraw file contains the MD5 hash of the functions executed in chronological order. The profraw file does not have duplicate entries because each function only outputs its MD5 hash on first invocation. A typical run of binary containing the functions listed in the mapping file above can have the following profraw entries.
In order to find the function names corresponding to the MD5 hashes in a profraw file, a corresponding mapping file is used.
Note: The compiler instrumentation for order files (-forder-file-instrumentation) only works when an optimization flag (01, 02, 03, 0s, 0z) is passed. So, if -O0 (compiler flag typically used for debug builds) is passed, the compiler will not instrument the binary. In principle, one should use the same optimization flag for instrumentation that is used in shipping release binaries.
The Android NDK repository has scripts that automate the order file generation given a mapping file and an order file.
Recompiling with Order File
Once you have an order file, you provide the path of the order file to the linker using the --symbol-ordering-file flag.
Detailed design
Creating Order File Build Property
The Android Open Source Project (AOSP) uses a build system called soong so we can leverage this build system to pass the flags as necessary. The order file build property has four main fields:
- instrumentation
- load_order_file
- order_file_path
- cflags
The cflags are meant to add other necessary flags (like mapping flags) during compilation. The load_order_file and order_file_path tells the build system to recompile with the order file rather than set it to the profiling stage. The order files must be in saved in one of two paths:
- toolchain/pgo-profiles/orderfiles
- vendor/google_data/pgo_profile/orderfiles
Creating order files
We provide a python script to create an order file from a mapping file and a profraw file. The script also allows removing a particular symbol or creating an order file until a particular symbol.
Script Flags:
- Profile file (--profile-file):
-
- Description: The profile file generated by running a binary compiled with -forder-file-instrumentation
- Mapping file (--mapping-file):
-
- Description: The mapping file generated during compilation that maps MD5 hashes to symbol names
- Output file (--output):
-
- Description: The output file name for the order file. Default Name: default.orderfile
- Deny List (--denylist):
-
- Description: Symbols that you want to exclude from the order file
- Last symbol (--last-symbol):
-
- Description: The order file will end at the passed last symbol and ignore the symbols after it. If you want an order file only for startup, you should pass the last startup symbol. Last-symbol has priority over leftover so we will output until the last symbol and ignore the leftover flag.
- Leftover symbols (--leftover):
-
- Description: Some symbols (functions) might not have been executed so they will not appear in the profile file. If you want these symbols in your order file, you can use this flag and it will add them at the end.
Validating order files
Once we get an order file for a library or binary, we need to check if it is valid based on a set of criteria. Some order files may not be of good quality so they are better discarded. This can happen due to several reasons like application terminated unexpectedly, the runtime could not write the complete profraw file before exiting, an undesired code-sequence was collected in the profile, etc. To automate this process, we provide a python script that can help developers check for:
- Partial order that needs to be in the order file
- Symbols that have to be present in order file
- Symbols that should not be present in order file
- Minimum number of symbols to make an order file
Script Flags:
- Order file (--order-file):
-
- Description: The order file you are validating on the below criteria.
- Partial Order (--partial):
-
- Description: A partial order of symbols that must be held in the order file.
- Allowed Lists (--allowlist):
-
- Description: Symbols that must be present in the order file.
- Denied Lists (--denylist):
-
- Description: Symbols that should not be in the order file. Denylist flag has priority over allowlist.
- Minimum Number of Entries (--min):
-
- Description: Minimum number of symbols needed for an order file
Merging order files
At a higher level, the order file symbols in a collection of order files approximate a partial order (poset) of function names with order defined by time of execution. Across different runs of an application, the order files might have variations. These variations could be due to OS, device class, build version, user configurations etc. However, the linker can only take one order file to build an application. In order to have one order file that provides the desired benefits, we need to merge these order files into a single order file. The merging algorithm also needs to be efficient so as to not slow down the build time. There are non-linear clustering algorithms that may not scale well for merging large numbers of order files, each having many symbols. We provide an efficient merging algorithm that converges quickly. The algorithm allows for customizable parameters, such that developers can tune the outcome.
Merging N partial order sets can be done either pessimistically (merging a selection of order files all the way until there is one order file left) or optimistically (merging all of them at once). The pessimistic approach can be inefficient as well as sub-optimal. As a result, it is better to work with all N partial order sets at once. In order to have an efficient implementation it helps to represent all N posets with a weighted directed Graph (V,E) where:
- V: Elements of partial order sets (symbols) and the number of times it appears in different partial order sets. Note that the frequency of vertices may be greater than the sum of all incoming edges because of invocations from uninstrumented parts of binary, dependency injection etc.
- E (V1 -> V2): An edge occurs if the element of V2 immediately succeeds V1 in any partial order set with its weight being the number of times this happens.
For a binary executable, there is one root (e.g., main) vertex, but shared libraries might have many roots based on which functions are called in the binary using them. The graph gets complicated if the application has threads as they frequently result in cycles. To have a topological order, cycles are removed by preferring the highest probability path over others. A Depth-First traversal that selects the highest weighted edge serves the purpose.
Removing Cycles:
After cycles are removed, the same depth first traversal gives a topological order (the order file) when all the forward edges are removed. Essentially, the algorithm computes a minimum-spanning-tree of maximal weights and traverses the tree in topological order.
Producing an order:
Example:
Given the following order files:
- main -> b -> c -> d
- main -> a -> c
- main -> e -> f
- main -> b
- main -> b
- main -> c -> b

The graph to the right is obtained by removing cycles.
- DFS: main -> b-> c -> b
- Back edge: c -> b
- Cycle: b -> c-> b
- Cycle edges: [b -> c, c -> b]
- b's sum of in-edges is 3
- c's sum of in-edges is 2
- This implies b will be traversed from a higher frequency edge, so c -> b is removed
- Ignore forward edges a->c, main->c
- The DFS of the acyclic graph on the right will produce an order file main -> b -> c -> d -> a -> e -> f after ignoring the forward edges.
Collecting order files for Android Apps (Java, Kotlin)
The order file instrumentation and profile data collection is only enabled for C/C++ applications. As a result, it cannot benefit Java or Kotlin applications. However, Android apps that ship compiled C/C++ libraries can benefit from order file.
To generate order file for libraries that are used by Java/Kotlin applications, we need to invoke the runtime methods (called as part of order file instrumentation) at the right places. There are three functions that users have to call:
- __llvm_profile_set_filename(char *f): Set the name of the file where profraw data will be dumped.
- __llvm_profile_initialize_file: Initialize the file set by __llvm_profile_set_filename
- __llvm_orderfile_dump: Dumps the profile(order file data) collected while running instrumented binary
Similarly, the compiler and linker flags should be added to build configurations. We provide template build system files e.g, CMakeLists.txt to compile with the correct flags and add a function to dump the order files when the Java/Kotlin application calls it.
We also provide a sample app to dump order files from a Kotlin application. The sample app creates a shared library called "orderfiledemo" and invokes the DumpProfileDataIfNeeded function to dump the order file. This library can be taken out of this sample app and can be repurposed for other applications.
Limitation
order file generation only works for native binaries. The validation and merging scripts will work for any set of order files.
References
- AOSP: Create script to merge order-files
- Android Order Files: Add order file flags to any app in Android Open Source Project including an example using dex2oat, an ART application.
- Android Order Files Scripts: Script descriptions and how to use them
- Order Files | Android NDK: A developer guide explaining the order file process and how to add order file functionality to an Android app.
- Order file demo (GitHub): This README explains the process for the order file sample and the difference of using it between a Java app or Kotlin app.
- Google Git - orderfile_unittest.py: Use this to see how different flags are used.
- android-llvm - Google Groups: Ask here for help with order file tools
- For any bug reports, use: Issues | android/ndk | GitHub
External References
- [profraw] Source-based Code Coverage - Clang 18.0.0git documentation
- [order file description] (man page ld64 section 1)
- Doordash Case Study: How We Reduced Our iOS App Launch Time by 60%
- Video: Improving iOS Startup Performance with Binary Layout Optimizations Manman Ren, Software Engineer at Facebook Shane Nay, Facebook | By At Scale
- Video: Scaling Android with ReDex
07 Nov 2023 6:00pm GMT
06 Nov 2023
TalkAndroid
MediaTek goes big with its new Dimensity 9300 flagship chip
As one foot falls, another will follow and that's how it is with Qualcomm and MediaTek in recent years with their flagship chip announcements. With the new Snapdragon 8 Gen 3 already unveiled, we've been waiting to see what MediaTek's latest Dimensity flagship chipset would bring to the table. Spoiler Alert: MediaTek went big this […]
Come comment on this article: MediaTek goes big with its new Dimensity 9300 flagship chip
06 Nov 2023 6:35pm GMT
02 Nov 2023
Android Developers Blog
Alpha Release of Telecom Library
Posted by Luke Hopkins - Developer Relations Engineer
Today we're thrilled to announce that the Telecom jetpack library is now in alpha for developers who already have or are interested in creating voice and/or video calling applications. Our aim with this library is to simplify the developer integration process and improve VoIP calling across Android surfaces.
androidx.core:core-telecom:1.0.0-alpha02
What's in the Public Alpha release
This release supports a variety of Telecom features, including:
Platform synchronization
For surfaces like watches, this library allows the user to answer, decline, hang up and mute your call through a simple API, as well as displaying useful information such as who the caller is.

This is also beneficial because if the device is aware of your call, should other calls such a PTSN/SIM based call come through, you can give the user a chance to hold the call they are currently on.
Dedicated foreground support
With the changes to Android 14, which require applications to specify foreground service types, this library takes care of the requirements for you. For more information, please refer to the foreground service documentation.
Foreground support allows users to stay connected to their calls even after the user has navigated away from your app... You won't need to build your own foreground services or worry about the background state of your application.
Audio Routing
Instead of using the audio manager to track state, focus and obtain a list of audio devices, this Telecom library will list all available endpoints to your application for streaming audio to/from Bluetooth hearables, hearing aids, wired headphones, and other surfaces, thus giving users access and control to a wide range of hearable devices.
Backwards Compatibility
Backwards compatibility works all the way down to Android O (API Level 26) on devices which support the Telecom stack which means implementing the simple API surface below supports a wide range of devices.
callsManager.addCall(
attributes,
onIsCallAnswered,
onIsCallDisconnected,
onIsCallActive,
onIsCallInactive
){
val callScope=this
}
You can also query the packagemanager to know if the device supports Telecom.
packagemanager.hasSystemFeature(PackageManager.FEATURE_TELECOM)
Why use this library over Platform API
You might be thinking, why make this move to a new library when I could just similarly migrate the deprecated APIs to the new APIs added in Android 14. Well this library offers:
New Features
We will have more exciting additions coming to the Telecom library in the coming months which are exclusive to the jetpack library. These included expanded support for VoIP Call actions such as being able to locally mute the VoIP app for the specific call and being able to display the name of the speaker on another surface such as Android Auto. We also have a new feature coming soon that will allow users to transfer their ongoing VoIP calls between their phones and tablets.
Backward Compatibility
As previously stated, this library supports backward compatibility, which means that your app will not only be supported on a wider range of devices, but we can resolve interoperability issues with older Android versions.
A simple API surface and a large coverage of devices, means this library is the goto solution for calling applications.
Migrating from ConnectionService to CallsManager
Even if you already have an existing ConnectionService integration for your VoIP app, you should consider migrating to CallsManager, as mentioned above we have a lot of exciting features coming to this library and using the jetpack library will give you a simple and complete solution moving forward.
Migrating from ConnectionService to CallManager is fairly straightforward to implement but is not a simple case of changing namespace. You can think of CallManager representing ConnectionService and CallControlScope representing ConnectionService.
Below shows the difference between how to switch audio using connection service to CallControlScope.
You can also query the packagemanager to know if the device supports Telecom.
cconnectionService.setAudioRoute (int route)
when (requestEndpointChange(newEndpoint)) {
is CallControlResult.Success -> {
// Device changed
}
is CallControlResult.Error -> {
}
}
Another example showing how simple this API is to use, you can add a call to the platform and define you call attributes with the code below:
val attributes = CallAttributesCompat(
displayName = displayName,
address = address,
direction = CallAttributesCompat.DIRECTION_INCOMING,
callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL,
callCapabilities = (CallAttributesCompat.SUPPORTS_SET_INACTIVE
or CallAttributesCompat.SUPPORTS_STREAM
or CallAttributesCompat.SUPPORTS_TRANSFER),
)
callsManager.addCall(
attributes
) {
// Call control scope
}
From here you will have a call control scope and this scope you can answer, hold, disconnect and get a list of hearable devices.
//call control scope
launch {
availableEndpoints.collect {
.....
}
}
Getting started
Head over to our updated developer guide to get started and try out the Public Alpha release of the Telecom library. Make sure to check out our sample app found on GitHub for a demonstration on how to work with the various APIs.
This sample application implements all the latest features for the Telecom library showing how to do:
- Audio Routing
- Foreground Services
- Accept, Disconnect, Reject and Hold calls
- Watch integration
- CallStyle notification
Feedback
We'd love to hear from you during this Alpha launch to help us shape the library and influence future roadmapping, so please share your feedback and let us know your experience with the library!
02 Nov 2023 10:00pm GMT
Increasing trust for embedded media
Android WebView is a powerful and flexible API that Android developers can use to embed media in their apps, and continually improving its security and privacy protections is a top priority for our team. For example, embedded media providers should be able to verify that their media is playing in a trusted and safe environment. Android app developers and SDK providers already have solutions for this, including attestation services like the Play Integrity API and Firebase App Check, which preserve user privacy while enabling developers to verify their apps' server requests. Today, app developers are able to pass information from these attestation services to embedded content providers; however, the current process is neither simple nor scalable. That's why we're piloting an experimental Android WebView Media Integrity API with select embedded media providers early next year.
How does this relate to the Web Environment Integrity API proposal?
We've heard your feedback, and the Web Environment Integrity proposal is no longer being considered by the Chrome team. In contrast, the Android WebView Media Integrity API is narrowly scoped, and only targets WebViews embedded in apps. It simply extends existing functionality on Android devices that have Google Mobile Services (GMS) and there are no plans to offer it beyond embedded media, such as streaming video and audio, or beyond Android WebViews.
What is the challenge with Android WebViews?
The Android WebView API lets app developers display web pages which embed media, with increased control over the UI and advanced configuration options to allow a seamless integration in the app. This brings a lot of flexibility, but it can be used as a means for fraud and abuse, because it allows app developers to access web content, and intercept or modify user interactions with it. While this has its benefits when apps embed their own web content, it does not prohibit bad actors from modifying content and, by proxy, misrepresenting its source.
What functionality are we bringing to embedded Android WebView media?

The new Android WebView Media Integrity API will give embedded media providers access to a tailored integrity response that contains a device and app integrity verdict so that they can ensure their streams are running in a safe and trusted environment, regardless of which app store the embedding app was installed from. These verdicts are simple, low entropy metadata about the app and device and don't contain any user or device identifiers. Unlike apps and games using Play Integrity API, media providers will not obtain the app's Play licensing status and apps will also be able to exclude their package name from the verdict if they choose. Our goal for the API is to help sustain a thriving and diverse ecosystem of media content in Android apps, and we're inviting media content providers to express interest in joining an early access program early next year.
02 Nov 2023 7:00pm GMT
TalkAndroid
In the latest episode of nerfed cord-cutting, Max ad-free subscribers are losing 4K streaming
If it isn't news of a streaming service increasing its prices it's news that a streaming service is nerfing a current tier to force its subscribers to cough up some extra dough for the things they used to have. Here with its own take on how to gouge its customers is Max which, starting from […]
Come comment on this article: In the latest episode of nerfed cord-cutting, Max ad-free subscribers are losing 4K streaming
02 Nov 2023 6:50pm GMT
Bad news – Some Galaxy S24 phones will be powered by an Exynos processor
We know. Exynos processors aren't what many Samsung fans want to see powering the brands' next range of flagship smartphones. We get it, and stand resolutely with you. But, after going all in on Qualcomm's excellent Snapdragon 8 Gen 2 for the Galaxy S23 series, it seems that Samsung is regressing to the policy of […]
Come comment on this article: Bad news - Some Galaxy S24 phones will be powered by an Exynos processor
02 Nov 2023 4:14pm GMT
Android Developers Blog
#WeArePlay | Meet Geraldo from Utah. More stories from around the world.
Posted by Leticia Lago, Developer Marketing
Another month, another series of #WeArePlay stories from apps and games we all love. From a Salt Lake City-based music editing app to successful game studios from Indonesia, Uruguay and Türkiye - discover the inspiring founders behind them.
This time we're starting in the US with Geraldo. Inspired by his mom's studies in computer engineering, he decided to start his own tech company at just 16 years of age. But he was also a keen musician and merged both his passions in Moises, alongside childhood friend and co-founder Eddie. The app uses artificial intelligence to remove vocals and instruments from any song. Geraldo describes the process as like "getting a smoothie and removing only the banana" - complex, to say the least, but Moises makes it easy. He hopes "to democratize access to cutting edge audio tools for everyday musicians."
Next up, we're crossing the Pacific over to Indonesia where colleagues and game enthusiasts Diori and Agung decided to collaborate outside of the office on their own independent project. This culminated in the launch of their studio, Minimo, with their most successful game, Mini Racing Adventures, accumulating over 38 million downloads to date. The pair channeled Agung's passion for cars and mechanics into this particular release, but next they're shifting genres and working on a new shooter game.
Now we're heading down to Uruguay where friends Pablo, Gonzalo and Alvaro had a dream of making games for a living and created Ironhide Game Studio in 2010, learning how to code for mobiles from scratch. As Pablo puts it: "Over the years we've realized that what we have is special, because we have the passion, but we also work really hard. This has allowed us to create something great." Their popular title, Kingdom Rush: Tower Defence, is a strategy game set in a medieval settlement and chock-full of action-filled battles. Looking to the future, they're hoping to branch into multiplayer games and expand their Kingdom Rush saga.
And finally we're crossing over to Europe to meet Rina. While working in private equity and meeting an array of business heads, she was inspired to pursue an entrepreneurial path herself. Seeing how popular gaming was becoming, Rina delved into creating titles for a Turkish audience. She struck gold with her first studio becoming a tech unicorn, and soon followed it up with Spyke Games, launched alongside her brother Remi and friends Mithat, Barkin and Fuat. Their title Tile Busters combine social multiplayer fun and skill-based puzzle solving. Soon, they're releasing a follow-up, Blitz Busters, keeping their goal of being "great content developers creating games that people crave more of."
Discover more global #WeArePlay stories and share your favorites.
02 Nov 2023 4:00pm GMT
27 Oct 2023
Android Developers Blog
Meta built threads in only 5 months using Jetpack Compose
Posted by Yasmine Evjen - Product Manager, and Florina Muntenescu - Developer Relations Engineer
Following its release in July of 2023, Meta's Threads became the most rapidly downloaded app ever with over 100 million downloads in its first week. Meta created the new text-based social media platform as a place to build connections and have meaningful conversations. To ensure the app was set up for success at its release and into the future, Threads developers used Jetpack Compose, Android's modern declarative toolkit for building UI.
An easier way to build UI with Jetpack Compose
Threads is built on top of existing code from its sister app Instagram, which uses Views for its UI development. After positive reports from other Android developers about Compose, and following internal testing and an assessment of the toolkit's benefits, Threads engineers opted to build the all-new app from scratch using Compose. By using Compose, the team could move faster and better prepare the app for any future updates.
"We decided Jetpack Compose would be our target UI framework going forward," said Richard Zadorozny, a software engineer at Threads. "We wanted to build the new app UI from scratch using Compose because it would enable us to move faster than refactoring a large application like Instagram."
Even though most of Threads' engineers had no prior experience using Compose, they found it easy to get started and learn the new toolkit. With Compose, Threads engineers built and shipped the app in only five months. This greatly exceeded the team's speed expectations for developing a high-quality Android application - especially of this complexity and scale. The team attributes much of this speed to the flexibility and decoupling Compose provided.
Compose helped Threads engineers streamline the development of new product features. The modular nature of the toolkit let Threads developers iterate on the app as it evolved and teed up the app's architecture for future development. Compose also helped engineers build user-friendly features that adhered to Material Design guidelines.

Going all in with Compose
Threads engineers developed almost all of the app's surfaces using Compose. In the end, they built over 90% of Threads using Compose, including the app's activity feed, navigation, search, profiles, onboarding page, shared element transitions, media viewer, settings, and more.
While Compose did mostly everything Threads engineers needed it to, it was still easy for them to interoperate with Views as necessary. They used Views for Threads' videos and the media picker that's available when creating a new post.
Compose provides modern APIs that ship directly with an app. Because of this, Threads engineers spent less time worrying about backward compatibility, missing features, or differing functionality between different versions of Android. Instead, they could focus their energy on developing a high-quality application.
"Compose's design encourages a modular, plug-in approach to development," said Richard. "Modifiers make all sorts of functionality inherently reusable, so you no longer have to subclass complicated ViewGroups or lump all sorts of logic into one place."

The Threads team used Modifiers for the app's custom click behaviors and its thread line illustration that appears on the left side of posts. Modifiers also allowed Threads developers to easily add the app's branding to any elements and ensured they were properly aligned on-screen.
Threads engineers also ensured the app was ready for users across platforms at launch. That meant making sure Threads resizes to work on different devices, like large screens and foldables. The adaptive layouts Compose offers ensure an app responds properly to different screen sizes, orientations, and form factors. This made it easier for the Threads app to "just work" for configuration changes, according to Richard.

Compose is the 'future' of Android UI
Compose offered Threads developers an easier way to design and create UI while preparing the app's architecture for the future. With its intuitive composables and modern declarative framework, Compose made end-to-end development smooth and gave Threads developers confidence that updating the app would be easy.
Given the positive results the team saw with the release of Threads, Meta plans to expand its use of Compose to some of Instagram's most important surfaces, like the app's main feed.
"It's reached a point where Jetpack Compose can do almost everything you'll need, and its modular nature makes it easy to make most of the changes you would need to fill the gaps," said Richard. "I believe Compose is the future of Android UI development, and it's just fun!"
Get started
Optimize your UI development with Jetpack Compose.
27 Oct 2023 5:55pm GMT
26 Oct 2023
Android Developers Blog
Make the passkey endpoints well-known URL part of your passkey implementation
Posted by Amy Zeppenfeld - Developer Relations Engineer
Passkeys are leading the charge towards a more secure future without passwords. Passkeys are a new type of cryptographic credential that leverages FIDO2 and WebAuthn to provide an authentication mechanism that is phishing-resistant, user friendly, simple to implement, and more secure than password-based authentication. Most major operating systems and browsers now feature full passkey support. Passkeys are expected to replace passwords as the predominant authentication mechanism in the not-too-distant future, and developers are advised to begin implementing passkey-enabled authentication solutions today.
As you implement passkeys in your app or web service, take a moment to implement a passkey endpoints well-known URL.
This is a standardized way to advertise your support for passkeys and optimize user experience. This well-known URL will allow third party services like password managers, passkey providers, and other security tools to direct users to enroll and manage their passkeys for any site that supports them. You can use app-links or deep linking with the passkey-endpoints well-known URL to allow these pages to open directly in your app.
Password management tool usage has been steadily rising, and we expect most providers will integrate passkey management as well. You can allow third party tools and services to direct your users to your dedicated passkey management page by implementing the passkey-endpoints well-known URL.
The best part is that in most cases you can implement this feature in two hours or less! All you need to do is host a simple schema on your site. Check out the example below:
- For a web service at https://example.com, the well-known URLwould be https://example.com/.well-known/passkey-endpoints
- When the URL is queried, the response should use the following schema:
{ "enroll": "https://example.com/account/manage/passkeys/create", "manage": "https://example.com/account/manage/passkeys" }
Note: You can decide the exact value of the URLs for both enroll and manage based on your website's own configuration.
If you have a mobile app, we strongly recommend utilizing deep linking to have these URLs open the corresponding screen for each activity directly in your app to "enroll" or "manage" passkeys. This will keep your users focused and on track to enroll into passkeys.
And that's it!
Further details and examples can be found in the passkey endpoints well-known URL explainer.
26 Oct 2023 6:00pm GMT
Updates to Google Identity Services (GIS) and migration to the Credential Manager API
Posted by Kateryna Semenova - Developer Relations Engineer, Diego Zavala and Gina Biernacki - Product Managers
Introducing Credential Manager
At Google, we are dedicated to improving the sign in experience across platforms for developers and users. For Android developers, we recently announced the public availability of Credential Manager as the future of authentication on Android. Credential Manager is a new Jetpack library designed to consolidate authentication types for Android developers into a single UI, reducing complexity for your applications while increasing usability. Credential Manager also supports passkeys, creating a unified interface for users and a single API for developers.
Instead of having to integrate with multiple identity providers, developers can now use Credential Manager as a single, unified authentication API. Credential Manager simplifies integration and makes it easier to develop authentication solutions that can work with all password managers, identity providers, and authentication methods.
Implementing Credential Manager with your Android applications will provide a single authentication experience for all Android users, integrated directly with the operating system and aligned with high-trust surfaces such as system login. We encourage all developers to migrate to Credential Manager.
Authentication APIs moving from Google Identity Services to Credential Manager on Android
The authentication APIs from Google Identity Services on Android-which include One Tap sign-in, Credential Saving, Sign in with Google button and Sign-In for Android(GSI) - can all now be implemented using Credential Manager. This enables developers to integrate with a single API for their authentication journeys.
Since these APIs are now generally available in Credential Manager, these individual APIs will be deprecated in Google Identity Services.
Removal of Smart Lock for Passwords
Smart Lock for Passwords, which was deprecated in 2022, will be removed from the Google Play Services SDK in November 2023. To minimize breaking changes that may impact existing integrations, all existing apps in the Play Store will continue to work. New app versions compiled with the new SDK will not be able to access the Smart Lock for Password API, so we encourage all developers to migrate to Credential Manager as soon as possible.
Get started with your migration to Credential Manager
All Android developers should plan their migration to the new Credential Manager API. To assist you in this process, read the following guides and resources:
- Sign in your user with Credential Manager - A comprehensive guide to integrate the Credential Manager API into your authentication flow.
- Integrate Credential Manager with Sign in with Google - Learn how to seamlessly incorporate the Credential Manager API with "Sign in with Google."
- UX guide for designing user experiences for passkeys on Android.
Share your feedback
We are excited to improve Android authentication with the launch of Credential Manager API, delivering a simple and streamlined UX for secure sign-in methods such as Sign in with Google.
We value your feedback and invite you to share your experience integrating with Credential Manager or any other feedback you might have:
- Open a ticket with Android developers
- Share private feedback
- Provide public feedback on StackOverflow/Passkeys
-
Your input is very valuable as we continue to refine and improve our authentication services.
26 Oct 2023 4:00pm GMT