Repository navigation
Releases: meta/fresco
Releases · meta/fresco
Release list
v3.9.0
Highlights
- Updates the Fresco source-build toolchain to Android Gradle Plugin 9.2.1, Gradle 9.4.1, and NDK r28c (
28.2.13676358) (d74afa8) - Adds a
ProducerFactory.newBitmapMemoryCacheKeyMultiplexProduceroverload that accepts an explicitCacheKeyFactory, allowing delegated cache requests to be multiplexed with their own cache-key factory (c361d61) - Adds exact-key removal for memory caches and introduces
UnifiedEncodedMemoryCache; Fresco's encoded-memory-cache producer now uses the shared cache boundary (745298f, 53dc796) - Generalizes
EncodedCountingMemoryCacheFactoryto create caches for custom encoded value types through aValueDescriptor(53dc796) - Adds a Vito warning when a
CloseableBitmaphas a nullunderlyingBitmap, helping diagnose images that may already be closed (0282808)
Breaking
Source builds only:
- The repository moves from AGP 8.10.1, Gradle 8.11.1, and NDK r27b to AGP 9.2.1, Gradle 9.4.1, and NDK r28c. The build now relies on AGP 9's built-in Kotlin support instead of applying
kotlin-android, and annotation-processing modules usecom.android.legacy-kaptinstead ofkotlin-kapt. Source-build automation or patches that depend on the previous wrapper or plugin IDs must be updated (d74afa8)
Full Changelog: v3.8.0...v3.9.0
v3.8.0
Highlights
- Adds an encoded-image request transformation hook and makes disk-cache write producer creation overridable (58ac45f)
- Adds
EncodedImageDimensionsDecoderand a registry for custom image-dimension decoding (b0742d6) - Adds
MultiPostprocessorfor applying multiple postprocessors in sequence (ddc1db1) - Adds
EmptyImageSource.isExpectedEmptyso intentional empty Vito sources can retain their placeholders without reporting failures (0b0bc9d, d838034) - Lets custom producer-sequence factories handle decoded HTTP(S) requests and encoded network prefetches (793dabc, 6bcf6e3)
- Adds framework-neutral cache-key generation with
UnifiedCacheKeyGenerator(f650f5d) - Adds request creation from complete
SingleImageSourceinstances and request-based cache eviction that honors custom cache keys (7bf53df, 8366d27) - Adds opt-in streaming image decoding with byte- and time-based partial-result throttling (9e2b459, f2d88bb)
- Adds an option to keep the progress indicator visible while intermediate Vito images are displayed (624a167)
- Exposes the configured memory-chunk pool through
PoolFactory.getMemoryChunkPool(06140ac) - Adds
PrefetchDataand prefetch telemetry plumbing (9366996) - Reduces final-image latency by letting completed decode results bypass the progressive-decode interval (02414e4, e0ecb75)
- Supports building the OkHttp backend against both OkHttp 3.x and 4.x (288a34c, bc35d33)
- Fixes an Android 16 null dereference when creating the default Vito drawable factory (7b7b29a)
- Hardens native WebP decoding against invalid dimensions, oversized canvases, negative lengths, and unsafe byte-array ranges (a160b3b, 1566dd8)
- Fixes recycled-bitmap rendering in Vito (41905be)
- Fixes races and invalid-dimension handling in on-demand animations (762ed58, b57c874)
- Fixes concurrency-related null dereferences in request listeners and Vito image tracking (2baa5d4, c6620d7)
- Fixes source builds with JDK 25 and aligns the OSS Gradle build with Kotlin 2.2 (288cdbb, c90d7f0, 0209f24, 15df97e)
Breaking
Method signature changes:
- Changes
ProducerFactory.newDiskCacheWriteProducerto returnProducer<EncodedImage>instead ofDiskCacheWriteProducer(58ac45f)
Removed classes and options:
- Removes
EfficientPlatformDecoder,EfficientRawBitmapDecoder,DecodeValidationUtils, and thePlatformDecoderOptions.useEfficientDecoderanduseBitmapFactoryDecoderoptions (d7ed19a, 5bc48b6, d4f7393)
Kotlin migration changes:
- Makes
MatrixDrawableandRoundedBitmapDrawablefinal and makes several previously overridableFadeDrawablemethods final (f60d58d, dc82282, 9926a96) - Makes
StreamUtilandUriUtilsingletons; their static operations remain available, but construction and subclassing are no longer supported (e708aed, 5f2b04b) - Makes
NativeJpegTranscoderFactoryfinal andNativeJpegTranscoderSoLoadera singleton (f69ccbc) - Changes selected Kotlin getter calls on
FrameScheduler,GifFrame, andWebPFrameto property access (d30727c, 0f7acde, 0266179)
Behavioral changes:
- Cache-only decode misses now report errors;
cancelDecodeOnCacheMissno longer changes this behavior (0e7644e, 762ed58)
Full Changelog: v3.7.0...v3.8.0
v3.7.0
Highlights
- Adds client-side AVIF transcoding (a19f4cd)
- Adds
intermediateImageBitmapTransformationAPI to Fresco (ad877d5) - Adds a quality-aware
BitmapTransformationAPI and default transformation for intermediate images
(de4f23c) - Adds
SimilarImageLookupinterface and wires it intoImagePipelineConfig(d04a77d) - Adds
UnifiedCacheKeyFactorywith a pluggableUriNormalizer(55ad40a) - Adds
EfficientPlatformDecoderand aRawBitmapDecoderinterface for unified byte-array-to-Bitmap decoding
(cd773ee) - Adds
ZoomableVitoViewto the zoomable library (e6ce122) - Adds
DrawableResImageSource,RetainingImageSource, andColorImageSourceimage sources
(0b41741) - Adds
ScaleType.DISABLEDand a newMatrixScaleType(8cf2538) - Adds loop-count control and static-thumbnail fallback for animated images (8cbe470)
- Adds an API to delete all files from a disk cache (209d705)
- Adds the ability to specify a custom cache key on
ImageRequest/ImageRequestBuilder
(2da616f) - Adds a circuit breaker for consecutive frame-drop failures in animations (1d3adb6)
- Replaces deprecated
setDownsampleEnabled()withsetDownsampleMode()(fd2b684) - Bumps Kotlin to
2.2.0(6a14e11) - Hardens native decoding against OOB reads, use-after-free, integer overflow, and a GIF-parsing memory leak in
webp_bitmapfactory(6328781) - Removes
CallerContextfrom cache keys to prevent caller-context leaks (d14c122) - Fixes an ANR by preventing synchronous network fetches on Litho layout threads (45a60ce)
- Fixes recycled-bitmap crashes via an
isRecycled()check inDefaultDrawableFactory(a122b06) - Fixes a postprocessor not being applied during decoded-image prefetch (6544cc6)
- Fixes image info being fetched after drawable creation to avoid
IllegalStateException(#2839)
(64f3ca9) - Fixes the loop variable in
DropFramesFrameScheduler(#2850) (4ed6d91)
Breaking
Nullability changes:
- Marks
getUnderlyingBitmaponCloseableImageandcloneUnderlyingBitmapReferenceonCloseableStaticBitmapnullable (ad1dab9)
Removed classes:
- Removes the unused
MultiUriclass (0eb4503) - Removes the legacy
GingerbreadPurgeableDecoder(1d801a7),HoneycombBitmapFactory(9b971a433af0a7024a94d26c97ef5f1fbc3b4af2), andKitKatPurgeableDecoder(removed as part of minSdk raise sweep) - Removes
PoolSizeViolationExceptionandignoreHardCap(537cd77) - Removes
LegacyOnFadeListenerand relatedsetLoggingListener/getLoggingListeneronAbstractDraweeControllerandAbstractDraweeControllerBuilder(6653bfead9de8d1dcdb01aa13dfb1fe5daa7be41, dd81c0c) - Removes
AnimationBackendDelegateWithInactivityCheckinactivity API (91702f7) - Removes
AnimatedImageFactoryImpl(d291ae3)
Removed methods:
- Removes
PipelineDraweeControllerBuilder.setImageOriginListener(3998f18) - Removes
PipelineDraweeController.removeImageOriginListener(made private) (a925053) - Removes
DraweeSpanStringBuilder.setImageSpan,hasDraweeSpans,getDraweeSpans(dd99560) - Removes
AnimationListener.onAnimationReset(Drawable)(eeae326) - Removes
KAnimatedDrawable2.DrawListener.onDraw(f0dc700) - Removes
ImagePipelineExperiments.setWebpSupportEnabled/isWebpSupportEnabled(b0ebc93) - Removes
DefaultImageDecoder.decodeGif/decodeAnimatedWebp(4a5a554) - Removes
AbstractAdaptiveCountingMemoryCache.reportData()(94346a6) - Removes
DefaultCacheKeyFactory.setShouldRemoveCallerContextFromCacheKey(21a3f60) - Removes
ImageRequest.recordHashCode(30e7642) - Removes
RenderScriptBlurFilter.canUseRenderScript()(099f21c) - Removes
PoolStatsTracker.onSoftCapReached/onHardCapReached(d5c9d20)
Enum changes:
- Removes
ImageRenderingInfra.VITO_V1enum value (1a8b9e6)
Behavioral changes:
- Bitmap pool
ignoreHardCapnow defaults totrue(b196965)
Full Changelog: v3.6.0...v3.7.0
v3.6.0
Highlights
- Adds AVIF image format support (0e05952)
- (Breaking) Adds constructor argument to
PipelineDraweeControllerfor providing a drawable factory for XML (e6b0526) - Marked
AnimatedDrawable2andKAnimatedDrawable2open for custom subclasses (76bde19) - Fixes infinite invalidation of drawables (aade8e8)
- Fixes issue with XML format support not enabling when custom decoder is provided (7896b72)
Full Changelog: v3.5.0...v3.6.0
v3.5.0
Highlights
- Added experimental support for XML drawables (bf62ecb)
- Added disk cache read timeout support (2535bb3)
- Added new API for evicting images from Vito cache (973d3fb)
- Fixed a file descriptor memory leak when reading image metadata (96089bc)
Full Changelog: v3.4.0...v3.5.0
v3.4.0
Highlights
- Bump to AGP 8.5.2 and Gradle 8.7 (f5d7c99)
- Bump to NDK 27 + 16 KB page size (766a877)
- Native binaries are now 16KB page aligned and is still compatible with existing Android OS using 4KB page size
- This will enable Fresco to run on Android 15 devices that choose to use a page size of 16KB
- See here for more details: Android Developers - Support 16KB page size
Full Changelog: v3.3.0...v3.4.0
v3.3.0
Full Changelog: v3.2.0...v3.3.0
A few highlights:
- Updated AGP to 8.2.2 (51d672c)
- Improved null safety and performed Kotlin conversions on both Drawable and Vito internals (e1eaf42, 197426e, 552d09f, 5b4b73c, d30dff3, 5382afc, ad2ce43, c8ba3fe, 5b1cb2a, 8508307, ae7cba8, 3895af5, 572f320, f19831c, cbf842e)
- Added support for tint color to drawable image types (ca6dac1)
- Added an override for disabling downsampling on image requests (9c57738)
- Added support for dynamic caches to image pipeline (affc542)
- Added option to selectively disable image release callbacks for Vito (dc64f21)
- Fixed placeholder images for Vito (6947f27)
- Added functionality to display partial images instead of placeholder if in cache (fe33125)
- Added new FrescoVitoSetup interface to set up Vito (60b8ca9)
v3.2.0
- Upgraded libjpeg-turbo to 2.1.5.1 (no longer associated with CVE-2018-14498)
- Upgraded AGP to 8.1.1
- Setup Github Actions workflows
- More: v3.1.3...v3.2.0