When we first released Compose 1.0 in 2021, we were focused on getting the API surface right to provide a solid foundation to build on. We wanted a powerful and expressive API that was easy to use and stable so that developers could confidently use it in production. As we continue to improve the API, performance is our top priority, and in the August ‘23 release, we have landed many performance improvements.
Modifier performance
Modifiers see large performance improvements, up to 80% improvement to composition time, in this release. The best part is that, thanks to our work getting the API surface right in the first release, most apps will see these benefits just by upgrading to the August ‘23 release.
We have a suite of benchmarks that are used to monitor for regressions and to inform our investments in improving performance. After the initial 1.0 release of Compose, we began focusing on where we could make improvements. The benchmarks showed that we were spending more time than anticipated materializing modifiers. Modifiers make up the vast majority of a composition tree and, as such, were the largest contributor to initial composition time in Compose. Refactoring modifiers to a more efficient design began under the hood in the October ‘22 release.
The October ‘22 release included new APIs and performance improvements in our lowest level module, Compose UI. Modifiers build on top of each other so we started migrating our low level modifiers in Compose Foundation in the next release, March ‘23. This included graphicsLayer, low level focus modifiers, padding, and offset. These low level modifiers are used by other highly utilized modifiers such as Clickable, and are also utilized by many framework Composables such as Text. Migrating modifiers in the March ‘23 release brought performance improvements to those components, but the real gains would come when we could migrate the higher level modifiers and composables themselves to the new modifier system.
In the August ‘23 release, we have begun migrating the Clickable modifier to the new modifier system, bringing substantial improvements to composition time, in some cases up to 80%. This is especially relevant in lazy lists that contain clickable elements such as buttons. Modifier.indication, used by Clickable, is still in the process of being migrated, so we anticipate further gains to come in future releases.
As part of this work, we identified a use case for composed modifiers that wasn’t covered in the original refactor and added a new API to create Modifier.Node elements that consume CompositionLocal instances.
We are now working on documentation to guide you through migrating your own modifiers to the new Modifier.Node API. To get started right away, you can reference the samples in our repository.
Learn more about the rationale behind the changes in the Compose Modifiers deep dive talk from Android Dev Summit ‘22.
Memory
This release includes a number of improvements in memory usage. We have taken a hard look at allocations happening across different Compose APIs and have reduced the total allocations in a number of areas, especially in the graphics stack and vector resource loading. This not only reduces the memory footprint of Compose, but also directly improves performance, as we spend less time allocating memory and reduce garbage collection.
In addition, we fixed a memory leak when using ComposeView, which will benefit all apps but especially those that use multi-activity architecture or large amounts of View/Compose interop.
Text
BasicText has moved to a new rendering system backed by the modifier work, which has brought an average of gain of 22% to initial composition time and up to a 70% gain in one benchmark of complex layouts involving text.
A number of Text APIs have also been stabilized, including:
We’re grateful for all of the bug reports and feature requests submitted to our issue tracker — they help us to improve Compose and build the APIs you need. Continue providing your feedback, and help us make Compose better!
Wondering what’s next? Check out our roadmap to see the features we’re currently thinking about and working on. We can’t wait to see what you build next!
Posted by Anna Bernbaum, Product Manager and Kseniia Shumelchyk, Android Developer Relations Engineer
We’re excited to announce that version 1.2 of Compose for Wear OS and Wear Tiles libraries have reached the stable milestone. This makes it easier than ever to use these modern APIs to build beautiful and engaging apps for Wear OS.
We continue to evolve Android Jetpack libraries for Wear OS with new features and improvements to streamline development, including support for the latest Wear OS 4 release.
Many developers are already leveraging the powerful tools and intuitive APIs to create exceptional experiences for Wear OS. Partners like Peloton and Deezer were able to quickly build a watch experience and are seeing the impact on their feature-adoption and user engagement.
"The Wear OS app was our first usage of Compose in production, we really enjoyed how much more productive it made us.”
– Stefan Haacker, a senior Android engineer at Peloton.
Compose for Wear OS and Wear Tiles complement one another. Use Wear Tiles to define the experience in your app’s tiles, and use Compose for Wear OS to build UIs across the more detailed screens in your app. Both sets of APIs offer material components and layouts that ensure your app experience on Wear OS is coherent and follows our best practices.
Now, let’s look into key features of version 1.2 of Jetpack libraries for Wear OS.
Compose for Wear OS 1.2 release
Compose for Wear OS version 1.2 contains new components and brings improvements to tooling, as well as the usability and accessibility of existing components:
Expandable Items
The new expandableItem, expandableItems and expandableButton components provide a simple way to fold and unfold content on demand. Use these components to hide detailed information on long pages or expanded sections by default. This design pattern allows users to focus on essential content and choose when to view the more detailed information.
This pattern enables apps to include high-density content while preserving the key principles of wearables – compactness and glanceability.
Example of expanding list and expanding text using the new component
The component can be used for expanding lists within ScalingLazyColumn, so expandableButton collapses after the content in expandableItems is revealed in one smooth option. Another use case is expanding the content of a single item, such as Text, that would otherwise contain too many lines to show all at once when the screen first loads.
Swipe to Reveal
A new experimental API has been added to support the SwipeToReveal pattern, as a way to add up to 2 secondary actions when the composable is swiped to the left. It also provides support for users to undo the secondary actions that they take. This component is intended for use cases where the existing ‘long press’ pattern is not ideal.
SwipeToReveal implementation with two actions (left) and single action with undo (right)
Note that this feature is distinct from swipe-to-dismiss, which is used to navigate back to the previous screen.
Compose Previews for Wear OS
In version 1.2 we’ve added device configurations to the set of Compose Preview annotations that you use when evaluating how a design looks and behaves on a variety of devices.
We added a number of custom Wear Preview annotations for different watch shapes and sizes: WearPreviewSmallRound, WearPreviewLargeRound, WearPreviewSquare. We’ve also added the WearPreviewDevices, WearPreviewFontScales annotations to check your app against multiple device configurations and types at once. Use these new annotations to instantly verify how your app’s layout behaves on a variety of Wear OS devices.
WearPreviewDevices and WearPreviewFontScales annotations used for Horologist VolumeScreen preview
Wear Compose tooling is available within a separate dependency androidx.wear.compose.ui.tooling.preview that you’ll need to include in addition to general Compose dependencies.
UX and accessibility improvements
The 1.2 release also introduced numerous improvements for user experience and accessibility:
Reduce-motion setting is now supported. When setting switched on it will disable scaling and fading animations in ScalingLazyColumn, and turn off the shimmering effect and wipe-off motion on placeholders.
HierarchicalFocusCoordinator - new experimental composable that enables marking sub-trees of the composition as focus enabled or focus disabled. Use this to control which element receives rotary scroll events, such as multiple ScalingLazyColumns in a HorizontalPage
PickerGroup - a new composable designed to combine multiple pickers together. It handles focus between the pickers using the HierarchicalFocusCoordinator API and enables auto-centering of Picker items. It’s already integrated in prebuilt Date and Time pickers from Horologist: check out some examples.
Picker has a new userScrollEnabled parameter, which determines if picker should be scrollable and disables scrolling when not focused.
The shimmer and wipe-off animations for placeholder now apply the wipe-off effect immediately when the content is ready.
Stepper has an additional parameter, enableRangeSemantics, that allows customization of semantics, such as disabling default range semantics when required.
Other changes
ScalingLazyColumn and associated classes have migrated from the material package to the foundation.lazy package, as a preparation for a new Material3 library. You can use this migration script to update your code seamlessly.
The Horologist library enhances the implementation of snap behavior to a ScalingLazyColumn, TimePicker and DatePicker when the user interacts with a rotary crown. The rotaryWithFling modifier was deprecated in favor of rotaryWithScroll which includes fling behavior by default. Check out rotaryWithScroll and rotaryWithSnap reference documentation for details.
Snap and fling behavior for scrolling list
Tiles 1.2 release
Tiles are designed to give users fast, predictable access to the information and actions they rely on most. Version 1.2 of the Jetpack Tiles Library introduces support for platform data bindings and animations so you can provide even more responsive experiences to your users.
Tiles carousel on Wear OS
Platform data bindings
Version 1.2 introduces support dynamic expressions that link elements of your tile to platform data sources. If your tile uses platform data sources such as heart rate, or, step count, or time, your tile can be updated up to once per second.
Examples of a tile using data binding
Animations
The new version of tiles also adds support for animations. You can use tween animations to create smooth transitions when part of your layout changes, and use transition animations to animate new or disappearing elements from the tile.
Examples of animated tiles
Partial tile updates
We have also now enabled partial tile updates, meaning that we will only update the part of your tile that has been updated, not the entire layout. This allows you to update part of your tile, while an animation is playing in another part, without disrupting that animation.
We’ve already updated our samples and Horologist libraries to work with the latest version of Jetpack libraries for Wear OS. Also make sure to check out the documentation for Tiles and Compose for Wear OS to learn more about best practices when building apps for wearables.
Provide feedback
We continue to evolve our APIs with the features you’ve been asking for. Please do continue providing us feedback on the issue tracker , and join the Kotlin Slack#compose-wear channel to connect with the Google team and developer community.
Today, we are thrilled to announce the stable release of Android Studio Giraffe 🦒 : The official IDE for building Android apps!
In this Android Studio release, we have upgraded the IntelliJ platform to 2022.3, including a brand new visual look and feel in Android Studio, improvements to Live Edit, Compose animation previews, a new Device Explorer, a new SDK upgrade assistant, ability to use Kotlin DSL in your Gradle build scripts and much more. Read on to learn more about how Android Studio Giraffe 🦒 can help supercharge your developer productivity.
Thank you to all of you who have given us feedback and used Android Studio since we launched our initial version just over 10 years ago. Download the latest stable version today and we look forward to continuing to deliver on our commitment of delivering a best-in-class integrated development environment (IDE) focused on Android app development!
IDE Enhancements
New UI for Android Studio (Preview)
Along with the much anticipated IntelliJ Platform update, we are excited to share a preview of the visual look that we call the “New UI” for Android Studio Giraffe. The redesigned theme aims to reduce visual complexity, provide easier access to essential features, and disclose complex functionality as needed—resulting in a modern, cleaner look and feel.
The New UI was first released as an early preview in IntelliJ 2022.2 to gather feedback from users and other IntelliJ-based IDEs to ensure it could fully replace the previous UI. Since then, it’s progressed to beta in IntelliJ 2022.3, with many bug fixes and improvements.
With the Giraffe release, we’ve started adopting the new UI, with several Android Studio specific changes, such as optimizing the default main toolbar and tool windows configurations for Android and refreshing our iconography in the style. We are excited by this new design direction and will continue adoption through the Hedgehog release and onward.
To use the New UI, enable it in Settings > Appearance & Behavior > New UI. For a full list of changes, see the IntelliJ New UI documentation.
The New UI adopted from IntelliJ
New diagnostic & bug reporting tool
As you try the New UI, please provide us detailed feedback through our new diagnostic & bug reporting tool that makes it easier to report bugs with relevant log files already attached. The new bug reporting tool is found at Help > Collect Logs and Diagnostic Data.
New diagnostic & bug reporting tool
Updated Device Explorer
Also shipping with the new UI, is an updated Device Explorer (known as the Device File Explorer in previous versions of Android Studio). In the Device Explorer, files and related actions are located in the Files tab. Additionally, in the new Processes tab, you can view a list of debuggable processes for the connected device. From there you can also select a process and perform a kill , force-stop, or attach the debugger to a given process.
Updated Device Explorer
Coding Productivity
Use Live Edit to update composables in real time
Live Edit lets you update composables in Android emulators and physical devices in near real time. You can now edit composables and see the UI changes on the running device without re-deploying your app.
This helps you by minimizing the context switching between writing and building your app, letting you focus on writing code longer without interruption. To try Live Edit, enable it via Settings > Editor > Live Edit and use Android Gradle Plugin (AGP) 8.1 or higher and Jetpack Compose Runtime 1.3.0 or higher.
Use Live Edit to update composables in real time
Compose Animation Preview - Extend animation support
Compose Animation Preview now supports a number of additional Compose APIs, such as animate*AsState, CrossFade, rememberInfiniteTransition, and AnimatedContent (in addition to updateTransition and AnimatedVisibility). Additionally, now there are new pickers that let you set non-enum or boolean states to debug your Compose animation using precise inputs. For all supported Compose Animation APIs, you can play, pause, scrub & control speed.
Compose Animation Preview - Extend animation support
Android SDK Upgrade Assistant
The new Android SDK upgrade assistant lets you see the steps required to upgrade the targetSdkVersion, or the API level that your app targets, directly in the IDE. It also pulls upgrade-related documentation directly from the Android Developer site into its tool window, so you don't have to jump back and forth between your browser and the IDE. For each migration step, it highlights the major breaking changes and how to address them, and even filters the full list of changes to only show steps relevant to your app.
To open the Android SDK Upgrade Assistant, go to Tools > Android SDK Upgrade Assistant.
Android SDK Upgrade Assistant
Improvements to the build system
Kotlin DSL in your Gradle build scripts
Kotlin is not only more readable, it also offers better compile-time checking and IDE support. With Android Studio Giraffe, we are excited to offer the official support for Kotlin DSL in your Gradle build scripts. This means that Kotlin is the default language used in your project code, including UI with Jetpack Compose, and now editing the build scripts too!
Now, when you are creating new projects or modules starting from Android Studio Giraffe, you get the Kotlin DSL by default. And if you want to migrate existing builds, check out the Kotlin DSL migration guide.
We've been working with the Gradle and JetBrains teams on this improvement, and you can read more in their related announcements: Gradle Blog; JetBrains Blog.
Additionally, we’ve also added experimental support for TOML-based Gradle Version Catalogs, a feature that lets you manage dependencies in one central location and share dependencies across modules or projects. Android Studio now makes it easier to configure version catalogs through editor suggestions and integrations with the Project Structure dialog, plus the New Project Wizard.
Kotlin DSL in your Gradle build scripts
Download info during Gradle sync
If you’ve ever wondered if any unexpected dependency downloads are negatively impacting your sync performance, the new Sync tool window now includes a summary of time spent downloading dependencies, and a detailed view of downloads per repository. This view updates live as sync takes place. It can even help you identify inefficiencies in how you configure your repositories.
Download info during Gradle sync
Automatic per-app language support
Typically, multilingual users set their system language to one language—such as English—but they want to select other languages for specific apps, such as Dutch, Chinese, or Hindi. Android 13 introduced support for per-app language preferences, and now Android Gradle plugin 8.1 and higher can configure your app to support it automatically based on your project’s resources. Learn more.
Make selected modules toolbar button
With Android Studio Giraffe, you can now build only the current module you're working on by selecting the Make Selected Modules build option in the toolbar. This new option lets you check that the code you just wrote compiles without building more than needed. Learn more.
Kotlin DSL in your Gradle build scripts
Summary
To recap, Android Studio Giraffe includes these new enhancements and features. You can always learn more with our detailed release notes.
IDE Enhancements
Upgraded to IntelliJ Platform 2022.3: Includes a number of features and bug fixes
New UI for Android Studio : Android Studio now adopts a number of improvements from the IntelliJ's modern design language
Updated Device Explorer : Offers two new tabs : Files & Processes from where you can view a list of debuggable processes, perform a kill, force-stop, or attach the debugger
New diagnostic & bug reporting tool : Easier to report bugs for Android Studio with relevant log files already attached
Coding Productivity
Use Live Edit to update composables in real time : Update composables in real time, edit composables and see the UI changes on the running device without re-deploying your app
Compose Animation Preview - Extend animation support : Now supports a number of additional Compose APIs and new pickers that let you set non-enum or boolean states to debug your Compose animation using precise inputs
Android SDK Upgrade Assistant : Now lets you see the steps required to upgrade the targetSdkVersion, or the API level that your app targets directly in Studio
Improvements to the build system
Kotlin DSL in your Gradle build scripts : With official support for Kotlin DSL in your Gradle build scripts, Kotlin is now the single default language for project code, UI with Jetpack Compose, and now for build scripts
Download info during Gradle sync : Shows a summary of time spent downloading dependencies and a detailed view of downloads per repository
Automatic per-app language support : AGP can now automatically configure per-app language preferences
Make selected modules toolbar button : build only the current module you're working on by selecting the Make Selected Modules build option in the toolbar
Download Android Studio Today!
Now is the time to download Android Studio Giraffe 🦒 to incorporate the new features into your workflow. As always, we appreciate any feedback on things you like and issues or features you would like to see. If you find a bug or issue, please file an issue and also check out known issues. Remember to also follow us on Twitter, Medium, or YouTube for more Android development updates!
Posted by Sarat Tummala, Product Manager, Google Play services
The Android KitKat (KK) platform was first released ~10 years ago and since then, we’ve introduced many innovative improvements and features for Android, which are unavailable on KK. As of July 2023, the active device count on KK is below 1% as more and more users update to the latest Android versions. Therefore, we are no longer supporting KK in future releases of Google Play services. KK devices will not receive versions of the Play Services APK beyond 23.30.99.
Posted by Sarat Tummala, Product Manager, Google Play services
The Android KitKat (KK) platform was first released ~10 years ago and since then, we’ve introduced many innovative improvements and features for Android, which are unavailable on KK. As of July 2023, the active device count on KK is below 1% as more and more users update to the latest Android versions. Therefore, we are no longer supporting KK in future releases of Google Play services. KK devices will not receive versions of the Play Services APK beyond 23.30.99.
Posted by Joseph Mills, Group Product Manager, Google Play
As a platform, we always want to help developers bring innovative ideas to life. Google Play hosts a variety of blockchain related apps, and we know that our partners are excited to expand on these offerings to create more engaging and immersive digital experiences with tokenized digital assets such as NFTs. Like with any emerging technology, we must balance innovation with our responsibility to protect users. So, we’ve spoken with developers about responsibly supporting those opportunities while continuing to provide a safe, transparent, and trusted experience for everyone.
Today, we’re pleased to share that we’re updating our policy to open new ways to transact blockchain-based digital content within apps and games on Google Play. From reimagining traditional games with user-owned content to boosting user loyalty through unique NFT rewards, we’re excited to see creative in-app experiences flourish and help developers expand their businesses.
Keeping Users Protected While Fostering Innovation
As blockchain technology continues to evolve, maintaining user trust is paramount. As part of the policy update, we’re requiring that apps be transparent with users about tokenized digital assets. For example, if an app or game sells or enables users to earn tokenized digital assets, developers must declare this clearly. And while tokenized assets are meant to build more enriched, immersive experiences, as an added user protection, developers may not promote or glamorize any potential earning from playing or trading activities.
In line with Google Play’s Real-Money Gambling, Games, and Contests policy, apps that have not met gambling eligibility requirements cannot accept money for a chance to win assets of unknown real-world monetary value, including NFTs. For example, developers should not offer purchases where the value of the NFT users receive is not clear at the time of purchase. This includes, but is not limited to, offering mechanisms to receive randomized blockchain-based items from a purchase such as “loot boxes”.
Unlocking Innovation Across the Industry
Google Play succeeds when our partners succeed. These new guidelines were developed in close consultation with app and game developers and incorporates their feedback on how we can continue to support their businesses.
"We really appreciate Google's partnership in this collaborative effort to bring about innovation in this space and move these new economies forward. We think these new policies are steps forward for both players and developers alike and will positively impact the adoption of new technology while also protecting consumers."
– John Linden, CEO, Mythical Games
"At Reddit we believe in empowering our users by providing transparency and a responsible approach to blockchain-based digital content – like our Collectible Avatars. We partnered with Google to help update their policy, aimed at creating a level playing field that promotes user trust, and responsible usage of blockchain technology.By setting clear guidelines, we can ensure that our users make informed decisions while enjoying immersive experiences."
– Matt Williamson, Senior Engineering Manager, Reddit
Looking Ahead to Future Opportunities
We will continue to engage with developers to understand their challenges and opportunities — and how we can best support them in building sustainable businesses using blockchain technology. As a next step, we’re talking to industry partners about further improving our support of blockchain-based app experiences, including in areas such as secondary markets.
We’ll keep you posted on our progress. In the meantime, we’re excited to see how today’s blockchain policy announcement brings more fun and delight to apps and games across Google Play.
For more on the blockchain policy and other changes announced today:
Today we're bringing you Android 14 Beta 4, continuing our work on polish and performance as we get closer to the general availability release of Android 14. Beta 4 is available for Pixel Tablet and Pixel Fold, in addition to the rest of the supported Pixel family, so you can test your applications on devices spanning multiple form factors and directly experience the work we're doing to improve the large-screen and foldable device experience.
Platform Stability
Beta 4 is our second Platform Stable Android 14 release, which means that the developer APIs and all app-facing behaviors are final for you to review and integrate into your apps, and you can publish apps on Google Play to devices running Android 14 at the official API level.
It's a good time to finish compatibility testing and publish any necessary updates to ensure a smooth app experience ahead of the final release of Android 14 later this year.
If you develop an SDK, library, tool, or game engine, it's even more important to release any necessary updates now to prevent your downstream app and game developers from being blocked with compatibility issues. Also, when you release a compatible update, please make sure to let your developers know.
App Compatibility
Each release of Android contains changes to the platform that improve privacy, security, and the overall user experience. These changes can affect your apps. Testing your app involves installing your production app onto a device running Android 14 Beta 4; you can use Google Play or other means. Work through all the app's flows and look for functional or UI issues. Review the behavior changes to focus your testing.
Get started with Android 14
Today's Beta 4 release has everything you need to try Android 14 features, test your apps, and give us feedback. The easiest way to get started is using the 64-bit Android Emulator system images for the Pixel Tablet or Pixel Fold configurations found in the latest preview of the Android Studio SDK Manager. You can also enroll any supported Pixel device here — including the new Pixel 7a, Pixel Tablet, and the Pixel Fold — to get this and future Android 14 Beta and feature drop Beta updates over-the-air.
For the best development experience with Android 14, we recommend that you use the latest release of Android Studio Hedgehog which includes the Android SDK Upgrade Assistant to help with your migration. Once you’re set up, here are some of the things you should do:
Try the new features and APIs. Report issues in our tracker on the feedback page.
Test your current app for compatibility – learn whether your app is affected by default behavior changes in Android 14. Install your app onto a device or emulator running Android 14 and extensively test it.
Test your app with opt-in changes – Android 14 has opt-in behavior changes that only affect your app when it’s targeting the new platform. It’s important to understand and assess these changes early. To make it easier to test, you can toggle the changes on and off individually.
Update your app with the Android SDK Upgrade Assistant - Android Studio Hedgehog now filters and identifies the specific Android 14 API changes that are relevant to your app, and walks you through the steps to upgrade your targetSdkVersion with the Android SDK Upgrade Assistant.
Android SDK Upgrade Assistant in Android Studio Hedgehog
We’ll update the beta system images regularly throughout the Android 14 release cycle.
If you are already enrolled in the Android 14 Beta program and your device is supported, Beta 4 will be made available to you as an Over The Air update without taking any additional action.
With today's Android 14 Beta 3 release, we're continuing into the next phase of the Android development cycle. It builds upon our core themes of privacy, security, performance, developer productivity, and user customization while continuing to improve the large-screen device experience on tablets, foldables, and more.
Beta 3 takes Android 14 to Platform Stability, which means that the developer APIs and all app-facing behaviors are now final for you to review and integrate into your apps. Thank you for all of your continued feedback in getting us to this milestone.
With Platform Stability in Beta 3, you can confidently develop and release any necessary compatibility updates. Please start your final compatibility testing now and prepare to publish any necessary updates so you can get valuable feedback during the remainder of the beta releases. This will help ensure a smooth app experience ahead of the final release of Android 14 later this year.
If you develop an SDK, library, tool, or game engine, it's even more important to be testing now so you can release your compatible updates as soon as possible to prevent your downstream app and game developers from being blocked with compatibility issues. Also, when you've released a compatible update, please make sure to let your developers know.
App Compatibility
Each release of Android contains changes to the platform that improve privacy, security, and the overall user experience. These changes can affect your apps. Testing your app involves installing your production app onto a device running Android 14 Beta 3; you can use Google Play or other means. Work through all the app's flows and look for functional or UI issues. Review the behavior changes to focus your testing. Changes that may impact your app include:
Users can now grant partial access to their media library when your app requests any of the visual media permissions (READ_MEDIA_IMAGES or READ_MEDIA_VIDEO) introduced in Android 13 (API level 33). When your app moves to the background, or when the user actively kills your app, the system treats these as one-time-permissions and eventually denies them. If your app is following permissions best practices, this change shouldn't break your app. Android 14 introduces the READ_MEDIA_VISUAL_USER_SELECTED permission to help apps better support the new changes. For a more seamless user experience, we recommend that you consider using the photo picker which provides a safe way for users to grant your app access to selected images and videos that does not require any permissions.
To enhance user privacy, Android 14 increases the number of places where the system shows the information you have declared in the Play Console Form. For some permissions, the system runtime permission dialog now includes a clickable section that highlights your app's data sharing practices. This section of the system dialog includes information, such as why your app may decide to share data with third parties, and links users to where they can control your app's data access. We encourage you to review your app's location data sharing policies and take a moment to make any applicable updates to your app's Google Play Data safety section.
Please review the behavior changes section to see all of the changes that may impact the compatibility of your app or game. If you find any issues with libraries and SDKs in your app, try updating to the latest library or SDK version, reaching out to the developer for help if necessary.
A few of the changes Android 14 makes to refresh core libraries to align with features in the latest OpenJDK LTS releases can affect app compatibility, including changes to regular expressions, UUID handling, and issues involving ProGuard and the addition of java.lang.ClassValue.
Today's Beta 3 release has everything you need to try the Android 14 features, test your apps, and give us feedback. For testing your app with tablets and foldables, you can test with devices from our partners, but the easiest way to get started is using the 64-bit Android Emulator system images for the Pixel Tablet or Pixel Fold configurations found in the latest preview of the Android Studio SDK Manager. You can also enroll any supported Pixel device here, including the new Pixel 7a, to get this and future Android 14 Beta and feature drop Beta updates over-the-air.
For the best development experience with Android 14, we recommend that you use the latest release of Android Studio Hedgehog. Once you’re set up, here are some of the things you should do:
Try the new features and APIs. Report issues in our tracker on the feedback page.
Test your current app for compatibility – learn whether your app is affected by default behavior changes in Android 14. Install your app onto a device or emulator running Android 14 and extensively test it.
Test your app with opt-in changes – Android 14 has opt-in behavior changes that only affect your app when it’s targeting the new platform. It’s important to understand and assess these changes early. To make it easier to test, you can toggle the changes on and off individually.
We’ll update the beta system images regularly throughout the Android 14 release cycle.
If you are already enrolled in the Android 14 Beta program and your device is supported, Beta 3 will be made available to you as an Over The Air update without taking any additional action.
Posted by Rejane França, Product Manager and Serge Beauchamp, Software Engineer at Google Play
Last year, we introduced new capabilities for subscriptions on Google Play, giving you more flexibility and control when it comes to growing and retaining your subscribers. The enhanced developer experience enabled by the monetization.subscriptions APIs, separates your subscription products - what you sell - from how yousell them, allowing you to configure multiple base plans and offers for each subscription. The new model is designed to reduce the complexity and overhead of managing your product configuration - this means:
The subscription now defines the benefits and other metadata for the product you are selling, regardless of how the user pays.
Each base plan within a subscription defines the base price for a specific billing period and plan renewal type.
In addition to auto-renewing plans, you can sell prepaid plans that allow users access to pay a fixed amount of time, and then top-up as desired. With prepaid plans, reach users in regions where pay-as-you-go is standard or provide an alternative for users not ready to purchase an auto-renewing plan.
Offers build on the base plan, making it easier to define alternative pricing for eligible users throughout the monetization lifecycle. They can be used to acquire new subscribers, incentivize upgrades, or retain existing subscribers.
Monetization.subscriptions APIs will replace InAppProducts API for subscription catalog management
Starting on January 1, 2024, all new apps must use monetization.subscriptions APIs for managing your subscriptions catalog. Existing apps will have until May 1, 2024 to migrate to the new monetization.subscriptions APIs, at which point support for using the InAppProducts API for managing your subscriptions catalog will end completely.
Starting this month, if we detect that your app has used the InAppProducts API to manage your subscriptions within the last 7 days, you will start seeing a reminder in Play Console to migrate over to monetization.subscriptions APIs.
Additionally, if your app is not using the latest version of Play Billing Library, you’ll need to upgrade to version 5.0 or later before November of this year in order to publish updates to your app.
If you continue to use the InAppProduct API while support is still available, the subscription SKUs you create will be automatically converted into the new model following the backward compatible structure represented below with limited access to new features. Learn more about converted subscriptions here.
New model separates your subscription products – what you sell – from how you sell them.
No changes to selling in-app items with the InAppProducts API
This deprecation will only impact the InAppProducts API when used to manage your subscription product catalog in Play Console. All apps can continue using the InAppProducts API to manage one-time products. The Play Billing Library and Subscription Purchase APIs will not be impacted. Note that both InAppProducts API and monetization.subscriptions APIs are for managing your subscription catalog on Play from your backend, and should not be called directly as part of any in-app flows.
Start your migration to the monetization.subscriptions APIs
If you use the Google Play Developer API client libraries - available for Java, Python, and other popular languages - we recommend upgrading to the latest versions, which already include the monetization.subscriptions APIs. Base plans can be managed with the monetization.subscription.basePlans API, and introductory pricing and free trials can be managed as offers with the monetization.subscriptions.basePlans.offers API.
Posted by Jolanda Verhoef, Android Developer Relations Engineer
It has been almost two years since we launched the first stable version of Jetpack Compose, and since then, we’ve seen its adoption and feature set grow spectacularly. Whether you write an application for smartphones, foldables, tablets, ChromeOS devices, smartwatches, or TVs, Compose has got you covered! We recommend you to use Compose for all new Wear OS, phone and large-screen apps. With new tooling and library features, extended Material Design 3, large screen, and Wear OS support, and alpha versions of Compose for homescreen widgets and TV… This is an exciting time!
Compose in the community
In the last year, we’ve seen many companies investigating and choosing Compose to build new features and migrate screens in their production applications. 24% of the top 1000 apps on Google Play have already chosen to adopt Compose! For example, Dropbox engineers told us that they rewrote their search experience in Compose in just a few weeks, which was 40% less time than anticipated, and less than half the time it took the team to build the feature on iOS. They also shared that they were interested in adopting Compose “because of its first-class support for design systems and tooling support”. Our Google Drive team cut their development time nearly in half when using Compose combined with architecture improvements.
It’s great to see how these teams experience faster development cycles, and also feel their UI code is more testable. Inspired? Start by reading our guide How to Adopt Compose for your Team, which outlines how and where to start, and shows the areas of development where Compose can bring huge added value.
Library features & development
Since we released the first Compose Bill of Materials in October last year, we’ve been working on new features, bug fixes, performance improvements, and bringing Compose to everywhere you build UI: phones, tablets, foldables, watches, TV, and your home screen. You can find all changes in the May 2023 release and the latest alpha versions of the Compose libraries.
We’ve heard from you that performance is something you care about, and that it’s not always clear how to create performant Compose applications. We’re continuously improving the performance of Compose. For example, as of last October, we started migrating modifiers to a new and more efficient system, and we’re starting to see the results of that migration. For text alone, this work resulted in an average 22% performance gain that can be seen in the latest alpha release, and these improvements apply across the board. To get these benefits in your app, all you have to do is update your Compose version!
Text and TextField got many upgrades in the past months. Next to the performance improvements we already mentioned, Compose now supports the latest emoji version 🫶 and includes new text features such as outlining text, hyphenation support, and configuring line breaking behavior. Read more in the release notes of the compose-foundation and compose-ui libraries.
The new pager component allows you to horizontally or vertically flip through content, which is similar to ViewPager2 in Views. It allows deep customization options, making it possible to create visually stunning effects:
Choose a song using the HorizontalPager composable. Learn how to implement this and other fancy effects in Rebecca Franks' blog post.
The new flow layouts FlowRow and FlowColumn make it easy to arrange content in a vertical or horizontal flow, much like lines of text in a paragraph. They also enable dynamic sizing using weights to distribute the items across the container.
Using flow layouts to show the search filters in a real estate app
To learn more about the new features, performance improvements, and bug fixes, see the release notes of the latest stable and newest alpha release of the Compose libraries.
Tools
Developing your app using Jetpack Compose is much easier with the new and improved tools around it. We added tons of new features to Android Studio to improve your workflow and efficiency. Here are some highlights:
Compose Preview now supports live updates across multiple files, for example, if you make a change in your Theme.kt file, you can see all Previews updates automatically in your UI files.
Improving auto-complete behavior. For example, we now show icon previews when you’re adding Material icons, and we keep the @Composable annotation when running “Implement Members".
Showing Compose state information in the debugger. While debugging your app, the debugger will tell you exactly which parameters have “Changed” or have remained “Unchanged”, so you can more efficiently investigate the cause of the recomposition.
You can try out the new Studio Bot, an experimental AI powered conversational experience in Android Studio to help you generate code, fix issues, and learn about best practices, including all things Compose. This is an early experiment, but we would love for you to give it a try!
Emulator support for the newly announced Pixel Fold and Tablet Virtual Devices, so that you can test your Compose app before these devices launch later this year.
A new Espresso Device API that lets you apply rotation changes, folds, and other synchronous configuration changes to your virtual devices under test.
We’re also actively working on visual linting and accessibility checks for previews so you can automatically audit your Compose UI and check for issues across different screen sizes, and on multipreview templates to help you quickly add common sets of previews.
Material 3
Material 3 is the recommended design system for Android apps, and the latest 1.1 stable release adds a lot of great new features. We added new components like bottom sheets, date and time pickers, search bars, tooltips, and others. We also graduated many of the core components to stable, added more motion and interaction support, and included edge-to-edge support in many components. Watch this video to learn how to implement Material You in your app:
Extending Compose to more surfaces
We want Compose to be the programming model for UI wherever you run Android. This means including first-class support for large screens such as foldables and tablets and publishing libraries that make it possible to use Compose to write your homescreen widgets, smartwatch apps, and TV applications.
Large screen support
We’ve continued our efforts to make development for large screens easy when you use Compose. The pager and flow layouts that we released are common patterns on large screen devices. In addition, we added a new Compose library that lets you observe the device’s window size class so you can easily build adaptive UI.
When attaching a mouse to an Android device, Compose now correctly changes the mouse cursor to a caret when you hover the cursor over text fields or selectable text. This helps the user to understand what elements on screen they can interact with.
Glance
Today we publish the first beta version of the Jetpack Glance library! Glance lets you develop widgets optimized for Android phone, tablet, and foldable homescreens using Jetpack Compose. The library gives you the latest Android widget improvements out of the box, using Kotlin and Compose:
Glance simplifies the implementation of interactive widgets, so you can showcase your app’s top features, right on a user’s home screen.
Glance makes it easy to build responsive widgets that look great across form factors.
Glance enables faster UI Iteration with your designers, ensuring a high quality user experience.
Wear OS
We launched Compose for Wear OS 1.1 stable last December, and we’re working hard on the new 1.2 release which is currently in alpha. Here’s some of the highlights of the continuous improvements and new features that we are bringing to your wrist:
The placeholder and placeholderShimmer add elegant loading animations that can be used on chips and cards while content is loading.
expandableItems make it possible to fold long lists or long text, and only expand to show their full length upon user interaction.
Rotary input enhancements available in Horologist add intuitive snap and fling behaviors when a user is navigating lists with rotary input.
Android Studio now lets you preview multiple watch screen and text sizes while building a Compose app. Use the Annotations that we have added here.
Compose for TV
You can now build pixel perfect living room experiences with the alpha release of Compose for TV! With the new AndroidX TV library, you can apply all of the benefits of Compose to the unique requirements for Android TV. We worked closely with the community to build an intuitive API with powerful capabilities. Engineers from Soundcloud shared with us that “thanks to Compose for TV, we are able to reuse components and move much faster than the old Leanback View APIs would have ever allowed us to.” And Plex shared that “TV focus and scrolling support on Compose has greatly improved our developer productivity and app performance.”
Compose for TV comes with a variety of components such as ImmersiveList and Carousel that are specifically optimized for the living room experience. With just a few lines of code, you can create great TV UIs.
It’s great to see more and more internally and externally developed libraries add support for Compose. For example, loading pictures asynchronously can now be done with the GlideImage composable from the Glide library. And Google Maps released a library which makes it much easier to declaratively create your map implementations.
GoogleMap(
//...
) {
Marker(
state = MarkerState(position = LatLng(-34, 151)),
title = "Marker in Sydney"
)
Marker(
state = MarkerState(position = LatLng(35.66, 139.6)),
title = "Marker in Tokyo"
)
}
New and updated guidance
No matter where you are in your learning journey, we’ve got you covered! We added and revamped a lot of the guidance on Compose:
Learn hands-on with the Compose for Android Developers course, where you can learn the basics and deep dive into layouts, state, form factors, and more. We updated the course to include all the latest resources.
If you prefer watching videos, following on the well-received Compose Basics MAD Skills series, we recently published a new MAD Skills series on Layouts and Modifiers. With five episodes covering everything from the fundamentals to advanced concepts and functionality, a Q&A with Googlers, and a community tip, this series will help you to quickly improve your Compose Layout knowledge.
Learn how to implement Material 3 theming in your app with the new codelab.
Happy Composing!
We hope you're as excited by these developments as we are! If you haven't started yet, it's time to learn Jetpack Compose and see how your team and development process can benefit from it. Get ready for improved velocity and productivity. Happy Composing!