Releases: mahozad/androidx-release-notes
Release list
2026-08-12
Appcompat: v1.8.0
August 12, 2026
androidx.appcompat:appcompat:1.8.0 and androidx.appcompat:appcompat-resources:1.8.0 are released. Version 1.8.0 contains these commits.
Important changes since 1.7.0:
Benchmark: v1.5.0-rc01
August 12, 2026
androidx.benchmark:benchmark-*:1.5.0-rc01 is released. Version 1.5.0-rc01 contains these commits.
CameraX: v1.7.0-alpha03
August 12, 2026
androidx.camera:camera-*:1.7.0-alpha03 is released. Version 1.7.0-alpha03 contains these commits.
API Changes
- Deprecated legacy Camera2Interop APIs (
Camera2Interop.Extender,Camera2CameraControl,Camera2CameraInfo, andCaptureRequestOptions) in favor ofCamera2Interopconfigurator factory methods and Kotlin extension functions. (Ib0845, b/529609261) - Added Kotlin DSL
camera2Interopextension blocks forpreview,imageAnalysis,videoCapture,imageCapture, andSessionConfig.Builder, as well asCameraControl.applyCamera2InteropAsyncextension function. (I51af9, b/529609261) - Added new
Camera2Interopconfigurator factory methods (forUseCase,forImageCapture,forSessionConfig,forCameraControl) and correspondingsetInterop/applyInteropAsyncmethods onPreview.Builder,ImageCapture.Builder,ImageAnalysis.Builder,VideoCapture.Builder,SessionConfig.Builder, andCameraControl. (I0007b, b/529609261) - Added helper methods to
Camera2Interopand equivalent Kotlin extension properties (CameraInfo.cameraId,CameraInfo.cameraCharacteristics, andString.toCameraSelector()) to retrieve Camera2 camera ID and characteristics fromCameraInfo. (I11803, b/529609261) - Added
Preview.setMirrorMode,Preview.getMirrorModeandVideoCapture.setMirrorModeto public APIs, and removed theExperimentalMirrorModeannotation. (I4ed60, b/519794349, b/470629643) - Added Kotlin DSL builders
preview{ ... },imageCapture{ ... },imageAnalysis{ ... }, andvideoCapture{ ... } for creatingUseCases. (I91df9, b/530013719) - Modified ImagePlane.buffer to be non-nullable ByteBuffer. (I98593)
- Deprecated the property getters on
SessionConfig.Builder,HighSpeedVideoSessionConfig.Builder, andExtensionSessionConfig.Builderin Kotlin DSL to enforce write-only properties. (I2875b, b/534570559)
Bug Fixes
- Fixed an issue where binding multiple
Previewuse cases with anOverlayEffectcaused one Preview stream delivery failure. (I7a383, b/532577546, b/532924417) - Fixed an issue where
Recording.pause()andRecording.resume()failed when switching cameras during a persistent video recording. (I71004, b/532327691, b/367121726) - Fixed HAL crashes when using Zero-Shutter Lag (ZSL) while zooming across physical camera boundaries on multi-camera devices. (I1c374, b/527782712, b/514757157)
- Fixed an issue where HDR video recording could fail on Samsung Galaxy S25, S26, and Fold 7 devices. (Ic0827, b/529618629)
Camera Feature Combination Query: v1.7.0-alpha03
August 12, 2026
androidx.camera.featurecombinationquery:featurecombinationquery:1.7.0-alpha03 and androidx.camera.featurecombinationquery:featurecombinationquery-play-services:1.7.0-alpha03 are released. Version 1.7.0-alpha03 contains these commits.
camera viewfinder: v1.7.0-alpha03
August 12, 2026
androidx.camera.viewfinder:viewfinder-compose:1.7.0-alpha03, androidx.camera.viewfinder:viewfinder-core:1.7.0-alpha03, and androidx.camera.viewfinder:viewfinder-view:1.7.0-alpha03 are released. Version 1.7.0-alpha03 contains these commits.
Bug Fixes
- Fixed a resource leak in Viewfinder where SurfaceControl was not properly released. (If9da7, b/532595493)
Compose Animation: v1.12.0
August 12, 2026
androidx.compose.animation:animation-*:1.12.0 is released. Version 1.12.0 contains these commits.
Important changes since 1.11.0:
Compose Animation: v1.13.0-alpha01
August 12, 2026
androidx.compose.animation:animation-*:1.13.0-alpha01 is released. Version 1.13.0-alpha01 contains
2026-08-07
Media3: v1.11.0
August 05, 2026
- Common library:
- Add
Format.channelMaskto explicitly represent the audio channel mask, and a newUtil.getAudioTrackChannelConfig(Format)overload to safely resolve it. - Upgrade Kotlin from 2.0.20 to 2.2.0.
- Add
- ExoPlayer:
- Fix a timing-dependent concurrency bug that could cause an
IllegalStateExceptionorIndexOutOfBoundsExceptionin ExoPlayer. - Relax ad group count checks in
AdsMediaSourceto allow the ad group count to decrease when an ad group is fully processed (hasUnplayedAds()isfalse), accommodating dynamic ad group resizing during reset workflows. - Add
getFlags()andFLAG_STRICT_DURATIONtoSampleStreamto allow streams to report flags, and update renderers to check these flags dynamically. - Fall back to the frame rate estimator in
MediaCodecVideoRendererand to the codec output format inMediaCodecAudioRendererto calculate the codec operating rate when the stream formats do not provide a valid value, and avoid unnecessary codec resets. - Remove clipping of content for client-side inserted ads in the core player. Instead,
AdsMediaSourcetakes care of the clipping logic. Custom client-side inserted ads sources need to be updated to implement the content clipping internally. - Mark tracks with a well-formed but unrecognized codec profile or level as
supported=NO_EXCEEDS_CAPABILITIESinstead ofsupported=YES(which is how tracks with missing or malformed profile or level info are marked). This ensures these tracks (which are unlikely to be supported by the device) are not selected when there are better-supported alternatives. - Add
DefaultPreloadManager.SimpleRankingDataComparator, which is aRankingDataComparatorthat compares the ranks of the media items based on their distances to the index of the current playing media item. Apps can override itscompare(Integer, Integer)method if a more fine-tuned comparison logic is needed. The customSimpleRankingDataComparatorcan be injected via a new constructor ofDefaultPreloadManager.Builder. - Reduce the OOM risk of
DefaultLoadControl.prioritizeTimeOverSizeThresholdsby falling back to buffer byte size limits if available heap memory seems tight. - Align handling of still images when
MediaItem.imageDurationUsis not set: JPEG and HEIC still images now 'play' with a very short default duration (the same way PNG and other images previously behaved). - Add
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)to plumbBandwidthMetertoMediaSource. The deprecated method with custom implementation will still be called by default though, it is recommended to implement the new method and useBandwidthMeter.getTransferListener()to get parity to the old method. - In
DefaultBandwidthMeter, add support for a customInitialBitrateSupplier. This allows apps to provide their own logic for determining the initial bitrate estimate, which will be used on creation ofDefaultBandwidthMeterand on network type changes. The supplier can be set viaDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Enable dynamic scheduling by default.
ExoPlayerplayback work loop will run dynamically as opposed to on a static interval. - Remove an unnecessary reset that can occur when joining tracks with pre-roll samples to active playback.
- In
DefaultBandwidthMeter, optimizegetInitialBitrateCountryGroupAssignmentto return the country group assignments packed into a 32-bit integer instead of an array, reducing code size and avoiding allocations. - Fix
AudioTrackinitialization failures on some devices by ensuring the retry logic always attempts a minimum of 1 second buffer size if other retries (by halving the buffer size) are unsuccessful (#3207). - Fix codec issue on some devices where the codec was swallowing all samples if previously flushed before receiving input buffers.
- Add experimental
ExoPlayer.Builder.enablePerStreamMediaProgression()to allow advancing media processing on a per-stream basis. This reduces startup latency between playlist items and avoids playback becoming "stuck" with very short content (#3122). - Fix race condition related to audio session id usage where the initial audio session id auto-generated by
ExoPlayerwould be used instead of the value set bysetAudioSessionId(#3241). - Add experimental HAGC (ST 2094-50) timed metadata playback support for progressive media (e.g. MP4, Matroska). The player automatically merges HAGC metadata tracks with the associated video track and delivers the metadata out-of-band to the decoder on API 37+ devices. This behavior can be disabled via
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - Add
Format.selectionPriorityrepresenting the relative preference of theFormatin track selection (#3236). - Fix potential scrubbing mode issue where scrubbing could stall when seeking to 'end of stream'.
- Fix a timing-dependent concurrency bug that could cause an
- CompositionPlayer:
- Fix an issue where
TrackSelectorinstances were not being released.
- Fix an issue where
- Transformer:
- Fix an issue where
ExportResult.fileSizeBytesmay be over-reported.
- Fix an issue where
- Track selection:
- Expose
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORand addAdaptiveTrackSelection.Factory.setTrackFormatComparatorto allow custom format ordering and ABR selection priority beyond bitrate-only ordering. - Fix a timing-dependent concurrency issue where rapid sequential updates to track selection parameters could result in some updates being lost or overwritten.
- Expose
- Extractors:
- MP4, MP3, and FLAC: Add
FLAG_DISABLE_ARTWORK_METADATAto allow discarding attached pictures and cover art metadata during container parsing to reduce runtime memory consumption (#2077). This can also be enabled centrally viaDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: Add support for extracting ITU-T T.35 (
it35) timed metadata tracks. - MP4: Add support for extracting chapter metadata (both Nero and QuickTime formats). QuickTime chapters are preferred if both are present. The extracted chapter information is exposed as
Chapterentries within the track'sMetadata, allowing for native chapter navigation in MP4, M4A, and M4B files (such as audiobooks and podcasts) (#2803). - WAV, Matroska, and MP4: Add support for 64-bit floating point PCM audio (#3090).
- Matroska: Use codec bitstream metadata to populate accurate
ColorInfo. - MP4: Add support for seeking in fragmented MP4 files using the
mfrabox when asidxbox is not present. To enable this, provideFLAG_READ_MFRA_FOR_SEEK_MAPto theFragmentedMp4Extractor, which is now done by default inDefaultExtractorsFactory(#3088). - Ignore
av1Cdata with unsupported version. - MP4: Add support for big-endian floating point PCM in
fpcmboxes. - Matroska: Parse chapter info to
Chapterentries in a track'sMetadata
- MP4, MP3, and FLAC: Add
2026-07-29
Appcompat: v1.8.0-rc01
July 29, 2026
androidx.appcompat:appcompat:1.8.0-rc01 and androidx.appcompat:appcompat-resources:1.8.0-rc01 are released. Version 1.8.0-rc01 contains these commits.
Benchmark: v1.5.0-beta01
July 29, 2026
androidx.benchmark:benchmark-*:1.5.0-beta01 is released. Version 1.5.0-beta01 contains these commits.
API Changes
PerfettoCaptureandPerfettoTraceRulecan now capture in-process traces and merge them for a target package. (I9a00b, b/497959820)
Compose Animation: v1.12.0-rc01
July 29, 2026
androidx.compose.animation:animation-*:1.12.0-rc01 is released. Version 1.12.0-rc01 contains these commits.
Compose Foundation: v1.12.0-rc01
July 29, 2026
androidx.compose.foundation:foundation-*:1.12.0-rc01 is released. Version 1.12.0-rc01 contains these commits.
Compose Material: v1.12.0-rc01
July 29, 2026
androidx.compose.material:material-*:1.12.0-rc01 is released. Version 1.12.0-rc01 contains these commits.
Compose Material3: v1.5.0-alpha25
July 29, 2026
androidx.compose.material3:material3-*:1.5.0-alpha25 is released. Version 1.5.0-alpha25 contains these commits.
API Changes
- Renamed
trailingIconparameter totrailingContentin the shape, checked, and selectedDropdownMenuItemoverloads while maintaining binary compatibility. (I2ecbd) - Added new selection and container color properties to
MenuItemColors, and renamedtrailingIcontotrailingContentin the new colors constructor while maintaining binary compatibility. (I20b92) - Improved
ScrollFieldaccessibility and keyboard navigation support. (If7477) - Remove
ComponentOverrideAPIs (I3784b) - Deprecated 2-parameter
SliderState.SaverandRangeSliderState.Saverin favor of new overloads taking steps.SliderStateno longer publicly implementsDraggableState. (I7c91b) - Graduate
BasicAlertDialogAPI from Experimental (If157c) - Changed
ButtonGroupScopeinButtonGroupto asealed interface. SplitModifier.animateWidthinto two overloads to allow omittingcompressionLimitand dynamically resolving the layout direction, and changed thecompressionLimitparameter type fromPaddingValuestoDp. (I8ef39) - Renamed
TonalToggleButtontoFilledTonalToggleButton. Added smooth border stroke animations toOutlinedToggleButton. DeprecatedToggleButtonDefaults.shapesin favor ofshapesFor. (Icb433) - Promote
LinearTrackStopIndicatorSize,LinearIndicatorTrackGapSize, andCircularIndicatorTrackGapSizeto stable. (I794d0) - Deprecated
SplitButtonLayoutApi to useSplitButtoninstead (Ic9840)
Bug Fixes
- Update focus switching in case of error for
TimePickerTextFieldinput inTimePicker.kt. (Ieceec) - Fixed shape of segmented list item when the list only has a single item. (I2ea1c, b/479721696)
- Update KDocs for
TimePickerDialog.kt. (Ia5fb8)
remote compose: v1.0.0-alpha16
July 29, 2026
androidx.compose.remote:remote-*:1.0.0-alpha16 is released. Version 1.0.0-alpha16 contains these commits.
API Changes
- Exposed companion object and invoke factories for
RemoteImageBitmapto allow instantiating remote image bitmaps from a URL orImageBitmapin non-composable contexts. (I4dbc7) - Expose
LineBreakstrategy and hyphenation frequency inRemoteTextStyle(I7f2e6, b/510078059) - Promoted
RemotePaintinterface to public. (Ida62b, b/465743273) - Removed deprecated shorthand comparison operators (
eq,ne,lt,le,gt,ge) acrossRemoteFloat,RemoteInt, andRemoteBoolean. (Ie01a9, b/532022248, b/532022248)
Bug Fixes
- Fixes line height calculation in
RemoteTextand constraints scaling inwidthIn/heightInmodifiers. (I89814) - Fixed state leak in
RemoteComposePlayer
2026-07-22
Media3: 1.11.0-rc01
July 22, 2026
- ExoPlayer:
- Fix potential scrubbing mode issue where scrubbing could stall when seeking to 'end of stream'.
- Revert: Add support for ads in multi-period content (e.g., DASH) by splitting and offsetting the
AdPlaybackStatefor each period.
- DataSource:
- Fix
KtorDataSourceloading the entire HTTP response body into memory when opening a connection (#3305).
- Fix
- Session:
- Downloads:
- Resolve HLS variables in media playlist when fetched for download (#3258).
- HLS extension:
- Fix calculation of content resume offset when resolving interstitial asset lists (#3322).
- Fix unexpected audio track timestamp discontinuity when resuming low latency live playback after a playlist request failure (#3311).
- Fix bug in
HlsMediaPeriod.getStreamKeys()where the ID3 track in audio renditions is considered as subtitles (#3333).
- DASH extension:
- Fix crash (
IndexOutOfBoundsException) when opening manifests with an empty<SegmentTimeline/>element (#3326).
- Fix crash (
- Decoder extensions (FFmpeg, VP9, AV1, etc.):
- Revert monochrome video support to bundled dav1d JNI.
- Cast extension:
- Fix bug where unconfigured live streams (
liveConfiguration == UNSET) were queued asSTREAM_TYPE_BUFFERED(#3318).
- Fix bug where unconfigured live streams (
2026-07-15
Annotation: v1.11.0-alpha01
July 15, 2026
androidx.annotation:annotation-*:1.11.0-alpha01 is released. Version 1.11.0-alpha01 contains these commits.
API Changes
- Allow
@DoNotInlineto be applied to fields. (I99120, b/521434897)
Bug Fixes
- Add
allowshrinkingto@DoNotInlineso that annotated methods can be removed if the function isn't reachable. (Id2c8c)
AndroidX releases Stay organized with collections Save and categorize content based on your preferences.:
Compose Material3: v1.5.0-alpha24
July 15, 2026
androidx.compose.material3:material3-*:1.5.0-alpha24 is released. Version 1.5.0-alpha24 contains these commits.
Features
- Add new scroll variant for expressive
TimePicker(I46f6b) - Added a new
material3-ripplelibrary (I1b3a3), which adds support for drawing ripples that visually display focus using inset focus rings instead of an opacity layer. This new library acts as a replacement formaterial-ripple, and expected usage is similar:- If you are using
material3itself, use the built-inmaterial3ripple configuration that integrates with the theme and usesmaterial3-rippleinternally as an implementation detail. - If you were using
material-rippledirectly or want to support inset focus rings without depending onmaterial3, use the newmaterial3-ripplelibrary directly.
- If you are using
API Changes
- Changed scrollbar
ScrollIndicatorStateparameter to be non-nullable. (Iab7c7, b/529445739) - Re-add
@ExperimentalMaterial3Apiannotation toAppBarWithSearchAPIs. (I0b61a) - Promoted
SearchBarStateand slot-basedSearchBarAPIs to stable. Deprecated olderSearchBarAPIs using expanded/onExpandedChange. (Ia3793)
Bug Fixes
- Fixed a rendering delay issue where the
RichTooltipandPlainTooltipcarets would appear late during the entrance animation. (I874b6, b/395753083) - Update margin values for Input/Scroll variant of
TimePicker. (I83f00) SplitButtonmeasure trailing button first to guarantee space. (Id3a1e)- Fixed an accessibility issue where Switch Access users could not activate editable text fields inside
ExposedDropdownMenuBox. (I0ea17) - Fixed talkback announcement order in
TextFieldandOutlinedTextFieldwhen a prefix or suffix is present. (Ie79e7) - Update
TimePickermargins and colon placement (I6bfeb) - Fix focus order in Talkback for
ScrollField. (I4ca9f, b/526870141) - Updated Compose dependencies in Material 3 to 1.12.0-beta01. (Ie9417)
- Tooltips are now clamped to the window boundaries to prevent them from being cut off on small screens or under large font configurations. (I421ff)
- Update
ScrollFieldwith more expressive number transitions and adjust sizing/typography (Ic1614)
remote compose: v1.0.0-alpha15
July 15, 2026
androidx.compose.remote:remote-*:1.0.0-alpha15 is released. Version 1.0.0-alpha15 contains these commits.
API Changes
- Added
rememberRemoteImageBitmap(url)and exposedrememberMutableRemoteImageBitmappublicly to support non-named remote bitmaps. (I7b960) - Exposed
RemoteStateScope.remotePathandRemotePathScopeAPIs for building paths via DSL. (I9e2fe, b/513228889)
Bug Fixes
- Removed restricted LIBRARY_GROUP overload of
rememberRemoteDocument. (Ifd9b4, b/532022244, b/532022244)
Glance Wear: v1.0.0-alpha14
July 15, 2026
androidx.glance.wear:wear:1.0.0-alpha14, androidx.glance.wear:wear-core:1.0.0-alpha14, and androidx.glance.wear:wear-tooling-preview:1.0.0-alpha14 are released. Version 1.0.0-alpha14 contains these commits.
API Changes
- We have added
RoundAllWidgetPreviewParams,RoundSmallWidgetPreviewParams, andRoundLargeWidgetPreviewParamspreview parameter providers for fully rounded Glance Wear widgets. (If5336, b/512405233)
New features
- We have set up and added Linter library for Glance Wear widgets.(If4218, b/527402079)
- Added a lint check to ensure that subclasses of
GlanceWearWidgetServiceexplicitly declare their associated widget class using the@AssociateWithGlanceWearWidgetannotation. (Idc575, b/477024153)
- Added a lint check to ensure that subclasses of
2026-07-13
Media3: 1.11.0-beta01
July 7, 2026
- ExoPlayer:
- Add
Format.selectionPriorityrepresenting the relative preference of theFormatin track selection (#3236).
- Add
- Track Selection:
- Fix a timing-dependent concurrency issue where rapid sequential updates to track selection parameters could result in some updates being lost or overwritten.
- Extractors:
- Audio:
- Remove fallback path of EAC3-JOC to EAC3 for playback on Google Pixel devices as their standard EAC3 decoders cannot decode EAC3-JOC streams (#3257).
- Video:
- Fix bug in
VideoFrameReleaseHelperwhere display changes could trigger redundantChoreographercallbacks and excessive CPU wakeups on the main thread.
- Fix bug in
- Session:
- Fix double-downscaling of artwork in
MediaSessionwhen the image size is close to the platform limit, resolving blurriness in notifications (#3134). - Fix
ForegroundServiceStartNotAllowedExceptioncrash inMediaNotificationManagerwhen an asynchronous artwork bitmap load callback attempts to start the foreground service while the app is in the background (#3270). - Fix an issue where
PositionInfoobjects received by aMediaControllerwere missing their originalTimelineUIDs. The session now reliably translates and propagates these UIDs during state updates.
- Fix double-downscaling of artwork in
- UI:
- Fix shutter suppression bug in
PlayerViewand ComposePresentationStatethat caused crashes on timelines that do not support period UID lookup (#3264).
- Fix shutter suppression bug in
- HLS extension:
- DASH extension:
- Add support for parsing multiple
Locationelements from the manifest (MPD) and performing location fallback inDashMediaSourcewhen manifest loads fail.
- Add support for parsing multiple
- Decoder extensions (FFmpeg, VP9, AV1, etc.):
- Add monochrome video support to bundled dav1d JNI.
- Cast extension:
- Add
MediaRouteButtonStateandrememberMediaRouteButtonStateto support observing the visibility state of the media route picker, and addstateparameter toMediaRouteButton(3172). - Fix bug where
RemoteCastPlayercould get permanently stuck in a track-masking state after a track selection, causing it to ignore subsequent track updates from the Cast receiver (#3237). - Fix bug where
DefaultMediaItemConverterthrows aNullPointerExceptionwhen trying to join a cast session started from a non-Media3 sender. - Prevent
CastPlayerfrom transferringMediaItemsthat are not playable when changing the active player (#3199).
- Add
- Test Utilities:
- Add
setPlaybackLoopertoTestExoPlayerBuilder.
- Add
- Remove deprecated symbols:
- Remove
androidx.media3.common.C.generateAudioSessionIdV21. Useandroidx.media3.common.util.Util.generateAudioSessionIdinstead.
- Remove
2026-07-07
Media3: 1.11.0-beta01
July 7, 2026
- ExoPlayer:
- Add
Format.selectionPriorityrepresenting the relative preference of theFormatin track selection (#3236).
- Add
- Track Selection:
- Fix a timing-dependent concurrency issue where rapid sequential updates to track selection parameters could result in some updates being lost or overwritten.
- Extractors:
- Audio:
- Remove fallback path of EAC3-JOC to EAC3 for playback on Google Pixel devices as their standard EAC3 decoders cannot decode EAC3-JOC streams (#3257).
- Video:
- Fix bug in
VideoFrameReleaseHelperwhere display changes could trigger redundantChoreographercallbacks and excessive CPU wakeups on the main thread.
- Fix bug in
- Session:
- Fix double-downscaling of artwork in
MediaSessionwhen the image size is close to the platform limit, resolving blurriness in notifications (#3134). - Fix
ForegroundServiceStartNotAllowedExceptioncrash inMediaNotificationManagerwhen an asynchronous artwork bitmap load callback attempts to start the foreground service while the app is in the background (#3270). - Fix an issue where
PositionInfoobjects received by aMediaControllerwere missing their originalTimelineUIDs. The session now reliably translates and propagates these UIDs during state updates.
- Fix double-downscaling of artwork in
- UI:
- Fix shutter suppression bug in
PlayerViewand ComposePresentationStatethat caused crashes on timelines that do not support period UID lookup (#3264).
- Fix shutter suppression bug in
- HLS extension:
- DASH extension:
- Add support for parsing multiple
Locationelements from the manifest (MPD) and performing location fallback inDashMediaSourcewhen manifest loads fail.
- Add support for parsing multiple
- Decoder extensions (FFmpeg, VP9, AV1, etc.):
- Add monochrome video support to bundled dav1d JNI.
- Cast extension:
- Add
MediaRouteButtonStateandrememberMediaRouteButtonStateto support observing the visibility state of the media route picker, and addstateparameter toMediaRouteButton(3172). - Fix bug where
RemoteCastPlayercould get permanently stuck in a track-masking state after a track selection, causing it to ignore subsequent track updates from the Cast receiver (#3237). - Fix bug where
DefaultMediaItemConverterthrows aNullPointerExceptionwhen trying to join a cast session started from a non-Media3 sender. - Prevent
CastPlayerfrom transferringMediaItemsthat are not playable when changing the active player (#3199).
- Add
- Test Utilities:
- Add
setPlaybackLoopertoTestExoPlayerBuilder.
- Add
- Remove deprecated symbols:
- Remove
androidx.media3.common.C.generateAudioSessionIdV21. Useandroidx.media3.common.util.Util.generateAudioSessionIdinstead.
- Remove
2026-07-01
appfunctions: v1.0.0-alpha10
July 01, 2026
androidx.appfunctions:appfunctions:1.0.0-alpha10, androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10, and androidx.appfunctions:appfunctions-testing:1.0.0-alpha10 are released. Version 1.0.0-alpha10 contains these commits.
API Changes
- Added
AppFunctionServiceEntryPoint. All AppFunction annotation must be declared within theAppFunctionServicethat is annotated withAppFunctionServiceEntryPoint(Idc5d5, b/463909015) - Moved
AppFunctionandAppFunctionConfigurationAPIs .AppFunctionConfigurationwill be removed in future release as it will be replaced byAppFunctionServiceEntryPoint(Iaff23, I4cf3e, b/517876475) - Updated
AppFunctionServiceAPI to support callback (I6e0d7, b/519880977) - Add
searchAppFunctionsAPI (I8c0f9, I1fa27, b/494239238) - Added
functionNamestoAppFunctionSearchSpec(I95f53, b/494239238) - Added
AppFunctionInstructionannotation (I21120, b/488994214) - Added
AppFunctionSignatureannotation and accompanying constants to declare runtime registered app function signatures. (I82a05, Ie2361, Ib6bb2)
Bug Fixes
- Omit
enabledByDefaultfrom generated XML forAppFunctionSignatures(Ie2996, b/501032667)
Benchmark: v1.5.0-alpha07
July 01, 2026
androidx.benchmark:benchmark-*:1.5.0-alpha07 is released. Version 1.5.0-alpha07 contains these commits.
API Changes
- Simplified Perfetto trace capture on device. (I48810)
- Move the experimental
TraceProcessor.runServerextension APIs fromandroidx.benchmark:benchmark-macrotoandroidx.benchmark:benchmark-common, and to theandroidx.benchmarkpackage. This will enable their use in microbenchmarks in the future. (Ie25bb, b/393640753)
Bug Fixes
- Update traceprocessor implementation (as well as unbundled Perfetto Trace capture) to use Perfetto v56.0 (I8fb9d)
- Set
androidx.benchmark.requireAotandandroidx.benchmark.requireAotto true by default. These safer defaults ensure that compilation is performed ahead of running microbenchmarks (on by default with the benchmark gradle plugin when using AGP 8.4+), and thatmeasureRepeatedis not used on the main thread, where it can cause ANRs. (I1bc3c, b/379115078) - Increased perfetto kill timeout from 5 to 30 seconds (for benchmark captured Perfetto sessions only). Added clearer error logging when the issue occurs. (If188f, b/435589290)
CameraX: v1.7.0-alpha02
July 01, 2026
androidx.camera:camera-*:1.7.0-alpha02 is released. Version 1.7.0-alpha02 contains these commits.
API Changes
CameraXViewfindernow supports built-in gestures for pinch-to-zoom and tap-to-focus, and adds support for screen flash and stream state.FocusStateis now public in viewfinder-core to allow monitoring tap-to-focus results. (I66a17, b/522549890)- Added
isAutoRotationEnabledtoSessionConfig.Builder,HighSpeedVideoSessionConfig.Builder,ExtensionSessionConfig.Builderand introduced a Kotlin DSL factory functions for them. This allows setting the appropriate rotation automatically based on device sensors. (I5b4a3, b/510752515) - Added
TransformationModeproperty toTransformationInfoto support apps to useOpenGLpipeline inEMBEDDEDmode. (Id1de1, b/487826941) - Added
isNightModeIndicatorSupported()andgetNightModeIndicator()toCameraInfoto determine when the environment conditions meet the criteria for Night Mode. (Iae47b, b/499389465) - Exposed ImageAnalysis.OUTPUT_IMAGE_FORMAT_PRIVATE and ImageProxy.getHardwareBuffer() as public API to support GPU based ImageAnalysis. (I41cb3, b/496022391, b/492934501)
- ExtensionsManager#getExtensionEnabledCameraSelector is now deprecated. Please use the new ExtensionSessionConfig API for enabling extension modes. (I2b336, b/473715607)
- Added support for visual styling of camera frames during concurrent camera composition. You can now customize:
- Rounded Corners: Use setRoundedCornerRatio(float) to apply normalized rounding (0.0 to 1.0) to frame edges.
- Borders: Use setBorderWidthRatio(float) and setBorderColor(int) to add a decorative frame with consistent thickness (I18a07
2026-06-24
Media3: 1.11.0-alpha01
- Common library:
- Add
Format.channelMaskto explicitly represent the audio channel mask, and a newUtil.getAudioTrackChannelConfig(Format)overload to safely resolve it. - Upgrade Kotlin from 2.0.20 to 2.2.0.
- Add
- ExoPlayer:
- Fix a timing-dependent concurrency bug that could cause an
IllegalStateExceptionorIndexOutOfBoundsExceptionin ExoPlayer. - Relax ad group count checks in
AdsMediaSourceto allow the ad group count to decrease when an ad group is fully processed (hasUnplayedAds()isfalse), accommodating dynamic ad group resizing during reset workflows. - Add support for ads in multi-period content (e.g., DASH) by splitting and offsetting the
AdPlaybackStatefor each period. - Add
getFlags()andFLAG_STRICT_DURATIONtoSampleStreamto allow streams to report flags, and update renderers to check these flags dynamically. - Fall back to the frame rate estimator in
MediaCodecVideoRendererand to the codec output format inMediaCodecAudioRendererto calculate the codec operating rate when the stream formats do not provide a valid value, and avoid unnecessary codec resets. - Remove clipping of content for client-side inserted ads in the core player. Instead,
AdsMediaSourcetakes care of the clipping logic. Custom client-side inserted ads sources need to be updated to implement the content clipping internally. - Mark tracks with a well-formed but unrecognized codec profile or level as
supported=NO_EXCEEDS_CAPABILITIESinstead ofsupported=YES(which is how tracks with missing or malformed profile or level info are marked). This ensures these tracks (which are unlikely to be supported by the device) are not selected when there are better-supported alternatives. - Add
DefaultPreloadManager.SimpleRankingDataComparator, which is aRankingDataComparatorthat compares the ranks of the media items based on their distances to the index of the current playing media item. Apps can override itscompare(Integer, Integer)method if a more fine-tuned comparison logic is needed. The customSimpleRankingDataComparatorcan be injected via a new constructor ofDefaultPreloadManager.Builder. - Reduce the OOM risk of
DefaultLoadControl.prioritizeTimeOverSizeThresholdsby falling back to buffer byte size limits if available heap memory seems tight. - Align handling of still images when
MediaItem.imageDurationUsis not set: JPEG and HEIC still images now 'play' with a very short default duration (the same way PNG and other images previously behaved). - Add
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)to plumbBandwidthMetertoMediaSource. The deprecated method with custom implementation will still be called by default though, it is recommended to implement the new method and useBandwidthMeter.getTransferListener()to get parity to the old method. - In
DefaultBandwidthMeter, add support for a customInitialBitrateSupplier. This allows apps to provide their own logic for determining the initial bitrate estimate, which will be used on creation ofDefaultBandwidthMeterand on network type changes. The supplier can be set viaDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Enable dynamic scheduling by default.
ExoPlayerplayback work loop will run dynamically as opposed to on a static interval. - Remove an unnecessary reset that can occur when joining tracks with pre-roll samples to active playback.
- In
DefaultBandwidthMeter, optimizegetInitialBitrateCountryGroupAssignmentto return the country group assignments packed into a 32-bit integer instead of an array, reducing code size and avoiding allocations. - Fix
AudioTrackinitialization failures on some devices by ensuring the retry logic always attempts a minimum of 1 second buffer size if other retries (by halving the buffer size) are unsuccessful (#3207). - Fix codec issue on some devices where the codec was swallowing all samples if previously flushed before receiving input buffers.
- Add experimental
ExoPlayer.Builder.enablePerStreamMediaProgression()to allow advancing media processing on a per-stream basis. This reduces startup latency between playlist items and avoids playback becoming "stuck" with very short content (#3122). - Fix race condition related to audio session id usage where the initial audio session id auto-generated by
ExoPlayerwould be used instead of the value set bysetAudioSessionId(#3241). - Add experimental HAGC (ST 2094-50) timed metadata playback support for progressive media (e.g. MP4, Matroska). The player automatically merges HAGC metadata tracks with the associated video track and delivers the metadata out-of-band to the decoder on API 37+ devices. This behavior can be disabled via
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false).
- Fix a timing-dependent concurrency bug that could cause an
- CompositionPlayer:
- Fix an issue where
TrackSelectorinstances were not being released.
- Fix an issue where
- Transformer:
- Fix an issue where
ExportResult.fileSizeBytesmay be over-reported.
- Fix an issue where
- Track selection:
- Expose
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORand addAdaptiveTrackSelection.Factory.setTrackFormatComparatorto allow custom format ordering and ABR selection priority beyond bitrate-only ordering.
- Expose
- Extractors:
- MP4, MP3, and FLAC: Add
FLAG_DISABLE_ARTWORK_METADATAto allow discarding attached pictures and cover art metadata during container parsing to reduce runtime memory consumption (#2077). This can also be enabled centrally viaDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: Add support for extracting ITU-T T.35 (
it35) timed metadata tracks. - MP4: Add support for extracting chapter metadata (both Nero and QuickTime formats). QuickTime chapters are preferred if both are present. The extracted chapter information is exposed as
Chapterentries within the track'sMetadata, allowing for native chapter navigation in MP4, M4A, and M4B files (such as audiobooks and podcasts) (#2803). - WAV, Matroska, and MP4: Add support for 64-bit floating point PCM audio (#3090).
- Matroska: Use codec bitstream metadata to populate accurate
ColorInfo. - MP4: Add support for seeking in fragmented MP4 files using the
mfrabox when asidxbox is not present. To enable this, provideFLAG_READ_MFRA_FOR_SEEK_MAPto theFragmentedMp4Extractor, which is now done by default inDefaultExtractorsFactory(#3088). - Ignore
av1Cdata with unsupported version. - MP4: Add support for big-endian floating point PCM in
fpcmboxes. - Matroska: Parse chapter info to
Chapterentries in a track'sMetadata. - MPEG-TS: Improve extraction of DTS-HD and DTS Express streams by combining the Core and Extension Substream into a single sample, fixing playback issues where the two were previously output as separate samples (#3147).
- MP4: Prevent infinite loops and out-of-bounds reads when parsing emp...
- MP4, MP3, and FLAC: Add
2026-06-23
Tracing: v2.0.0-alpha09
June 23, 2026
androidx.tracing:tracing-*:2.0.0-alpha09 is released. Version 2.0.0-alpha09 contains these commits.
API Changes
- Minor API change in
Tracerto diambiguate betweeninstant(...)andwriteInstant(...). (I0935a) - Add support for propagation tokens in instant events. (I99f81)
- Allow full usage of Perfetto flows in the experimental manual context propagation API. (I20cb6)
- Defer creation of the
BufferedSinkandProtoWriterinTraceSink. (Ibd098) - Make
Tracerdiscovery simple and pluggable for both Java and Android Libraries. (I99111) - Make it easy for library developers to discover an instance of
TraceDriverthat can be used for in-process tracing. (Ia503e)
Version 2.0.0-alpha08
May 19, 2026
androidx.tracing:tracing-*:2.0.0-alpha08 is released. Version 2.0.0-alpha08 contains these commits.
API Changes
- Add the ability to discover and override instances of
TraceDriverto be used process wide. (I3f715) - Rename
Tracer.recordExceptiontoTracer.recordExceptionAndThrow. (I4411f, b/503092450)
Version 2.0.0-alpha07
May 06, 2026
androidx.tracing:tracing-*:2.0.0-alpha07 is released. Version 2.0.0-alpha07 contains these commits.
API Changes
- Add a API to obtain a stub tracer that can be used when tracing is disabled. (I84c98)
- Make tracing lifecycle consistent with system tracing. (Ib391b)
- Counter APIs are now entirely allocation free. (I5e73a)
Bug Fixes
- Fixed a keep rule for the Perfetto SDK (
tracing-perfetto) which ensures that the Perfetto SDK can be enabled. (I1d227) - Add the ability to trace
flush()events. (I38014, b/495852704)
Version 2.0.0-alpha06
April 22, 2026
androidx.tracing:tracing-*:2.0.0-alpha06 is released. Version 2.0.0-alpha06 contains these commits.
API Changes
- Unrestrict
File.createPerfettoFile()so others can safely create sinks. When ablock()throws an exception intrace/traceCoroutinecreate aninstantevent for the exception with the metadata representing the corresponding stack trace elements. (I682e5, b/501536851, b/437166283) - Add a
setCounter(...)overload that takes a JavaLongtype. (Ic0469, b/356082604) - Tracing 2.0 now uses
Longfor platform specificThreadidentifiers. (I67277)
Bug Fixes
- Improve documentation for
AttributeEntry.reset(). (I5d3a1, b/496079439)
Version 2.0.0-alpha05
April 08, 2026
androidx.tracing:tracing-*:2.0.0-alpha05 is released. Version 2.0.0-alpha05 contains these commits.
API Changes
TraceSinkfactory functions now returnTraceSinkand notAbstractTraceSink. Files now have a unique suffix. We make sure that we can atomically create a new file that will be used to store trace packets. (I4c4aa, b/496298726)- Simplify and make coroutine context propagation faster. (Ia62db)
- Introduce the optional
attributes()when constructing aTraceDriverthat provides a way to add metadata pertaining to a trace. (Ia147e)
Bug Fixes
- Process threads and counter tracks are now synchronized. This fixes exceptions of the form:
java.lang.NullPointerException: Cannot invoke "androidx.tracing.ThreadTrack.flush$tracing()" because "threadTrack" is null - Avoid emitting sink events when tracing is disabled.
Version 2.0.0-alpha04
March 25, 2026
androidx.tracing:tracing-*:2.0.0-alpha04 is released. Version 2.0.0-alpha04 contains these commits.
API Changes
- Make
AbstractTraceDriverreally abstract, and move thePerfettoimplementation into thetracing-wiremodule. (Ie2f59) - Give more descriptive names to base implementations to avoid using the wrong one. For developers previously extending
androidx.tracing.Trace{Sink|Driver}they will now need to switch to usingAbstractTrace{Sink|Driver}. (I9b46d)
Version 2.0.0-alpha03
March 11,...