Skip to content

2025-05-07

Choose a tag to compare

@github-actions github-actions released this 07 May 18:48
· 35 commits to main since this release

Annotation-Experimental: v1.5.0

May 7, 2025

androidx.annotation:annotation-experimental:1.5.0 is released. Version 1.5.0 contains these commits.

Important changes since 1.4.0

  • Added message to RequiresOptIn to match the Kotlin stdlib annotation with default empty string value. (I1f50e)
  • This library now targets Kotlin 2.0 language level and requires KGP 2.0.0 or newer. (Idb6b5)

appfunctions: v1.0.0-alpha01

May 7, 2025

androidx.appfunctions:appfunctions:1.0.0-alpha01, androidx.appfunctions:appfunctions-compiler:1.0.0-alpha01, and androidx.appfunctions:appfunctions-service:1.0.0-alpha01 are released. Version 1.0.0-alpha01 contains these commits.

New Features

The AppFunctions Jetpack library is built on top of android.app.appfunctions platform APIs. This library simplifies exposing your app's functionality to the Assistant and allows the Assistant to interact with the app's exposed functions.

  • androidx.appfunctions:appfunctions: Core client APIs for managing (enable/disable) and interacting with (search/execute) AppFunctions.
  • androidx.appfunctions:appfunctions-service: Service-side APIs to easily expose your app's functionalities as AppFunctions.
  • androidx.appfunctions:appfunctions-compiler: Required KSP compiler to generate necessary code for exposing AppFunctions.

Benchmark: v1.4.0-beta01

May 7, 2025

androidx.benchmark:benchmark-*:1.4.0-beta01 is released. Version 1.4.0-beta01 contains these commits.

API Changes

  • Added PerfettoTraceRule constructor variant which accepts a PerfettoConfig (Ie53ba)

Bug Fixes

  • Updated TraceProcessor startup insight link format to use correct plugin, and clearer delimeter (: is shorter than %3A, and both are supported) (Ie18ef)
  • Always use force-stop to kill processes, even when rooted and killing system apps. Fixes exceptions of the form: Expected no stdout/stderr from killall ... No such process. (Idca2c)

External Contribution

  • Added proxy exception handler for TraceProcessorHttpServer (I480f5)

Camera: v1.5.0-beta01

May 7, 2025

androidx.camera:camera-*:1.5.0-beta01 is released. Version 1.5.0-beta01 contains these commits.

API Changes

  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed (Idb6b5)
  • ContentScale and Alignment can now be used in the viewfinder to scale and place the displayed surface within its container, similar to how androidx.compose.foundation.Image behaves. (Ibcea3)
  • TransformationInfo now has default values for all args. This will allow Viewfinders to be created without any TransformationInfo, which will default to a source rotation of 0, no source mirroring, and no crop rect. (I2b1b2)
  • Added LifecycleCameraProvider, which is a camera provider that can be instantiated with different configurations for features such as accessing the camera of a virtual device by configuring with a customized context. (Ia2992)

Bug Fixes

  • Fixed preview freeze issue when using ImageAnalysis with another stream that uses TEMPLATE_RECORD on Samsung SM-E556B device. (Ic0e62, b/409478042)
  • Fixed preview freeze issue when using ImageAnalysis with another stream that uses TEMPLATE_RECORD on Samsung SM-M556B device. (Ic1a6a, b/395822788)
  • Fixed Extensions NIGHT mode AssertError issue on Android 15 Pixel devices when doing zoom related operations. (I27a5d, b/401460276)
  • Fix ML Kit Analyzer incorrect bounding box coordinates issue when using CameraController. (Iae91b, b/409808510)

camera media3: v1.0.0-alpha03

May 7, 2025

androidx.camera.media3:media3-effect:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.

Bug Fixes

  • Fixed the cameraX media3-effect crash when using with media3 1.6 dependency (Ic1ff1)

camera viewfinder: v1.5.0-beta01

May 7, 2025

androidx.camera.viewfinder:viewfinder-compose:1.5.0-beta01, androidx.camera.viewfinder:viewfinder-core:1.5.0-beta01, and androidx.camera.viewfinder:viewfinder-view:1.5.0-beta01 are released. Version 1.5.0-beta01 contains these commits.

  • This is the first official beta release of the view-based and compose-based viewfinders that are flexible enough to be used with Camera2. If you’re looking for a View or composable to use with CameraX, see PreviewView and CameraXViewfinder.

New Features

  • ContentScale and Alignment can now be used in the compose-based viewfinder to scale and place the displayed surface within its container, similar to how androidx.compose.foundation.Image behaves. (Ibcea3)

API Changes

  • TransformationInfo now has default values for all args. This will allow Viewfinders to be created without any TransformationInfo, which will default to a source rotation of 0, no source mirroring, and no crop rect. (I2b1b2)
  • Composable Viewfinder now takes a trailing lambda to receive a Surface session, similar to AndroidExternalSurface. The provided lambda uses ViewfinderInitScope as a receiver, which allows installing a callback to receive new Surface sessions. These surface sessions automatically release resources held by the Viewfinder when they go out of scope. (Ib2b0d)
  • ViewfinderSurfaceRequest.Builder.populateFromCharacteristics has now been removed and is now replaced with an equivalent set of static APIs that can be used to generate TransformationInfo which will produce the same transformation as populateFromCharacteristics. These static methods are added to the Camera2TransformationInfo class. (Idc6af)
  • ViewfinderSurfaceRequest no longer includes async APIs for retrieving the surface. It is now an immutable data type. APIs for retrieving the Surface are now moved to the viewfinder. (I30127)
  • CameraViewfinder has been renamed to ViewfinderView so that the naming aligns with the naming of the Viewfinder composable and to indicate that it can be used with more than just camera sources. (Id9e6b)
  • Classes from viewfinder-view have been moved to the androidx.camera.viewfinder.view subpackage from the androidx.camera.viewfinder package. (I6cb44)
  • New APIs are added to view-based Viewfinder that allow setting the source rotation, mirroring, and crop rectangle. This TransformationInfo class is the same class used by the compose-based Viewfinder. (I907c3)
  • The view-based Viewfinder now uses new ViewfinderSurfaceRequest APIs which no longer internally handle the Surface response. Instead of returning ListenableFuture<Surface>, the requestSurfaceSession() APIs now return ListenableFuture<ViewfinderSurfaceSession> which returns an AutoCloseable class that when closed behaves the same way as calling the old API of ViewfinderSurfaceRequest.markSurfaceSafeToRelease(). This provides a clearer separation of responsibilities between the surface request and surface response. (I19041)

Compose Animation: v1.8.1

May 7, 2025

androidx.compose.animation:animation-*:1.8.1 is released. Version 1.8.1 contains these commits.

External Contribution

  • End animations in SeekableTransitionState if already past new duration. Thanks Steven Schoen! (fbcdf7)

Compose Animation: v1.9.0-alpha02

May 7, 2025

androidx.compose.animation:animation-*:1.9.0-alpha02 is released. Version 1.9.0-alpha02 contains these commits.

New Features

  • Much improved support for scrolling or dragging in shared elements. More specifically, when a transitioning shared element is being scrolled, the scroll delta will be directly applied to the shared element rather than causing the shared elements to chase the new target. (cacf7b)

Compose Foundation: v1.8.1

May 7, 2025

androidx.compose.foundation:foundation-*:1.8.1 is released. Version 1.8.1 contains these commits.

Bug Fixes

  • Fixed a bug in BasicText and TextAutoSize where using TextOverflow.Ellipsize would result in smaller-than-optimal text. (I1e1d8, b/396582066)
  • Fixed a bug in BasicTextField that caused miscellaneous crashes when TextFieldDecorator skips calling innerTextField. (I2638c), b/308398612
  • Fixed a bug in TextField that caused the text toolbar and selection handles to completely disappear when the TextFieldState instance was changed. (I8068a), b/390477786
  • Fixed a bug in BasicText where changing the min width constraint did not update the text’s placement when textAlign was set to a non-default value. (I77a96), b/406305552

Compose Foundation: v1.9.0-alpha02

May 7, 2025

androidx.compose.foundation:foundation-*:1.9.0-alpha02 is released. Version 1.9.0-alpha02 contains these commits.

API Changes

  • Fixed how pointer input changes are added to the VelocityTracker in DragGestureNode, this can be controlled with the new flag isOffsetPositionBeforeAddingToVelocityTrackerEnabled. (Ic7992, b/292556787, b/236451818)
  • Make await[Vertical/Horizontal]PointerSlopOrCancellation public (I6968b, b/298903681)
  • AbstractComposeView.consumeWindowInsets now defaults to false. WindowInsets will automatically be adjusted for child size and position when set to false, so there is no need to default it to true any longer. This fixes the issue where child Views were not receiving WindowInsets updates by default. Developers can opt out of the update either by changing the experimental ComposeFoundationLayout.isWindowInsetsDefaultPassThroughEnabled to true or, preferably, by setting AbstractComposeView.consumeWindowInsets to true on all Compose view instances. (I6fa0a, b/411868840)

Compose Material: v1.8.1

May 7, 2025

androidx.compose.material:material-*:1.8.1 is released. Version 1.8.1 contains these commits.

Compose Material: v1.9.0-alpha02

May 7, 2025

androidx.compose.material:material-*:1.9.0-alpha02 is released. Version 1.9.0-alpha02 contains these commits.

Compose Material3: v1.4.0-alpha14

May 7, 2025

androidx.compose.material3:material3-*:1.4.0-alpha14 is released. Version 1.4.0-alpha14 contains these commits.

API Changes

  • Added a new AppBarColumn composable working in the same fashion as AppBarRow but for content laid out in a column. (Iaf6bd)
  • Added max items to AppBarRow, this is necessary to correctly implement the material spec for top app bars. (I92ce4)
  • Added a method in TooltipScope to obtain the layoutCoordinates of the anchor. Deprecating the drawCaret method because developers can use this new method to obtain the anchor bounds layoutCoordinates and create an appropriate shape that contains a caret. (Ia2e12, b/329470609)
  • Added java.time support for Date Pickers: Introduced rememberDatePickerState/rememberDateRangePickerState overloads that accept java.time objects (e.g., initial LocalDate, YearMonth). Also added extension functions on the state objects to get/set values using types like LocalDate and YearMonth. Requires API 26+ or desugaring. (I70f29, b/266202516, b/281859606)
  • Add CenteredTrack composable allowing using a Slider with a track that starts from the center. (I5b1d6)

Bug Fixes

  • Enhanced the performance of Wavy Progress Indicators: Linear types now load ~8.5% faster with ~11% fewer allocations, while Circular types see a substantial ~47% speed boost and ~39% reduced allocations. (I595d8)

Compose Material3 Adaptive: v1.2.0-alpha05

May 7, 2025

androidx.compose.material3.adaptive:adaptive-*:1.2.0-alpha05 is released. Version 1.2.0-alpha05 contains these commits.

New Features

  • Material3 adaptive layouts are now supporting Levitated adapt strategies that can turn a pane into a floating popup.

API Changes

  • Make current window size functions support multi-platform (Ie4172)
  • Introduce pane motions for levitated panes (Ic9dc3)
  • Introduce levitate strategy for adaptation (I1ba7c)

Bug Fixes

  • Fix the usage of coroutine scope in adaptive samples (7631016)

Compose Runtime: v1.8.1

May 7, 2025

androidx.compose.runtime:runtime-*:1.8.1 is released. Version 1.8.1 contains these commits.

Compose Runtime: v1.9.0-alpha02

May 7, 2025

androidx.compose.runtime:runtime-*:1.9.0-alpha02 is released. Version 1.9.0-alpha02 contains these commits.

API Changes

  • Deprecated rememberSaveable with a custom 'key'. It bypasses positional scoping, leading to state bugs and inconsistent behavior (e.g., unintentional state sharing or loss, issues in nested LazyLayouts). Please remove the 'key' parameter to use positional scoping for consistent, locally-scoped state. See the full commit message for more details. (I5e6ff, b/357685851)

Bug Fixes

  • OffsetApplier now correctly overrides apply() which was introduced with pausable composition. Not having this could cause pausable composition to throw throw an exception when updating virtual nodes. (Idbf31, b/409291131)
  • Fixed a deadlock that may affect Molecule users when a suspended call to FrameClock.withFrameNanos is cancelled while a frame is being dispatched. (I89cab, b/407027032)
  • The Recomposer could go idle with movable content state still pending to be discarded. This normally does not occur as movable content state is discarded in the main loop of the Recomposer. However, this can occur in pausable composition when the movable content is discarded during resume()(Ie5416, b/409267170)
  • The order in which onReuse and onDeactivate could get inverted during pausable composition. They are now guaranteed to occur in order of onDeactivate/onReuse. (I996e4, b/404058957)

Compose UI: v1.8.1

May 7, 2025

androidx.compose.ui:ui-*:1.8.1 is released. Version 1.8.1 contains these commits.

Bug Fixes

  • Fix some issues with onLayoutRectChanged and LazyLayout d791b11
  • Skip remeasure requests for precomposed items. This bug affected the lazy layouts scrolling performance as the prefetch was not working efficiently in some cases, the measurement was happening within the frame. 742087a

Compose UI: v1.9.0-alpha02

May 7, 2025

androidx.compose.ui:ui-*:1.9.0-alpha02 is released. Version 1.9.0-alpha02 contains these commits.

API Changes

  • Add in dialogContentTitle to DialogProperties, which sets the content window title. bf9d670

Bug Fixes

  • Window Insets Rulers have been disabled temporarily while internal tests are fixed. 8d1402
  • Fixed how pointer input changes are added to the VelocityTracker in DragGestureNode, this can be controlled with the new flag isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled.254ddb

Core-telecom: v1.0.0

May 7, 2025

androidx.core:core-telecom:1.0.0 is released. Version 1.0.0 contains these commits.

Major features of 1.0.0

  • Initial stable release of core-telecom API, focusing on CallsManager API surface for integration of VoIP calls into the Android platform.

credentials: v1.6.0-alpha01

May 7, 2025

androidx.credentials:credentials:1.6.0-alpha01 and androidx.credentials:credentials-play-services-auth:1.6.0-alpha01 are released. Version 1.6.0-alpha01 contains these commits.

New Features

  • Passkey conditional create - Enables the passkey conditional create feature, whereby developers can request for a conditional passkey creation. A conditional creation request will be propagated to the preferred credential provider and then based on some internal conditions, a passkey will be created without the typical bottom sheet UI experience. Users will see a notification with information about the passkey that was just created.

API Changes

  • Expose CreateCredentialResponse.createFrom API (Ic0494)
  • Exposed isConditionalCreate bit to allow silent passkey creation. (I3a1bb)

credentials providerevents: v1.0.0-alpha01

May 7, 2025

androidx.credentials.providerevents:providerevents:1.0.0-alpha01 and androidx.credentials.providerevents:providerevents-play-services:1.0.0-alpha01 are released. Version 1.0.0-alpha01 contains these commits.

New Features

  • A new CredentialProviderEventsService is being added that credential providers will support to receive events from Credential Manager APIs. One of the features that credential providers can now support through this service is the passkey conditional create experience. This service is designed to propagate other credential provider updates as well in the future.

API Changes

  • CredentialProviderEventsService - a new service for credential providers to extend from in order to receive events from Credential manager API.

DataStore: v1.1.6

May 7, 2025

androidx.datastore:datastore-*:1.1.6 is released. Version 1.1.6 contains these commits.

Bug Fixes

  • Resolved an issue where Gradle metadata was broken in version 1.1.5. This issue was caused by a bug in the new AGP KMP plugin DSL preventing metadata for all target platforms from being automatically included. The bug leads to some DataStore Android methods no longer visible in clients’ builds. The fix involves using the older android DSL in build.gradle instead of androidLibrary. (7801abf)

DataStore: v1.2.0-alpha02

May 7, 2025

androidx.datastore:datastore-*:1.2.0-alpha02 is released. Version 1.2.0-alpha02 contains these commits.

API Changes

  • Added multiprocess support in GuavaDataStore. (e0d608a).
  • Added a helper method to create a GuavaDataStore from a DataStore. (9af26f4)
  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed. (Idb6b5)
  • Replace the existing datastore overload with a delegate method to initialize a DataStore to be used during direct boot. (If71b9)

Documentfile: v1.1.0

May 7, 2025

androidx.documentfile:documentfile:1.1.0 is released. Version 1.1.0 contains these commits.

Glance: v1.2.0-alpha01

May 7, 2025

androidx.glance:glance-*:1.2.0-alpha01 is released. Version 1.2.0-alpha01 contains these commits.

API Changes

  • currentCompositeKeyHash is now deprecated. Use currentCompositeKeyHashCode instead. The replacement API encodes the same hash with more bits, which exponentially reduces the chance of two random unrelated groups in the composition hierarchy from having the same hash key.(I4cb6a, b/177562901)
  • Adds a new api to specify alpha (0f to 1f) for the glance Image composable and the background image modifier. When not specified, retains the alpha from the source image. (I8ad05)
  • Add Glance APIs for generated previews. Override GlanceAppWidget.providePreview to provide a preview layout for your widget. Then, call GlanceAppWidgetManager.setWidgetPreview to set your preview. (Iced16)
  • Add MultiProcessGlanceAppWidget to support multiprocess configurations (Idbb90)
  • Removes experimental tag, we now support lambdas (I74d98, b/299361317)
  • Allow specifying the lambda receiver for GlanceAppWidget.runComposition (I84829)
  • Add previewSize parameter to requestPinGlanceAppWidget (I9f8f0, b/303256067)

Bug Fixes

  • Removed manual outlining of access to new platform APIs since this happens automatically via API modeling when using R8 with AGP 7.3 or later (e.g. R8 version 3.3) and for all builds when using AGP 8.1 or later (e.g. D8 version 8.1). Clients who are not using AGP are advised to update to D8 version 8.1 or later. See this article for more details. (If6b4c, b/345472586)
  • Update glance-appwidget libraries to compileSdk 35 (I2e26b)

Health Services Client: v1.0.0

May 7, 2025

androidx.health:health-services-client:1.0.0 is released. Version 1.0.0 contains these commits.

Major features of 1.0.0

  • This is the promotion of 1.0.0-rc02 to be the stable release of Health Services Client. There are no changes from 1.0.0-rc02.

Hilt: v1.3.0-alpha01

May 7, 2025

androidx.hilt:hilt-*:1.3.0-alpha01 is released. Version 1.3.0-alpha01 contains these commits.

API Changes

  • Updates the library and annotation processor to target Kotlin 2.0 to support newer Kotlin toolchain including KSP2.

Lifecycle: v2.9.0

May 7, 2025

androidx.lifecycle:lifecycle-*:2.9.0 is released. Version 2.9.0 contains these commits.

Important changes since 2.8.0

  • A new androidx.lifecycle:lifecycle-viewmodel-testing KMP artifact is available that provides a ViewModelScenario class for testing ViewModels in isolation, with support for onCleared and SavedStateHandle as well as testing process death and recreation via recreate().
  • Add getMutableStateFlow to SavedStateHandle to return a MutableStateFlow. This new function is key-exclusive and cannot be used with getLiveData. An exception will be thrown if you try to use both to access the same state.
  • CreationExtras now includes map-like operator overloads to enable idiomatic manipulation of content in Kotlin. It allows the use of in, +=, and + with CreationExtras.

KotlinX Serialization Support

  • With the support of KotlinX Serialization added in SavedState 1.3.0, we have introduced saved, a lazy property delegate, to make it easy to store @Serializable classes in a SavedStateHandle and have those classes automatically be restored across process death and recreation. Please note the saved delegate is lazy and will not call the init lambda or save anything into the SavedStateHandle until it is accessed.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    

    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
    var person by handle.saved { Person("John", "Doe") }

    fun onPersonChanged(person: Person) {
    this.person = person
    }
    }


Kotlin Multiplatform

  • The lifecycle-testing module is now KMP compatible including APIs like TestLifecycleOwner.
  • The lifecycle-viewmodel-savedstate module is now KMP compatible including APIs like SavedStateHandle.
  • The androidx.compose.ui.platform.LocalLifecycleOwner is now available in the common source set.
  • NewInstanceFactory is now available on JVM Desktop and Android targets.

Behavior Changes

  • The Lifecycle.DESTROYED state is terminal, and any attempt to move a Lifecycle from it to any other state will now result in an IllegalStateException.
  • SavedStateHandle no longer includes any SavedStateProvider.saveState() where the returned Bundle is empty.

Mediarouter: v1.8.0-beta01

May 7, 2025

androidx.mediarouter:mediarouter:1.8.0-beta01 and androidx.mediarouter:mediarouter-testing:1.8.0-beta01 are released. Version 1.8.0-beta01 contains these commits.

API Changes

  • Include client package name in RouteControllerOptions (Ieac03)

Bug Fixes

  • Fix NullPointerException when attempting to detach a non-existent controller from a connection (8e61574).

Navigation: v2.9.0

May 7, 2025

androidx.navigation:navigation-*:2.9.0 is released. Version 2.9.0 contains these commits.

Important changes since 2.8.0

  • Navigation Safe Args actions are now generated with the @CheckResult annotation to ensure they are used.

SupportingPane Interface

  • Custom Navigators can now mark their destinations as implementing the SupportingPane interface which indicates to the NavController that these destinations will be shown alongside other destinations. By using this interface, multiple destinations can be RESUMED at the same time, for instance.

Compose Kotlin Multiplatform

  • Navigation now offers a new common NavController.handleDeepLink() function that takes a NavDeepLinkRequest instead of an Intent. This allows platforms other than Android to properly handle deep links. Thanks Konstantin Tskhovrebov!
  • Navigation now offers NavUri, a new common parser function that is a compatible API for Android’s URI on other platforms. This makes it possible to create a URI in a platform agnostic way. Thanks Konstantin Tskhovrebov!

Type Safe functions

  • The type safe APIs that were previously only accessible via reified methods i.e., composable<YourScreen> now have non-reified versions that directly take a KClass instance.
  • Navigation type safety now supports value classes as a route or as the argument type of a route.

pdf: v1.0.0-alpha09

May 7, 2025

androidx.pdf:pdf-*:1.0.0-alpha09 is released. Version 1.0.0-alpha09 contains these commits.

Major Changes

  • The codebase has undergone a major refactoring and is now fully written in Kotlin, utilizing Coroutines and ViewModel. This includes a reimplementation of the PdfViewerFragment. This release does not include any new APIs or features.

Known Issues:

  • The fast scroller and page indicator are missing shadow effects.
  • Single-page PDF documents might not always be centered and scaled to the view's width.

API Changes

  • Annotate containerStyleResId with @StyleRes. (I88d85)

RecyclerView-Selection: v1.2.0-rc01

May 7, 2025

androidx.recyclerview:recyclerview-selection:1.2.0-rc01 is released. Version 1.2.0-rc01 contains these commits.

Bug Fixes

  • Fix small mouse moves turning clicks into drags. (Ie9106)

Savedstate: v1.3.0

May 7, 2025

androidx.savedstate:savedstate-*:1.3.0 is released. Version 1.3.0 contains these commits.

Important changes since 1.2.0

  • LocalSavedStateRegistryOwner has been moved from Compose UI to the new savedstate-compose module so that its Compose-based helper APIs can be used outside of Compose UI. This should always be used when using Compose UI 1.9.0-alpha02 and higher, but is backward compatible such that it can be used with all versions of Compose.
  • The savedstate-ktx kotlin extensions have now been moved to the base savedstate module.
  • SavedStateRegistryOwner instances retrieved via findViewTreeSavedStateRegistryOwner can now be resolved through disjoint parents of a view, such as a ViewOverlay. See the release notes of core or the documentation in ViewTree.setViewTreeDisjointParent for more information on disjoint view parents.

Kotlin Multiplatform

  • The SavedState module is now KMP compatible. Supported platforms now include Android, iOS, Linux, Mac, and JVM desktop environments.
  • Introduce SavedState opaque type as an abstraction to provide a consistent way to save and restore application state in KMP. It includes a SavedStateReader and SavedStateWriter for modifying the state to be saved. On Android, SavedState is a type alias for Bundle, ensuring binary compatibility and facilitating the migration of existing APIs to a common source set. On other platforms, SavedState is a Map<String, Any> instance.

      // Create a new SavedState object using the savedState DSL:
      val savedState = savedState {
        putInt("currentPage", 1)
        putString("filter", "favorites")
      }
    

    // Read from a SavedState object
    val currentPage = savedState.read { getInt("currentPage") }

    // Edit an existing SavedState object
    savedState.write {
    remove("currentPage")
    }


KotlinX Serialization Support

  • SavedState now includes KotlinX Serialization support. You can convert a class annotated with @Serializable to a SavedState using the methods encodeToSavedState and decodeFromSavedState. The returned SavedState is a regular Bundle on Android and can be used by any API that accepts a Bundle.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    

    fun main() {
    val person = Person("John", "Doe")
    val encoded: SavedState = encodeToSavedState(person)
    val decoded: Person = decodeFromSavedState(encoded)
    }


  • While most types (such as primitive types) are directly supported without any configuration needed, additional serializers that can be used with @Serializable(with = ___:class)can be found in the androidx.savedstate.serialization.serializers package in the savedstate module and the androidx.savedstate.compose.serialization.serializers package in the savedstate-compose module.

  • We also have included saved, a lazy property delegate, to make it easy to store @Serializable classes in a SavedStateRegistryOwner (e.g., ComponentActivity, Fragment, etc.) and have those classes automatically be restored across process death and recreation. Please note the saved delegate is lazy and will not call the init lambda or save anything into the SavedStateRegistry until it is accessed.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    

    class MyActivity : ComponentActivity() {
    var person by saved { Person("John", "Doe") }

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    this.person = Person("Jane", "Doe")
    }
    }


  • There is a similar saved property delegate for SavedStateHandle added in Lifecycle 2.9.0.

Sqlite: v2.5.1

May 7, 2025

androidx.sqlite:sqlite-*:2.5.1 is released. Version 2.5.1 contains these commits.

API Changes

  • Allow androidx.sqlite:sqlite-bundled to load its native component from a specified path via the system property named androidx.sqlite.driver.bundled.path. b/381282544

Test Uiautomator: v2.4.0-alpha02

May 7, 2025

androidx.test.uiautomator:uiautomator:2.4.0-alpha02 is released. Version 2.4.0-alpha02 contains these commits.

New Features

  • Initial shape of new Uiautomator Api. UiAutomatorTestScope can be created through the factory uiAutomator that gives access to the new onView apis.
  • Initial Lint Rules for warning about usage of AccessibilityNodeInfo#getText and suggest usage of textAsString.

API Changes

  • Added Configurator#setDefaultDisplayId to set a display ID to restrict all searches to (Icdf17).
  • Changed Searchable (interface shared by UiDevice and UiObject2) to public for convenience (I67f18).

Bug Fixes

  • Fixed handling of meta keys in UiDevice#pressKeyCodes. (I73f80).
  • Updated UiDevice#getWindowRoots to always return roots in Z order (I87426).
  • Fixed issue where certain gestures were incomplete (I60dd3, If4edd).
  • Fixed rare infinite loop when calling UiDevice#scrollUntil (I39989).

TV Provider: v1.1.0

May 7, 2025

androidx.tvprovider:tvprovider:1.1.0 is released. Version 1.1.0 contains these commits.

Wear Compose: v1.5.0-beta01

May 7, 2025

androidx.wear.compose:compose-*:1.5.0-beta01 is released. Version 1.5.0-beta01 contains these commits.

The 1.5.0-beta01 release of Compose for Wear OS indicates that this release of the library is feature complete and the API is locked (except where marked as experimental).

Wear Compose 1.5.0-beta01 includes the Wear Compose Material3 library, which supports the new UI design system called Material 3 Expressive. It is recommended to upgrade from Material to Material3 to embrace the new visual design in apps, and to benefit from the new components as follows:

  • MaterialTheme for updated and extended color schemes, typography, and shapes to bring both depth and variety to your designs.
  • Dynamic Color Theming which automatically generates a color scheme for your app to match the watch face colors.
  • New components automatically adapt to larger screen sizes by default
  • Shape Morphing - round button components like IconButton, TextButton, IconToggleButton and TextToggleButton support variations that animate when pressed or checked.
  • EdgeButton - a new edge-hugging button with a special shape designed for the bottom of the screen.
  • Scaffolds - introducing AppScaffold and ScreenScaffold to lay out the structure of the screen and coordinate ScrollIndicator and TimeText animations.
  • Buttons - numerous stadium-shaped buttons are supported with flexible, single-slot containers and multi-slot variations for buttons with icons and labels. CheckboxButton and SwitchButton are provided when toggle buttons are needed, whilst RadioButton is the available selection button (‘Split’ variations of the toggle and selection buttons are also provided).
  • ButtonGroup - implements an expressive group of buttons in a row that shape-morph when touched.
  • AlertDialog variations support ok/cancel buttons or an EdgeButton.
  • ConfirmationDialog is available to display a message with a timeout, supporting special animations for success, failure and open-on-phone variations.
  • Pickers - TimePicker and DatePicker variations are supported as well as the Picker and PickerGroup components for building your own picker screens.
  • ProgressIndicators - circular, and linear progress indicators are supported (the CircularProgressIndicator has segmented and indeterminate variations).
  • Cards - a number of card variations are available, including TitleCard which offers specific layouts for cards with title, time, subtitle or content slots. TitleCard can also be given an image background to reinforce the meaning of the information in a card.
  • Pagers - HorizontalPagerScaffold, VerticalPagerScaffold and AnimatedPage components coordinate HorizontalPageIndicator and VerticalPagerIndicator animations. HorizontalPager and VerticalPager are released in the Wear Compose Foundation library.
  • Placeholders - draws a skeleton shape over a component, for situations where no provisional content is available.
  • Sliders and Steppers - both sliders and steppers allow users to make a selection from a range of values. Sliders are more compact and can be segmented, whereas Stepper is a full screen component typically paired with a StepperLevelIndicator.
  • SwipeToReveal - used to add additional actions to a composable when it is swiped right-to-left.

In addition, Wear Compose Foundation 1.5.0-beta01 includes these new components:

  • TransformingLazyColumn - a lazy, vertically scrolling list the supports scaling and morphing animations
  • Hierarchical Focus Groups - used to annotate composables in an application, to keep track of the active part of the composition and coordinate focus.
  • Pagers - HorizontalPager and VerticalPager components, built on the Compose Foundation components with Wear-specific enhancements to improve performance and adherence to Wear OS guidelines.

API Changes

  • Updated the Hierarchical Focus API - renamed Modifier.hierarchicalFocus to Modifier.hierarchicalFocusGroup and removed the callback parameter; removed the overload of Modifier.hierarchicalFocusRequester with a FocusRequester parameter; created a new CompositionLocal, LocalScreenIsActive so that components can inform and check which screen is the active one. (I5ff7c).
  • Deprecated SwipeToReveal from Wear Compose Foundation in favor of SwipeToReveal APIs in Wear Compose Material and Wear Compose Material3. Please replace Wear Foundation SwipeToReveal imports with Wear Compose Material/ Wear Compose Material3 imports to continue using the APIs. (Ia147d).
  • Wear Compose Material3 SwipeToReveal dependencies on Foundation were moved to the material3 package, e.g. RevealValue, RevealDirection, RevealActionType, RevealState, rememberRevealState. Developers should change their imports of these classes and functions from androidx.wear.compose.foundation to androidx.wear.compose.material3. (I640e6).
  • Updated the Wear Compose Material3 SwipeToReveal API as follows: added primaryAction, onFullSwipe, secondaryAction, undoPrimaryAction, undoSecondaryAction and hasPartiallyRevealedState parameters to the SwipeToReveal composable; removed the ability to customize positionalThreshold and animationSpec from RevealState; removed lastActionType, revealThreshold and width from RevealState; changed the RevealState constructor to accept a RevealDirection instead of anchors; removed createRevealAnchors, anchors, and bidirectionalAnchors functions; SwipeToRevealScope functions primaryAction, secondaryAction, undoPrimaryAction and undoSecondaryAction were renamed to PrimaryActionButton, SecondaryActionButton, UndoActionButton and made into Composable functions; marked RevealActionType as internal. (I885d0).
  • Further updated SwipeToReveal API as follows: renamed onFullSwipe to onSwipePrimaryAction; renamed SwipeToRevealNonAnchoredSample to indicate the use of the hasPartiallyRevealedState parameter; removed actionButtonHeight, since the default is the Button's default height and the larger height can be set using a modifier; removed the SmallActionButtonHeight from SwipeToRevealDefaults; made the value parameter in RevealValue and RevealDirection constructors private. (I465ce).

Bug Fixes

  • Fixed ScreenScaffold’s EdgeButton handling so that, after a TransformingLazyColumn item is removed, the EdgeButton is animated into place. (I6d366).
  • Updated Wear Compose dependencies on Compose libraries to version 1.8.0. (I2ef3f).
  • Updated the motion of the indeterminate CircularProgressIndicator so that it no longer regresses temporarily. (Ieddb1).
  • Fixed a SwipeDismissableNavHost bug - the focus was not switching correctly after swiping back, causing rotary input to fail (this was for API 36+, which uses predictive back). (Ieddb1).
  • Amended documentation for the Hierarchical Focus API (Idf2ff).
  • Updated the documentation for Button and Card to state how containerPainter and disabledContainerPainter override containerColor and disabledContainerColor (I4a453).
  • Reverted a change to TimeText in the previous release which moved the BroadcastReceiver to a worker thread, because it caused issues for apps that manage their own threading during navigation. (I34d02).
  • Updated the Picker samples to remove unnecessary remember calls and instead use rememberUpdatedState in Picker to remember the latest contentDescription lambda function. (Icb5b1).
  • Updated text styles in TimePicker and DatePicker so that font changes no longer result in truncation. (I26194).
  • ListHeader and ListSubHeader now default text alignment to center-aligned and start-aligned respectively. (I78339).
  • Updated Foundation and Material Swipe to Reveal samples and demos to announce custom accessibility actions (the custom actions must be added as semantics on the content, not on the SwipeToReveal composable itself). (Ie92a3).
  • Updated the default MaxLines set on the EdgeButton content according to its size - it is now 1 for extra small, 2 for small and medium, and 3 for large. (Ie35f6).
  • Simplified LocalReduceMotion so that the observer is only registered once, to improve performance. (Ib1979).
  • Minimized the number of redraws in ScrollIndicator, to improve performance. (Ia7a67).
  • Fixed a bug in TransformingLazyColumn, where the top visible item in the list did not scale correctly when EdgeButton achieved its full height. (I30580).

wear protolayout: v1.3.0-beta02

May 7, 2025

androidx.wear.protolayout:protolayout-*:1.3.0-beta02 is released. Version 1.3.0-beta02 contains these commits.

Bug Fixes

  • We have made an important improvement in the Typography design values that are applied on API 36 and above. This is because from API 36, all Tiles will be in the system font, so this change introduces better consistency in the Tiles carousel. (If316f)
  • Text,Spacer, ArcLine and DashedArcLine builders won’t throw if layoutConstraintsfor dynamic values are not set. Note that older renderers still require the layoutConstraints to be set and will ignore any dynamic value that doesn’t have it set. (Ic52e8)
  • Add heading semantics modifier to indicate that a layout element is heading for a section of content for accessibility purpose, and mark the text in the title slot of primaryLayout to be accessibility heading by default. (Iae1fb)
  • Final UX polish of the primaryLayout where space between title slot and main slot is decreased to 4dp instead of 6dp on smaller screens. (I0e056)
  • Apply default content description to textEdgeButton. (Ifaf8b)
  • Minor update to the avatarButton inner padding. (I0910b)

Wear Tiles: v1.5.0-beta02

May 7, 2025

androidx.wear.tiles:tiles-*:1.5.0-beta02 is released. Version 1.5.0-beta02 contains these commits.

Webkit: v1.14.0-beta01

May 7, 2025

androidx.webkit:webkit:1.14.0-beta01 is released. Version 1.14.0-beta01 contains these commits.

API Changes

WindowManager: v1.5.0-alpha02

May 7, 2025

androidx.window:window-*:1.5.0-alpha02 is released. Version 1.5.0-alpha02 contains these commits.

API Changes

  • Add WindowSizeClass breakpoints for Large and XLarge. (I40d85)
  • Expand calculating WindowMetrics to Application Context. (I8eeeb, b/360934048)
  • Provider a Getter to enable direct access to WindowLayoutInfo (Ie9513)
  • Introduce API to auto save embedding state and to auto restore the embedding state when the app process is restarted. (Ie0295)
  • Remove experimental WindowInsets API. (I68a71)
  • Hide a few constructors (I87b8d)

Bug Fixes

  • Fixes EmbeddingRule returning different hashCode in some cases. (I748cc)

ARCore for Jetpack XR: v1.0.0-alpha04

May 7, 2025

androidx.xr.arcore:arcore:1.0.0-alpha04 is released. Version 1.0.0-alpha04 contains these commits.

Note: You'll need Android Emulator version 35.6.7 or later to use this version of the library.

API Changes

  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed. (Idb6b5)
  • TrackingState and HandJointType have been moved from ARCore to Runtime.
  • Hand.State.isActive (boolean) has been changed to Hand.State.trackingState (androidx.xr.runtime.TrackingState).
  • Anchor.load returns Anchor.AnchorLoadInvalidUuid if the UUID is invalid.

Jetpack Compose for XR: v1.0.0-alpha04

May 7, 2025

androidx.xr.compose:compose:1.0.0-alpha04 and androidx.xr.compose:compose-testing:1.0.0-alpha04 are released. Version 1.0.0-alpha04 contains these commits.

Note: You'll need Android Emulator version 35.6.7 or later to use this version of the library.

New Features

  • Added CompositionLocalConsumerSubspaceModifierNode interface to allow custom SubspaceModifier types to access composition local values.
  • Added a new SpatialPanel API that follows the compose AndroidView implementation style and deprecates the previous ViewBased SpatialPanel.
  • Added VolumeConstraints.Unbounded companion object which represents unbounded constraints.
  • Added SubspaceModifier.onPointSourceParams to allow a spatialized audio source.
  • A public ApplicationSubspace has been added, offering optional VolumeConstraints to define a 3D area where the app can render spatial content. By default, if no constraints are specified, the Subspace will be bounded by the SpatialUser's current field of view in width and height. Users can provide constraints to be used if the field of view cannot be determined. Otherwise, the default field of view width and height values are used.
  • Added SpatialExternalSurface, which can be used to render stereoscopic content. SpatialExternalSurface is customizable with modifiers (except alpha), and an edge feathering effect.
  • Added a new pointerHoverIcon Subspace Modifier that allows users to set the icon for the spatial pointer.

API Changes

  • Removed RequiresApi(34) restriction on all Jetpack XR packages. This restriction was redundant as Jetpack XR is currently only available on devices with API level 34+. (Iae0f8)
  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed. (Idb6b5)
  • Back handling will now work on spatial panels without embedded activities. For back handling to work you need to specify android:enableOnBackInvokedCallback="true" in the android manifest.
  • Backhandling will now work on spatial dialogs. For backhandling to work you need to specify android:enableOnBackInvokedCallback="true" in the android manifest.
  • Compose-based and View-based SpatialPanels can now size themselves based on their contents.
  • Developers may now set their own custom SpatialElevationLevel values and are not limited to the predefined levels.
  • Orbiter elevation level may now be customized via the elevation parameter.
  • Subspace can now be bounded by the SpatialUser's field of view in width and height by default. If the field of view cannot be determined, the default field of view width and height values are used.
  • Added new callbacks onMoveStart and onMoveEnd to the Movable modifier. The onMoveStart and onMoveEnd callbacks are called when the user starts and ends moving a subspace composable with the movable modifier.
  • The name parameter has been removed from spatial APIs such as SpatialRow and SpatialPanel. For debugging spatial compose trees use SubspaceModifier.testTag instead.
  • Removed an unsupported overload of SpatialPopup that only has spatialElevationLevel and content. Please use the interface that supports onDimissRequest.
  • The onPoseChange callback from the Movable modifier has been removed. Use onMove instead.
  • SubspaceModifiers will no longer apply their effects if they are detached or currently detaching.
  • The existing SpatialRow API has been split into SpatialRow and SpatialCurvedRow. If previously using SpatialRow's curveRadius parameter, use SpatialCurvedRow now instead which offers the same behavior.
  • MainPanel and ActivityPanel no longer have title bars when run on a similarly recent system image.
  • Alpha and scale modifiers are now stackable and will multiply their values for the final applied alpha or scale value.
  • The onPoseChange callback from the Movable modifier has been optimized to perform smoother pose movement.
  • The movable and resizable modifiers will now perform their callbacks on the main thread to ensure that state changes will trigger recomposition.
  • Added state observation to the layout and measure phases to ensure that state changes in SubspaceLayout will trigger relayout.
  • Optimized modifier chain updates to better reuse existing modifiers.

Bug Fixes

  • Stopped scrimming when a SpatialDialog is shown. (Ic4594)
  • Relayout requests made while modifier nodes are detached will now be ignored.
  • Removed relayout phases triggered by Movable and Resizable modifiers.
  • Fixed a crash in MainPanel() composable that occurred when either dimension was set to zero, either directly or during a layout calculation, e.g., a SpatialRow/SpatialColumn calculation. The panel will now be hidden instead. Note that this fix specifically addresses crashes during the layout phase; resizing the panel to zero via user interaction will be handled separately. The hidden panel lacks UI affordances.
  • Fixed issue with maintainAspectRatio from the resizable modifier. The aspect ratio should be kept now.
  • Fixed an issue with nested Subspaces where they would be incorrectly positioned for a single frame.
  • Fixed issue where rounded corners were sometimes not applied when they should be.
  • NestedSubspaces will no longer appear for one frame in the wrong location.

Material Design for XR: v1.0.0-alpha07

May 7, 2025

androidx.xr.compose.material3:material3:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.

Note: You'll need Android Emulator version 35.6.7 or later to use this version of the library.

API Changes

  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed. (Idb6b5)

XR Runtime: v1.0.0-alpha04

May 7, 2025

androidx.xr.runtime:runtime:1.0.0-alpha04, androidx.xr.runtime:runtime-openxr:1.0.0-alpha04, and androidx.xr.runtime:runtime-testing:1.0.0-alpha04 are released. Version 1.0.0-alpha04 contains these commits.

Note: You'll need Android Emulator version 35.6.7 or later to use this version of the library.

New Features

  • Session now implements androidx.lifecycle.LifecycleOwner for more interoperability with existing Android lifecycle paradigms.
  • Manifest strings for Android XR are specified and documented here.
  • Spatial Visibility Callback extension methods added to monitor when the scene content moves inside or outside the user's field of view.
  • Added a stub version of the JxrPlatformAdapter (and all its related classes).
  • Session will be used in both SceneCore and Runtime instead of the Session in SceneCore.
  • ActivityPose.hitTest was added, enabling a hitTest against virtual content.
  • Specifying multiple Runtime implementations at compile time is now supported. Only one will be loaded at execution time based on the current device's feature set.
  • Added new Component type SpatialPointerComponent, allowing clients to specify the icon rendered for the pointer, or to disable the icon. This Component can currently be attached to PanelEntity instances only.

API Changes

  • Make Config implementation public. (I95860)
  • Add HandJointType and TrackingState. (I55880)
  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed (Idb6b5)
  • Hand.isActive (boolean) has been changed to Hand.trackingState. The OpenXR implementation has been modified accordingly.
  • android.permission.SCENE_UNDERSTANDING permission requirement in Session.configure has been changed to android.permission.SCENE_UNDERSTANDING_COARSE.
  • LifecycleManager.configure is implemented and now passes in a Config object which contains a property for each configurable runtime feature.
  • Session.configure can now be called with a Config in order to configure the available runtime features.
  • Session.create now supports passing a CoroutineContext instead of a CoroutineDispatcher.
  • Session.create supports loading ARCore for Jetpack XR and/or SceneCore. At least one must be provided (testing versions are available).
  • FakePerceptionManager throws an AnchorInvalidUuidException when an invalid UUID is passed to Anchor.load and Anchor.unpersist.
  • CoreState is no longer a data class.

Bug Fixes

  • Fixed Runtime proguard configurations.

Jetpack SceneCore: v1.0.0-alpha04

May 7, 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha04 and androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 are released. Version 1.0.0-alpha04 contains these commits.

Note: You'll need Android Emulator version 35.6.7 or later to use this version of the library.

New Features

  • Backhandling will now work on panel entities without embedded activities. For backhandling to work you need to specify android:enableOnBackInvokedCallback= "true" in the android manifest.
  • StereoSurfaceEntity now supports MV-HEVC playback through two new StereoMode values: MULTIVIEW_LEFT_PRIMARY and MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize and PanelEntity.getSize now return sizes in parent space.
  • Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha and Entity.getAlpha now take a new param relativeTo, which allows get/set values relative to different spaces. The supported values are Parent, Activity and Real World spaces, and the default value for this param is Parent.
  • Spatial Visibility Callback extension methods added to SessionExt.kt to monitor when the scene content moves inside or outside the user's field of view.
  • setPointSourceParams has been added to SpatialAudioTrack, allowing the params to be updated after the track has been built.
  • Added a new class, Scene, with references to Scenecore APIs. Scene will be accessible as an extension property of Session. Functions inside of SessionExt have been moved to Scene so imports will be need to be adjusted; for example, SessionExt.getScene(session).addSpatialCapababilitiesChangedListener versus SessionExt.addSpatialCapabilitiesChangedListener.
  • ActivityPose.hitTestAsync was added, enabling a hitTest against virtual content.
  • Added new Component type SpatialPointerComponent, allowing clients to specify the icon rendered for the pointer, or to disable the icon. This Component can currently be attached to PanelEntity instances only.
  • Introducing new PanelEntity factory, which takes panel dimensions in either meters or pixels. Older PanelEntity factory taking two Dimension type params for panel removed.

API Changes

  • Removed RequiresApi(34) restriction on all Jetpack XR packages. This restriction was redundant as Jetpack XR is currently only available on devices with API level 34+. (Iae0f8)
  • Projects released with Kotlin 2.0 require KGP 2.0.0 or newer to be consumed (Idb6b5)
  • PermissionHelper class has been removed.
  • PanelEntity.getPixelDensity is deprecated.
  • PanelEntity.setPixelDimensions and PanelEntity.getPixelDimension are removed, replaced by setSizeInPixels and getSizeInPixels.
  • Entity.getActivitySpaceAlpha removed. Can be replaced with Entity.getAlpha(Space.Activity).
  • Entity.getWorldSpaceScale removed. Can be replaced with Entity.getScale(Space.REAL\_WORLD).
  • The Session class in SceneCore has been deleted in favor of the Session in XR Runtime.
  • StereoSurfaceEntity has been renamed to SurfaceEntity.
  • Entity.setSize and Entity.getSize are removed, and the same methods were added to PanelEntity.
  • PointSourceAttributes has been renamed to PointSourceParams.
  • SpatializerConstants.SOURCE\_TYPE\_BYPASS has been renamed to SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • PointSourceParams entity has been modified from public to internal access.
  • AnchorEntity.create now requires PlaneTrackingMode to be configured in Session.configure().
  • SpatialUser APIs now require HeadTrackingMode to be configured in Session.configure().
  • When ResizableComponent is not attached, it will give INFO-level log instead of ERROR-level log.
  • Fov class is now a regular Kotlin class.
  • Split Entity.kt to place each concrete entity type into its own file.
  • When creating a new PanelEntity, most Views will be reparented to a FrameLayout. This facilitates the use of LayoutInspector with Spatial Panels.
  • The currently used XrExtensions instance is now registered with the platform, in a best effort way, to help with app debugging.

Bug Fixes

  • A fix was added to prevent a crash that could occur when a PanelEntity with MovableComponent and AnchorPlacement was moved
  • Fixed an issue where ResizableComponent was providing stale sizes in onResizeStart callback.
  • Fixed crash when JxrPlatformAdapterAxr's dispose() was called multiple times.