Releases: mahozad/androidx-release-notes
2025-01-29
Benchmark: v1.4.0-alpha07
January 29, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha07 is released. Version 1.4.0-alpha07 contains these commits.
New Features
BaselineProfileRulenow introduces acollectWithResults(...)API which includes a list of paths to the computed profiles. (I056f8)- Added
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadlineinstrumentation argument, which can be set to false to disable the throw on deadline behavior ofmeasureRepeatedOnMainThreadfor local testing. Not otherwise recommended, as this increases the likelihood of ANRs during tests. (Idbeec, b/353226476)
API Changes
- Added
@JvmOverloadstoMicrobenchmarkConfigconstructor. (I13fd3) - Refactored
BenchmarkRuleto be built on top of coroutines, and support betteryield()behavior. This refactor removed several experimentalBenchmarkStateAPIs, but will be followed by replacements as needed. Additionally, addedrunWithMeasurementDisabledto clarify behavior (all measurement is paused). In the future,runWithTimingDisabledwill be deprecated. (I19837, b/389149423, b/311242861) - Move
PerfettoTraceProcessortoTraceProcessorin a newandroidx.benchmark:benchmark-traceprocessorartifact, and make most of its API non-experimental. Any customTraceMetricor anything reading from traces will need to update to the newTraceProcessorimport. The newTraceProcessorAPI works exactly like the old one, but is a standalone interface library (somewhat analogous to theandroidx.sqlitelayer from Room) with an Android-specific implementation built into macrobenchmark. The new artifact can be used on JVM as well, but currently you'll need to start your own copy of theTraceProcessorbinary and offer a port to connect to it on. (I3a767, I62563, b/381134564)
Bug Fixes
- Throw a clearer error message when
MacrobenchmarkScope.startActivityAndWaitfails to launch the target process (potentially due to a crash in the target process), instead of the more ambiguous 'Unable to confirm activity launch completion' message (I3539b) - Fixed several syntax errors in Kotlin samples, and syntax highlighting in several Java / build.gradle samples. (Ib3808)
- Clarified
ArtMetricandCaptureInfoparameter docs. (I96e60)
Browser: v1.9.0-alpha01
January 29, 2025
androidx.browser:browser:1.9.0-alpha01 is released. Version 1.9.0-alpha01 contains these commits.
API Changes
- Added browser connection/session support to Auth Tab. (I6e47b)
- Added a new API
CustomTabsSession#isEphemeralBrowsingSupportedthat determines whether or not the ephemeral browsing is supported (Ie4dea, b/384548523) - Added color scheme params support to Auth Tab APIs. (I630e1)
- Added experimental ephemeral browsing option to Custom Tabs (I9549d)
- Updated experimental Auth Tab APIs (I8b674)
- Add new API to check if the Custom Tabs provider supports multi-network. (I4307a)
- Add new service intent filter category to support multi-network. (I4354a)
- Add new API to set/get the bound network when launching a URL over a custom tab. (I493e1)
- Added experimental Auth Tab APIs (I9b4d4)
- New experimental APIs for
PendingSession(Ib40e5)
Bug Fixes
- Updated AuthTabIntent Javadocs (I2490c)
- Fixed session support in Auth Tab (I4e280)
- This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage:
-Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode(Ic7bf5, b/326456246) - 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. (I9496c, b/345472586)
External Contribution
- Introduce a new IPC call
ICustomTabsService#prefetchWithMultipleUrlsto avoid multiple IPC calls for single URLs. (Ie5025) - Make
CustomTabsSession#prefetchpropagateCustomTabsSession’s sessionid(mID)toCustomTabsService. (I4ec7b) - Add a new experimental API
CustomTabsSession#prefetch(List<Uri>, PrefetchOptions), which overloads the existing API to accept multiple URLs. (I54f35) - Add a new experimental API
CustomTabsSession#prefetch(Uri, PrefetchOptions), which tries to prefetch the main page (without subresources) for future navigations. (I340cf)
Collection: v1.5.0-beta03
January 29, 2025
androidx.collection:collection-*:1.5.0-beta03...
2025-01-15
Activity: v1.10.0
January 15, 2025
androidx.activity:activity:1.10.0, androidx.activity:activity-compose:1.10.0, and androidx.activity:activity-ktx:1.10.0 are released. Version 1.10.0 contains these commits.
Important changes since 1.9.0
PhotoPickernow allows picking images in order and choosing which tab (either albums or images) should be initially visible.- The
PickVisualMediaandPickMultipleVisualMediaActivity Result contracts that trigger the Photo Picker no longer directly delegates to Google Play services if the system Photo picker is not available, but uses the publicACTION_SYSTEM_FALLBACK_PICK_IMAGESaction and related extras to provide a consistent Photo Picker experience to OEMs and system apps as a fallback. - New
LocalActivitycomposition local that provides theActivityfor the current scope, removing the need for developers to get anActivityfrom theLocalContext.
AppSearch: v1.1.0-beta01
January 15, 2025
androidx.appsearch:appsearch-*:1.1.0-beta01 is released. Version 1.1.0-beta01 contains these commits.
New Features
AppSearchmodule enters Beta.
API Changes
- Disable experimental
AppSearchdelete propagation API due to stability issues. (Iea386) - Create
GlobalSearchApplicationInfoAPI, an experimental and optional way for producers and consumers to indicate interest in certain types. (I116fd) - Minor changes to experimental AST (query builder) APIs (Ibd852)
Bug Fixes
- This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage:
-Xjspecify-annotations=strict,-Xtype-enhancement-improvements-strict-mode. (Ic2976, b/326456246) - Adds required permission to
searchPersonCorpus(I4431d)
Camera: v1.5.0-alpha05
January 15, 2025
androidx.camera:camera-*:1.5.0-alpha05 is released. Version 1.5.0-alpha05 contains these commits.
API Changes
- Add
VideoCapture.getSelectedQuality()to know the selected Quality based on theQualitySelector. (I70508, b/204288986) - When an image capture is invoked with the
ImageCapture.OnImageCapturedCallbackAPI, the ImageInfo at the returnedImageProxycan now be used to know whether flash was fired through the newImageInfo.getFlashState()API. (Id2c61, b/380527406) - Added
OUTPUT_IMAGE_FORMAT_NV21output format support forImageAnalysis. (I484ab) - Remove the experimental annotation of the
featurecombinationqueryartifact (I4427f) - Adjust the zoom ratio range allowed for
CameraControlby Extensions-specific characteristics when an extensions mode is enabled. (I85af1)
Bug Fixes
- Upgraded
compileSdkas 35 for using Android 15 related API. Apps using CameraX libraries will also need to upgrade theircompileSdkconfig setting. (Ic80cd) - This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage:
-Xjspecify-annotations=strict,-Xtype-enhancement-improvements-strict-mode(Idc6c6, b/326456246)
camera viewfinder: v1.4.0-alpha12
January 15, 2025
androidx.camera.viewfinder:viewfinder-compose:1.4.0-alpha12, androidx.camera.viewfinder:viewfinder-core:1.4.0-alpha12, and androidx.camera.viewfinder:viewfinder-view:1.4.0-alpha12 are released. Version 1.4.0-alpha12 contains these commits.
New Features
- Upgraded
compileSdkas 35 for using Android 15 related API. Apps using CameraX libraries will also need to upgrade theircompileSdkconfig setting. (Ic80cd) - This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage:
-Xjspecify-annotations=strict,-Xtype-enhancement-improvements-strict-mode(I7bcd7, b/326456246)
Car App: v1.7.0-rc01
January 15, 2025
androidx.car.app:app-*:1.7.0-rc01 is released with no notable changes from beta03. Version 1.7.0-rc01 is a contains these commits.
- This is the first RC that includes the fix for CVE-2024-10382 patched on beta03. If you are using a lower version than 1.7-beta03, please update to use this version.
Collection: v1.5.0-beta02
January 15, 2025
androidx.collection:collection-*:1.5.0-beta02 is released. Version 1.5.0-beta02 contains these commits.
Compose Animation: v1.8.0-alpha08
January 15, 2025
androidx.compose.animation:animation-*:1.8.0-alpha08 is released. Version 1.8.0-alpha08 contains these commits.
Bug Fixes
- Fixed incorrect placement animation from
animateBoundsinLazyGriddue toMotionFrameOfReferencePlacementbeing reset. (
2024-12-20
Media3: v1.6.0-alpha01
December 20, 2024
androidx.media3:media3-*:1.6.0-alpha01 is released. Version 1.6.0-alpha01 contains these commits.
- Common Library:
- Remove
Format.toBundle(boolean excludeMetadata)method, useFormat.toBundle()instead. - Add
AudioManagerCompatandAudioFocusRequestCompatto replace the equivalent classes inandroidx.media.
- Remove
- ExoPlayer:
- Consider language when selecting a video track. By default, select a 'main' video track that matches the language of the selected audio track, if available. Explicit video language preferences can be expressed with
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Add
selectedAudioLanguageparameter toDefaultTrackSelector.selectVideoTrack()method. - Add
retryCountparameter toMediaSourceEventListener.onLoadStartedand correspondingMediaSourceEventListener.EventDispatchermethods. - Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (#1698).
- Reduce default values for
bufferForPlaybackMsandbufferForPlaybackAfterRebufferMsinDefaultLoadControlto 1000 and 2000 ms respectively. - Add
MediaExtractorCompat, a new class that provides equivalent features to platformMediaExtractor. - Move
BasePreloadManager.Listenerto a top-levelPreloadManagerListener. RenderersFactory.createSecondaryRenderercan be implemented to provide secondary renderers for pre-warming. Pre-warming enables quicker media item transitions during playback.- Enable sending
CmcdDatafor manifest requests in adaptive streaming formats DASH, HLS, and SmoothStreaming (#1951). - Provide
MediaCodecInfoof the codec that will be initialized inMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Change
AdsMediaSourceto allow theAdPlaybackStatesto grow by appending ad groups. Invalid modifications are detected and throw an exception.
- Consider language when selecting a video track. By default, select a 'main' video track that matches the language of the selected audio track, if available. Explicit video language preferences can be expressed with
- Transformer:
- Update parameters of
VideoFrameProcessor.registerInputStreamandVideoFrameProcessor.Listener.onInputStreamRegisteredto useFormat. - Add support for transmuxing into alternative backward compatible formats.
- Generate HDR static metadata when using
DefaultEncoderFactory.
- Update parameters of
- Extractors:
- AVI: Fix handling of files with constant bitrate compressed audio where the stream header stores the number of bytes instead of the number of chunks.
- Audio:
- Fix
onAudioPositionAdvancingto be called when playback resumes (previously it was called when playback was paused).
- Fix
- Video:
- Fix
MediaCodecVideoRenderersuch that when without aSurface, the renderer skips just-early frames only if theVideoFrameReleaseControl.getFrameReleaseActionis notFRAME_RELEASE_TRY_AGAIN_LATER.
- Fix
- Text:
- Stop eagerly loading all subtitle files configured with
MediaItem.Builder.setSubtitleConfigurations, and instead only load one if it is selected by track selection (#1721).
- Stop eagerly loading all subtitle files configured with
- Effect:
- Moved the functionality of
OverlaySettingsintoStaticOverlaySettings.OverlaySettingscan be subclassed to allow dynamic overlay settings.
- Moved the functionality of
- Muxers:
- Moved
MuxerExceptionout ofMuxerinterface to avoid a very long fully qualified name.
- Moved
- Session:
- Add 'Context' as a parameter to 'MediaButtonReceiver.shouldStartForegroundService` (#1887).
- UI:
- Add
PlayerSurfaceComposable tomedia3-ui-composemodule. - Add
PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateclasses and the correspondingrememberPlayPauseButtonState,rememberNextButtonState,rememberPreviousButtonState,rememberRepeatButtonState,rememberShuffleButtonStatecomposables tomedia3-ui-composemodule.
- Add
- HLS Extension:
- Add a first version of
HlsInterstitialsAdsLoader. The ads loader reads the HLS interstitials of an HLS media playlist and maps them to theAdPlaybackStatethat is passed to theAdsMediaSource. This initial version only supports HLS VOD streams withX-ASSET-URIattributes. - Add
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Apps can use it to createAdsMediaSourceinstances that use anHlsInterstitialsAdsLoaderin a convenient and safe way.
- Add a first version of
- DASH Extension:
- Add AC-4 Level-4 format support for DASH (#1898).
- Decoder Extensions (FFmpeg, VP9, AV1, etc.):
- Add the MPEG-H decoder module which uses the native MPEG-H decoder module to decode MPEG-H audio (#1826).
- Demo app:
- Add
MinimalControls(PlayPauseButton,NextButton,PreviousButton) andExtraControls(RepeatButton,ShuffleButton) Composable UI elements todemo-composeutilizingPlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonState.
- Add
- Remove deprecated symbols:
- Remove deprecated
AudioMixer.create()method. UseDefaultAudioMixer.Factory().create()instead. - Remove the following deprecated
Transformer.Buildermethods:setTransformationRequest(), usesetAudioMimeType(),setVideoMimeType(), andsetHdrMode()instead.setAudioProcessors(), set the audio processor in anEditedMediaItem.Builder.setEffects(), and pass it toTransformer.start()instead.setVideoEffects(), set video effect in anEditedMediaItem.Builder.setEffects(), and pass it toTransformer.start()instead.setRemoveAudio(), useEditedMediaItem.Builder.setRemoveAudio()to remove the audio from theEditedMediaItempassed to
- Remove deprecated
2024-12-11@07PM
ARCore for Jetpack XR: v1.0.0-alpha01
December 12, 2024
androidx.xr.arcore:arcore-* 1.0.0-alpha01 is released.
Features of initial release
Inspired by the existing ARCore library, the ARCore for Jetpack XR library provides capabilities for blending digital content with the real world. This library includes motion tracking, persistent anchors, hit testing, and plane identification with semantic labeling (for example, floor, walls, and tabletops). View the developer guide to learn more about working with ARCore for Jetpack XR.
Session: ARCore for Jetpack XR uses the Jetpack XR Runtime under-the-hood to power its functionality. You will use a Session to interact with most ARCore for Jetpack XR APIs, so please take a look at its documentation.Plane: Use planes to understand the world around you. Each plane has aLabelthat describes it semantically. You can usesubscribeto be notified about the latest detected planes orstateto be notified about the changes to a specific plane.Anchor: A link between a virtual object and a real world location. Anchors can be attached to a specific location in space (usingcreate) or aTrackable(usingcreateAnchor).Anchors can be reused across sessions. You can use
persistto store them,getPersistedAnchorUuidsto enumerate them andloadto retrieve them. Make sure that youunpersistthem once they are no longer in use.Anchors are interoperable between ARCore for Jetpack XR and Jetpack SceneCore. You can create an
AnchorEntityusing an anchor or, if you have an existing AnchorEntity, you can usegetAnchorto retrieve its backing anchor.Offer natural user interactions using
hitTest. A hitTest uses aRayto determine which contents it intersects and to create anAnchorfrom that location. Consider conducting a hitTest from anInputEvent.
Known Issues
There might be a delay between calling
unpersistand its UUID being removed from the results returned bygetPersistedAnchorUuids.createwill not validate that the system has enough resources to return new anchors. Creating an excessive amount of anchors might lead to a crash.Persisting an Anchor that was previously persisted and unpersisted is not currently supported.
Usage in the emulator is supported, but the behavior might not be as stable as when running on an actual device. Particularly, calls to
createmight fail with a native code error and immediately terminate the activity.In certain circumstances, a
RuntimeExceptionmight be erroneously thrown when callingpersistwith the message “Anchor was not persisted”. In those circumstances, the function would still succeed and the anchor will be persisted. We recommend wrapping the call topersistwith atryblock as a workaround.
Jetpack Compose for XR: v1.0.0-alpha01
December 12, 2024
androidx.xr.compose:compose-*1.0.0-alpha01 is released.
Features of Initial Release
Initial developer release of Jetpack Compose for XR. Use familiar Compose concepts such as rows and columns to create spatial UI layouts in XR, whether you're porting an existing 2D app to XR or creating a new XR app from scratch. This library provides subspace and spatial composables: such as spatial panels and orbiters, which let you place your existing 2D Compose or Views-based UI in a spatial layout. It introduces the Volume subspace composable, which allows you to place SceneCore entities, such as 3D models, relative to your UI. Learn more in this developer guide:
Subspace: This composable can be placed anywhere within your app’s UI hierarchy, allowing you to maintain layouts for 2D and spatial UI without losing context between files. This makes it easier to share things like existing app architecture between XR and other form factors without needing to hoist state through your whole UI tree or re-architect your app.SpatialPanel: A spatial panel is a subspace composable that lets you display app content–for example, you could display video playback, still images, or any other content in a spatial panel.
Orbiter: An orbiter is a spatial UI component. It's designed to be attached to a corresponding spatial panel, and contains navigation and contextual action items related to that spatial panel. For example, if you've created a spatial panel to display video content, you could add video playback controls inside an orbiter.
Volume: Place SceneCore entities, such as 3D models, relative to your UI.
Spatial Layout: You can create multiple spatial panels and place them within a Spatial Layout using
SpatialRow,SpatialColumn,
2024-12-11
Activity: v1.10.0-rc01
December 11, 2024
androidx.activity:activity:1.10.0-rc01, androidx.activity:activity-compose:1.10.0-rc01, and androidx.activity:activity-ktx:1.10.0-rc01 are released. Version 1.10.0-rc01 contains these commits.
Bug Fixes
- Fixed an issue where changing the enabled state while the
PredictiveBackHandleris currently active would short circuit the callback immediately. It will now finish the current callback regardless of the enabled status changes. (Ib8719)
AppSearch: v1.1.0-alpha07
December 11, 2024
androidx.appsearch:appsearch-*:1.1.0-alpha07 is released. Version 1.1.0-alpha07 contains these commits.
New Features
- Add
ExperimentalAppSearchApiannotation to new API surfaces that have not yet stabilized. (Ib09f4) - Support for efficiently storing and sharing binary blob data via
AppSearchSession#openBlobForWriteAsyncand related methods - Support for filtering query results by scoring expression via the
matchScoreExpressionfunction (Id525a) - Support for propagating deletion from parent document to child documents. (Ia032d)
- Support for embedding quantization API to increase embedding performance with slight quality loss. (Id8a07)
- Support for restricting searches to certain documents using the
addFilterDocumentIdsAPI inSearchSpec. (I7c6f1)
API Changes
- Move parent type information from
GenericDocumenttoSearchResult. (I34a1d) - Support for new action types in the
TakenActionAPI, includingDismissActionandImpressionAction. (I0c6c7) - Added new AppSearch builtin schema
WebPage. (I28127)
Benchmark: v1.4.0-alpha06
December 11, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha06 is released. Version 1.4.0-alpha06 contains these commits.
API Changes
- Removed usage of
@Language("sql")inPerfettoTraceProcessor.Session.query(), as Studio highlighting/parsing is broken. (Idc2fa, b/377733398)
Bug Fixes
- This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage:
-Xjspecify-annotations=strict,-Xtype-enhancement-improvements-strict-mode(I46810, b/326456246) - Corrected
ArtMetricto report class load (not init), and improved docs to clarify runtime behavior. (I9915c) - On Android Multiuser, execute commands as root only on rooted devices. (I88b44)
Camera: v1.4.1
December 11, 2024
androidx.camera:camera-*:1.4.1 is released. Version 1.4.1 contains these commits.
Bug Fixes
- Fixed an issue on Pixel Android 15 devices where NIGHT mode in Extensions failed to capture still images until the camera focused on a nearby object. (I228d4)
- Fixed the
ImageCapture#takePicturemalfunction issue when extensions are enabled andVideoCaptureis bound together. (I5c745)
Camera: v1.5.0-alpha04
December 11, 2024
androidx.camera:camera-*:1.5.0-alpha04 is released. Version 1.5.0-alpha04 contains these commits.
API Changes
- Exposed
ImageCapture.Builder#setOutputFormatandImageCaptureCapabilities#getSupportedOutputFormatsas stable APIs (Ieb04a) - Add
VideoCapture.getResolutionInfo()to get the resolution information when aVideoCaptureis bound to a Lifecycle. (Icb478) - Exposed
PreviewView.getScreenFlashandPreviewView.setScreenFlashOverlayColoras stable APIs. (I74fee)
Bug Fixes
- Fixed capture failure issue on Vivo 1610 device while taking picture with flash in the dark. (I366f4)
- Fixed torch unexpectedly turning off after image capture in Redmi Note 6 Pro. (I2e0e8, b/377144569)
- Fixed an issue on Pixel Android 15 devices where NIGHT mode in Extensions failed to capture still images until the camera focused on a nearby object. (I228d4)
- Fixed the still image capture malfunction issue when extensions are enabled and
VideoCaptureis bound together. (I5c745) - Enabled
UltraHDRstill image capture support for Extensions if the device can support it. (I48300) - Fixed flash timing issue for flash capture with
CameraEffecttargeting image captures on TCL devices. (I7698c)
camera media3: v1.0.0-alpha01
December 11, 2024
androidx.camera.media3:media3-effect:1.0.0-alpha01 is released. Version 1.0.0-alpha01 contains these commits.
New Features
- An adapter library for using Media3 effects with CameraX. It's for adding Media3 effects into the camera pipeline with CameraX's
...
2024-12-09
Media3: v1.5.0
November 27, 2024
androidx.media3:media3-*:1.5.0 is released. Version 1.5.0 contains these commits.
- Common Library:
- Add
ForwardingSimpleBasePlayerthat allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (#1183). - Replace
SimpleBasePlayer.State.playlistbygetPlaylist()method. - Add override for
SimpleBasePlayer.State.Builder.setPlaylist()to directly specify aTimelineand currentTracksandMetadatainstead of building a playlist structure. - Increase
minSdkto 21 (Android Lollipop). This is aligned with all other AndroidX libraries. - Add
androidx.media3:media3-common-ktxartifact which provides Kotlin-specific functionality built on top of the Common library - Add
Player.listensuspending extension function to spin a coroutine to listen toPlayer.Eventsto themedia3-common-ktxlibrary. - Remove
@DoNotInlineannotations from manually out-of-lined inner classes designed to avoid runtime class verification failures. Recent versions of R8 now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, due tocompileSdk = 35. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has already been done in other AndroidX libraries.
- Add
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()can now be called for every media item. Previously it was not called for the first one. UseMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()to enable this.- Add
PreloadMediaSource.PreloadControl.onPreloadErrorto allowPreloadMediaSource.PreloadControlimplementations to take actions when error occurs. - Add
BasePreloadManager.Listenerto propagate preload events to apps. - Allow changing SNTP client timeout and retry alternative addresses on timeout (#1540).
- Remove
MediaCodecAdapter.Configuration.flagsas the field was always zero. - Allow the user to select the built-in speaker for playback on Wear OS API 35+ (where the device advertises support for this).
- Defer the blocking call to
Context.getSystemService(Context.AUDIO_SERVICE)until audio focus handling is enabled. This ensures the blocking call isn't done if audio focus handling is not enabled (#1616). - Allow playback regardless of buffered duration when loading fails (#1571).
- Add
AnalyticsListener.onRendererReadyChanged()to signal when individual renderers allow playback to be ready. - Fix
MediaCodec.CryptoExceptionsometimes being reported as an "unexpected runtime error" whenMediaCodecis operated in asynchronous mode (default behaviour on API 31+). - Pass
bufferedDurationUsinstead ofbufferedPositionUswithPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Also changesDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MStoDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position. - Add
ForwardingRendererimplementation that forwards all method calls to another renderer (1703). - Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)accordingly. By default preloading is disabled. When opted-in and to not interfere with playback,DefaultLoadControlrestricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementingLoadControl.shouldContinuePreloading()accordingly (like when overriding this method inDefaultLoadControl). The default implementation ofLoadControldisables preloading in case an app is using a custom implementation ofLoadControl. - Add method
MediaSourceEventListener.EventDispatcher.dispatchEvent()to allow invoking events of subclass listeners (1736). - Add
DefaultPreloadManager.Builderthat builds theDefaultPreloadManagerandExoPlayerinstances with consistently shared configurations. - Remove
Renderer[]parameter fromLoadControl.onTracksSelected()asDefaultLoadControlimplementation can retrieve the stream types fromExoTrackSelection[]. - Deprecated
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])and marked method as final to prevent overrides. The newDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])should be used instead. - Report
MediaSourceEventListenerevents from secondary sources inMergingMediaSource. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added withMediaItem.LocalConfiguration.subtitleConfigurations), which may appear as duplicate load events emitted fromAnalyticsListener. - Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (#1722).
- In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via
onLoadErrorcallbacks. - In legacy subtitle handling (during rendering), only associated load errors are emitted via
onLoadErrorcallbacks while parse errors are silently ignored (this is pre-existing behaviour).
- In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via
- Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (#1698).
- Add a setter to
SntpClientto set the max elapsed time since the last update after which the client is re-initialized (#1794).
- Transformer:
- Add
SurfaceAssetLoader, which supports queueing video data to Transformer via aSurface. ImageAssetLoaderreports unsupported input viaAssetLoader.onErrorinstead of throwing anIllegalStateException.- Make setting the image duration using
MediaItem.Builder.setImageDurationMsmandatory for image export. - Add export support for gaps...
- Add
2024-11-25
Media3: v1.5.0
November 27, 2024
androidx.media3:media3-*:1.5.0 is released. Version 1.5.0 contains these commits.
- Common Library:
- Add
ForwardingSimpleBasePlayerthat allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (#1183). - Replace
SimpleBasePlayer.State.playlistbygetPlaylist()method. - Add override for
SimpleBasePlayer.State.Builder.setPlaylist()to directly specify aTimelineand currentTracksandMetadatainstead of building a playlist structure. - Increase
minSdkto 21 (Android Lollipop). This is aligned with all other AndroidX libraries. - Add
androidx.media3:media3-common-ktxartifact which provides Kotlin-specific functionality built on top of the Common library - Add
Player.listensuspending extension function to spin a coroutine to listen toPlayer.Eventsto themedia3-common-ktxlibrary. - Remove
@DoNotInlineannotations from manually out-of-lined inner classes designed to avoid runtime class verification failures. Recent versions of R8 now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, due tocompileSdk = 35. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has already been done in other AndroidX libraries.
- Add
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()can now be called for every media item. Previously it was not called for the first one. UseMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()to enable this.- Add
PreloadMediaSource.PreloadControl.onPreloadErrorto allowPreloadMediaSource.PreloadControlimplementations to take actions when error occurs. - Add
BasePreloadManager.Listenerto propagate preload events to apps. - Allow changing SNTP client timeout and retry alternative addresses on timeout (#1540).
- Remove
MediaCodecAdapter.Configuration.flagsas the field was always zero. - Allow the user to select the built-in speaker for playback on Wear OS API 35+ (where the device advertises support for this).
- Defer the blocking call to
Context.getSystemService(Context.AUDIO_SERVICE)until audio focus handling is enabled. This ensures the blocking call isn't done if audio focus handling is not enabled (#1616). - Allow playback regardless of buffered duration when loading fails (#1571).
- Add
AnalyticsListener.onRendererReadyChanged()to signal when individual renderers allow playback to be ready. - Fix
MediaCodec.CryptoExceptionsometimes being reported as an "unexpected runtime error" whenMediaCodecis operated in asynchronous mode (default behaviour on API 31+). - Pass
bufferedDurationUsinstead ofbufferedPositionUswithPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Also changesDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MStoDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position. - Add
ForwardingRendererimplementation that forwards all method calls to another renderer (1703). - Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)accordingly. By default preloading is disabled. When opted-in and to not interfere with playback,DefaultLoadControlrestricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementingLoadControl.shouldContinuePreloading()accordingly (like when overriding this method inDefaultLoadControl). The default implementation ofLoadControldisables preloading in case an app is using a custom implementation ofLoadControl. - Add method
MediaSourceEventListener.EventDispatcher.dispatchEvent()to allow invoking events of subclass listeners (1736). - Add
DefaultPreloadManager.Builderthat builds theDefaultPreloadManagerandExoPlayerinstances with consistently shared configurations. - Remove
Renderer[]parameter fromLoadControl.onTracksSelected()asDefaultLoadControlimplementation can retrieve the stream types fromExoTrackSelection[]. - Deprecated
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])and marked method as final to prevent overrides. The newDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])should be used instead. - Report
MediaSourceEventListenerevents from secondary sources inMergingMediaSource. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added withMediaItem.LocalConfiguration.subtitleConfigurations), which may appear as duplicate load events emitted fromAnalyticsListener. - Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (#1722).
- In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via
onLoadErrorcallbacks. - In legacy subtitle handling (during rendering), only associated load errors are emitted via
onLoadErrorcallbacks while parse errors are silently ignored (this is pre-existing behaviour).
- In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via
- Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (#1698).
- Add a setter to
SntpClientto set the max elapsed time since the last update after which the client is re-initialized (#1794).
- Transformer:
- Add
SurfaceAssetLoader, which supports queueing video data to Transformer via aSurface. ImageAssetLoaderreports unsupported input viaAssetLoader.onErrorinstead of throwing anIllegalStateException.- Make setting the image duration using
MediaItem.Builder.setImageDurationMsmandatory for image export. - Add export support for gaps...
- Add
2024-11-19
Media3: 1.5.0-rc02 (2024-11-19)
androidx.media3:media3-*:1.5.0-rc02 is released.
Version 1.5.0-rc02 contains these commits.
This release includes the following changes since the 1.5.0-rc01 release:
2024-11-13
Activity: v1.10.0-beta01
November 13, 2024
androidx.activity:activity:1.10.0-beta01, androidx.activity:activity-compose:1.10.0-beta01, and androidx.activity:activity-ktx:1.10.0-beta01 are released with no changes since the last alpha. Version 1.10.0-beta01 contains these commits.
Benchmark: v1.4.0-alpha05
November 13, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05 is released. Version 1.4.0-alpha05 contains these commits.
Bug Fixes
- Fixed an issue on API 34+ where
CompilationMode.None()would have inconsistent performance not representative of initial, worst case performance. This works around a platform change which allows ART's compilation stateverifyto partially compile apps (only affecting class loading) shortly after first launch. (Ie48d0) - Fixed issue where (especially short) traces could be captured that wouldn't report measurement from built-in Macrobenchmark Metrics, due to the process name being truncated within the Perfetto trace. Now macrobenchmark works around this issue by looking for the truncated package name in all built-in queries, in addition to the expected package name. Note that custom
TraceMetricimplementations or other direct callers ofPerfettoSession.querycan implement this same behavior by changingprocess.name LIKE "$packageName"in a Perfetto query to instead be(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)
Car App: v1.7.0-beta03
November 13, 2024
Fixed a security vulnerability and other general bug fixes. If you are using a lower version, please update to use this version.
androidx.car.app:app-*:1.7.0-beta03 is released. Version 1.7.0-beta03 contains these commits.
API Changes
- Update CAL Serialization / De-serialization code to only handle objects which have the annotation
@CarProtocoldeclared on them. (Ic730e) CarAppExtendercan now be used to extend the frameworkNotification.Builderinstead of onlyNotificationCompat.Builder. (Id3ad7)- Add
KEY_EXCLUDE_MEDIA_ITEM_FROM_MIXED_APP_LISTextra. (I201f9) - Deprecate the empty Builder constructor on
ConversationItemand replace it with a constructor that takes required parameters. Also adds a check to guard against null messages. (Ic8221)
Bug Fixes
- Ensure
PlaceListmap uses string (Text-only) Header title. (Ic992f) - This library now uses JSpecify nullness annotations, which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage:
-Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode. (Ib5367, b/326456246)
Collection: v1.5.0-alpha06
November 13, 2024
androidx.collection:collection-*:1.5.0-alpha06 is released. Version 1.5.0-alpha06 contains these commits.
Bug Fixes
- Fixed a crash that could occur in
SieveCacheandOrderedScatterSetwhen adding numerous items causing repeated key collisions. (Iaaf3d, b/375607736) - Add wasm target to collection library. (I66fe3, b/352722444)
Compose Animation: v1.8.0-alpha06
November 13, 2024
androidx.compose.animation:animation-*:1.8.0-alpha06 is released. Version 1.8.0-alpha06 contains these commits.
API Changes
- Updated
sharedElementparameter naming fromstatetosharedContentStatefor consistency across shared element APIs. (I5694c, b/375351468) AnimatedImageVectorsuite of APIs are now stable. (I7174b, b/261436267)
Compose Foundation: v1.8.0-alpha06
November 13, 2024
androidx.compose.foundation:foundation-*:1.8.0-alpha06 is released. Version 1.8.0-alpha06 contains these commits.
API Changes
- Adds
stylusHoverIconmodifier. (Iff20a, b/331289114) - Deprecated
AnchoredDraggableState'sconfirmValueChange. Instead of vetoing state changes, disallowed anchors should not be in the active anchor set, and anOverscrollEffectshould be used to indicate the unavailability of the requested action. (Ia717f) - Changes Autofill manager to be an interface. (I84914, b/376080755)
- Adds
OverscrollEffect#withoutDrawingandOverscrollEffect#withoutEventHandlingAPIs - these APIs create a wrapped instance of the provided overscroll effect that doesn't draw / handle events respectively, which allows for rendering overscroll in a separate component from the component that is dispatching events. For example, disabling drawing the overscroll inside a lazy list, and then drawing the overscroll separately on top / elsewhere. (Idbb3d, b/266550551, b/204650733, b/255554340, b/229537244) - Adding autofill support in text toolbar. (Ie6a4c)
- Deprecates
OverscrollConfigurationandLocalOverscrollConfigurati...
2024-10-30@07PM
Activity: v1.10.0-alpha03
October 30, 2024
androidx.activity:activity:1.10.0-alpha03, androidx.activity:activity-compose:1.10.0-alpha03, and androidx.activity:activity-ktx:1.10.0-alpha03 are released. Version 1.10.0-alpha03 contains these commits.
API Changes
- Added a new
LocalActivitycomposition local that provides theActivityfor the current scope, removing the need for developers to get anActivityfrom theLocalContext. It also comes with a new lint rule that checks when theLocalContextis incorrectly being cast to anActivity. (I7746a, b/283009666)
Bug Fixes
- From Activity
1.9.3:PredictiveBackHandlerwill no longer fire it's callback after the handler has been disabled. This will fix an issue where theNavHostfrom Navigation Compose would throw anIndexOutOfBoundsException. (I3f75e, b/365027664, b/340202286)
Dependency Update
- Activity Compose now depends on Compose Runtime 1.7.0 (I7746a, b/283009666)
Annotation: v1.9.1
October 30, 2024
androidx.annotation:annotation-*:1.9.1 is released. Version 1.9.1 contains these commits.
Bug Fixes
Benchmark: v1.4.0-alpha04
October 30, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04 is released. Version 1.4.0-alpha04 contains these commits.
New Features
- (Experimental) Enable Baseline Profile generation, and benchmarking on apps installed to a secondary user, for example any app on headless Android Auto devices. This support has been tested in some scenarios, but let us know with a bug if it doesn't work for you. (I9fcbe, b/356684617, b/373641155)
Bug Fixes
isProfileableis now always overridden in benchmark builds, andisDebuggableis also now always overridden in both benchmark andnonMinified(baseline profile capture) builds. (I487fa, b/369213505)- Fixes compilation detection on some physical devices prior to API 28 - affects json
context.compilationMode, as well as behavior ofandroidx.benchmark.requireAot=true(which no longer incorrectly throws) (Ic3e08, b/374362482) - In
CpuEventCountermetrics, throw if invalid measurements are observed (e.g. instructions/cpucycles==0) (I8c503)
Camera: v1.4.0
October 30, 2024
androidx.camera:camera-*:1.4.0 is released. Version 1.4.0 contains these commits.
Important changes since 1.3.0
CameraX 1.4.0 is packed with exciting updates! Here's a summary:
Headline Feature: 10-bit HDR:
- Capture stunning HDR photos and videos with ease.
- Supports HLG and 10-bit HEVC encoding.
- Enjoy 10-bit HDR preview and query device capabilities.
- Works with
UltraHDRimages and HDR video on a growing range of devices.
Other Cool Features:
- Kotlin Extensions: Added
takePictureandawaitInstancesuspend functions. - Real-time Effects: Apply effects like watermarks and object highlighting.
- CameraController API: New controls for video capture configuration.
- Preview Stabilization: Query device capability and enable stabilization.
- VideoCapture Enhancements: Finer control over quality and access to higher resolutions.
- CameraX Extensions Integration: Seamless integration with
VideoCaptureand newImageCapturefeatures. - Shutter Sound API: Easily check regional shutter sound requirements.
- Screen Flash: Improved low-light photos for front-facing cameras.
- Camera Extensions Metadata APIs: Supporting APIs for adjusting extensions strength and get notification of current Extensions mode in
ExtensionMode#AUTO. You can find more bug fixes in our Beta and RC announcements.
Camera: v1.5.0-alpha03
October 30, 2024
androidx.camera:camera-*:1.5.0-alpha03 is released. Version 1.5.0-alpha03 contains these commits.
API Changes
- Add output format APIs for RAW and RAW + JPEG
ImageCapture, the device capability check is exposed inImageCaptureCapabilities#getSupportedOutputFormats. TheOUTPUT_FORMAT_RAWis to capture RAW image, which is Adobe DNG format andOUTPUT_FORMAT_RAW_JPEGis to simultaneously capture RAW and JPEG images. The newImageCapture#takePictureAPI is used for simultaneous image capture, it needs to provide twoOutputFileOptions, the first one is for RAW image and the second one is for JPEG image. (Ib0f3d)
Bug Fixes
- Fixed preview and video under-exposure issue on TCL devices when
VideoCaptureis enabled. (Id7a64) - Fixed the issue where invoking
startFocusMeteringwithPreviewView.getMeteringPointFactorydoesn't get the correct sensor coordinates when an effect is enabled or when 4 use cases are bound (stream-sharing). (I916c5, b/345993685) - Fixed the
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGEevent is not triggered when recording a video and there is insufficient storage space available. (I35779, b/356399842)
camera viewfinder: v1.4.0-alpha10
October 30, 2024