9 hours ago
GSYVideoPlayer

v14.0.0

GSYVideoPlayer 14.0.0

本版覆盖 v13.2.1..v14.0.0 的全部 27 条提交(含 2 条合并),完整更新说明与逐提交清单见下方链接。

  • IJK / FFmpeg:ex_so 与独立 arm64 / armv7a / x64 使用 FFmpeg n5.1.10 + OpenSSL 3.5.9,FFmpeg/player/SDL 成套重编,补齐 MJPEG、HEVC seek/replay 和 FFmpeg 5 API 兼容修复。
  • TLS / HLS:修复 ARMv7 HTTPS 证书加载崩溃;针对 NDK r22b / Clang 11 修正 OpenSSL 编译选项和缓存身份。嵌套 HLS 与 keepalive 重连保留显式证书、主机名校验和代理配置。
  • 音频:软件变速支持 0.25×–4×,平台倍速支持范围取决于设备;修复重采样、起播、变速引擎排空与切换、EOF 完成和终止错误状态。
  • RTSP / 会话:支持初始化 OPTIONS / DESCRIBE / SETUP / 初次 PLAY 的重定向,透传 timeout(微秒)和传输配置;新增可选直播队列上限,隔离旧会话回调、已排队消息和看门狗。
  • Codec2:保留原解码器选择,Android 10+ 在原选择为空时补充普通硬件 c2.* 解码器筛选,排除纯软件及安全/隧道模式必需解码器。
  • GL 管线与滤镜:新增 FBO 多 pass、高斯模糊、降采样金字塔、Bloom、LUT 调色、保边美颜、Glitch、CRT 和老电视信号干扰;支持 uTime 与额外纹理生命周期,修正旧 shader 并移除多余 glFinish。
  • 折叠屏 Demo:新增 XML / Compose 的 FLAT、BOOK、TABLETOP 布局,处理铰链、旋转、全屏和姿态测试注入,Compose 可运行 Demo 增至 25 个。
  • Compose:修复 #4259 宿主卸载时的资源释放和 #4261 轮询缓冲进度同步;新增动态显示比例 API,补齐 IJK/EXO 缓存切换、缓存命中及缓冲展示。
  • R8 / 工具链:精简 Demo 和 FAQ 的 JNI/反射保留规则;Gradle 8.12、AGP 8.9.1、R8 9.4.14,新增 13 个接入 skills,CI 纳入会话与 Compose 回归。

升级说明: 默认整包与 gsyvideoplayer-ex_so 包含 arm64-v8a / armeabi-v7a / x86_64 三个 ABI。迁移后的独立 ABI 模块与整包使用相同编解码配置,按 ABI 和包体积选择;旧 armeabi / x86 仅按需通过独立模块提供,未升级到 FFmpeg 5。Compose、投屏与 AliPlayer 为可选模块,核心最低 API 23,投屏模块要求 API 26。

implementation "io.github.carguo:gsyvideoplayer:14.0.0"

Maven Central 使用 io.github.carguo,GitHub Packages 使用 com.shuyu。2026-10-10 已核验 Maven Central 的全部 15 个模块 POM / AAR 可以公开下载。

发布验证: Debug/Release(含 R8)、48 项会话回归、36 次单测执行(18 个独立用例 × 两种构建)、双渠道本地发布和三 ABI 静态/打包检查通过。原受影响的 Redmi M2104K10AC / API 33 上,最终 ARMv7 与 ARM64 各通过独立 CA 加载及 15 项 GSY/JNI 播放检查,覆盖 HTTPS、嵌套 HLS 错误 CA/SAN 拒绝、RTSP 初始化重定向、seek/完成、倍速和重采样。

当前 x86_64 与 16 KiB 页设备运行、硬解画面及新库完整声学回归仍未覆盖;当前设备检查使用静音输出且不设置视频 Surface。注入姿态矩阵不替代实体折叠屏传感器验收,历史旧库证据不替代最终发布库的验证。

文档校正(2026-10-10): 下列链接固定到补齐 27 条提交说明后的文档提交 04a03656;v14.0.0 tag、代码与 APK 身份保持不变。

中文完整更新说明 · English changelog · 27 条提交与源码/产物核对 · 回归范围与历史对照

Full Changelog: v13.2.1...v14.0.0

18 hours ago
ImageToolbox

4.2.1-rc01

What's Changed

  • Added support for JPEG XL-compressed DNG files by #3167
  • Added ability to disable padding for shapes in markup layers by #3174
  • Added error informing for pdf tools
  • Added undo/redo to collage maker by #3177
  • Added presets to Crop PDF tool by #3176
  • Added ability to add WIFI network from QR code by #3190
  • Added ability to choose scale direction in image stitching by #3207
  • Added ability to group and sort images in embedded picker by #3201
  • Added ability to save color as image by #3201
  • Added Screenshot Framing tool
  • Added ability to export animated before/after GIF in compare tool
  • Fixed raw development rotation maintaining by #3168
  • Fixed removing of image in some tools by #3209
  • Fixed saving of new images when overwrite files enabled by #3170
  • Fixed link extraction by #3189
  • Fixed document scanner crash by #3203
  • Improved image stitching algorithm by #3187
  • Improved Collage Maker output image quality by #3188
  • Improved EXIF deletion tool by #3210
  • Improved UI

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.2.1-alpha02...4.2.1-rc01

4 days ago
react-native

0.88.0-rc.4

Changed

  • TypeScript: Allow module augmentation to extend generated props and style types (447ccd1ddb by @zoontek)

Fixed

Android specific

  • Accessibility: Properly re-enable a view after accessibilityState.disabled resets from true, which left Pressable partly untappable (357b6998c4 by @bigcupcoffee)

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

11 days ago
MPAndroidChart

MPAndroidChart 4.0.1

Fixes and small additions for MPAndroidChart 4.0. A drop-in update from 4.0.0: no API was removed or changed.

implementation("com.github.PhilJay.MPAndroidChart:MPChartLib:v4.0.1")
implementation("com.github.PhilJay.MPAndroidChart:MPChartCompose:v4.0.1") // only for Compose

Fixed

  • A tap inside a bar of a combined chart selects the bar instead of a nearby line point (#5207).
  • In a bar chart whose grouped data sets use different y axes, a tap selects the bar that was touched (#5292).
  • Limit line labels at the edge of the content area are no longer cut off (#5328).
  • Auto scaling also rescales a y axis that is disabled (#5258).
  • Charts can be built on a thread without a Looper, for example with an asynchronous layout inflater (#5241).
  • The default value formatter no longer rebuilds its number format when the number of decimals stays the same (#5217).

New

  • YAxis.labelRotationAngle rotates the y axis labels (#5213).
  • Pie entry labels and values with a line break are drawn as several lines (#5205).
  • PieChart.isRoundedSlicesReversed rounds the slice ends the other way around (#5206).
  • PieChart.isTransparentCircleClippedToSlices draws the translucent ring only over the slices, so the space between slices stays open (#5348).
  • chart.toBitmap(width, height) draws a chart at any size, also one that was never laid out, for example to export an image (#4664).

The guides cover all additions, and CHANGELOG.md lists every change.

12 days ago
react-native

0.88.0-rc.3

Changed

  • Hermes: Bump to 260318099.0.4, which avoids a quadratic reserve() in ConsecutiveStringStorage during lazy compilation (993be7d6c6 by @fabriziocucci)

Fixed

  • Metro: Fix the package-exports warning caused by react-native/virtualized-lists importing an unexported React Native subpath (a506ed66cc by @giaBaoJS)

Android specific

  • SurfaceMountingManager: Bump androidx.collection to 1.4.4 to fix view registry entries getting lost (d6a5f159c6 by @pawicao)

iOS specific

  • SwiftPM: Stop autolinking from recreating library package roots on every sync, which broke Xcode builds of apps using libraries that ship their own Package.swift (97cc934dc7 by @chrfalch)

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

14 days ago
MPAndroidChart

MPAndroidChart 4.0.0

MPAndroidChart 4.0 is here: the library rewritten from the ground up in Kotlin, with a Jetpack Compose module. It is the first stable release since 3.1.0.

📖 Guides and documentation: philjay.cc/mpandroidchart · 35 chapters from a first chart to theming, Compose, custom renderers and troubleshooting.

New in 4.0

  • Kotlin first. Properties instead of getter and setter pairs, lambdas for formatters and listeners (chart.onValueSelected { entry, highlight -> }), typed entry payloads, lists instead of arrays. Java callers keep working.
  • Jetpack Compose. The new MPChartCompose module: a composable for every chart type, ChartState to read and drive a chart, and markers written as composables.
  • Animated data changes. animateDataChange(newData) moves every value smoothly to its new one, and animateValue(entry, toY) animates a single value. Every animation takes an onEnd callback, and isAnimating and stopAnimations() are new. In Compose, animateChanges = true animates new data automatically.
  • Empty and loading states. A modern empty state with an outline of the chart type instead of the old yellow text, and isLoading for data that is still on its way. Everything about it can be customized.
  • New styling. Rounded bars and stacked sections, rounded radar corners, a ring around the highlighted point, and highlight lines that can stop at the entry.
  • Robust. Tested against NaN, Infinity, empty data and 100,000 entries, inside RecyclerView and LazyColumn, across rotation and with leak checks. More than 40 reported issues are fixed.

Faster

  • Lines draw about 1.2x faster than in 3.1.0, and bars 1.6x faster with the new isDecimationEnabled, which drops entries that share a pixel column.
  • A zoomed-in bar chart builds only the bars on screen: 2.5 ms per frame with 500 bars in view, whether the data holds 10,000 or 300,000.
  • Line circles that would cover each other are skipped, and crowded candles are thinned out, so 100,000 entries draw in well under a second with default settings.

The performance chapter has all measurements.

Get it

// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        maven("https://jitpack.io")
    }
}

// build.gradle.kts
dependencies {
    implementation("com.github.PhilJay.MPAndroidChart:MPChartLib:v4.0.0")
    implementation("com.github.PhilJay.MPAndroidChart:MPChartCompose:v4.0.0") // only for Compose
}

minSdk 23 · compileSdk 35 (37 for Compose) · Java 17 · Kotlin 2.0 or newer. The getting started guide takes you from here to a first chart.

Upgrading

  • From 3.x: class, package and interface names are unchanged, so imports survive and call sites change. The migration guide and MIGRATION.md cover every step. Projects on the 3.x coordinates keep building untouched.
  • Staying on 3.x? Nothing changes for you. 3.2.0 is the last Java release with every fix from 3.x; coming from 3.1.0 it needs small formatter changes, which its notes list. The code lives on the 3.x branch.
  • From 4.0.0-beta01: scatter shape sizes and ComposeMarker.offset are now in dp, centerTextSizePixels is gone, PieData.dataSet is nullable and LargeValueFormatter.suffix is a list.

CHANGELOG.md lists every change. Thanks to everyone who reported issues and sent pull requests over the years.

14 days ago
MPAndroidChart

Version 3.2.0

The last release of the Java 3.x line. It packages everything merged into master since 3.1.0 as a stable, pinned version.

implementation 'com.github.PhilJay:MPAndroidChart:v3.2.0'

Same coordinates as before, Java API, minSdk 14.

Should you upgrade?

  • On master-SNAPSHOT or a recent master commit: yes, switch to v3.2.0 now. It is exactly the code you use today, and master moves to the Kotlin rewrite with 4.0.0.
  • On 3.0.x: yes. The formatter API is the same as in 3.0.x, and you get the fixes and additions below.
  • On 3.1.0: only if you are ready to adjust your formatters. 3.2.0 goes back to the formatter interfaces of 3.0.x, so code that extends ValueFormatter no longer compiles (see below). Staying on 3.1.0 is fine, and 4.0.0 is the way forward.

Breaking changes compared to 3.1.0

  • ValueFormatter is gone. Implement IValueFormatter for values and IAxisValueFormatter for axes instead, as in 3.0.x:
    xAxis.setValueFormatter((value, axis) -> "M" + (int) value);
    dataSet.setValueFormatter((value, entry, dataSetIndex, viewPortHandler) -> value + " kg");
  • PercentFormatter(PieChart) is replaced by new PercentFormatter() together with pieChart.setUsePercentValues(true).
  • Gradients moved to bars. setGradientColor(start, end) and setGradientColors(...) now live on BarDataSet, where setGradientColors takes Fill objects; getGradientColor() becomes getFill(index).
  • IPieDataSet.isUsingSliceColorAsValueLineColor() is now isUseValueColorForLineEnabled().
  • Custom renderers: drawValue receives the formatter and entry again: drawValue(Canvas, IValueFormatter, value, entry, dataSetIndex, x, y, color).

New

  • Fill for bar colors: solid colors, gradients and drawables, via BarDataSet.setFills(...). GradientColor remains as a deprecated subclass of Fill.
  • Combined charts: highlightValue(x, dataSetIndex, dataIndex) highlights an entry inside one of the combined data objects.
  • Pie charts: PieDataSet.setHighlightColor(...), and setUseValueColorForLine(true) to draw each value line in its slice color.
  • Axes: setAxisMinLabels / setAxisMaxLabels to change the allowed label count range, and YAxis.setLabelXOffset(...).
  • Drawing: setClipDataToContent(false) lets data draw outside the content rectangle.
  • No data text: setNoDataTextAlignment(...) aligns it left, center or right.
  • Data sets: getEntries() / setEntries() replace getValues() / setValues(), which stay as deprecated aliases.
  • Filtering: ApproximatorN.reduceWithDouglasPeucker(points, resultCount) reduces a line to a target number of points.

Fixed

  • A crash with solid colors in bar charts (#4802).
  • An index out of bounds crash in stacked bar charts.
  • Axis labels that disappeared while zooming in, and a race around the label interval.
  • A pie slice without highlight enabled was hidden when highlighted.
  • An unexpected dashed line during linear line animations.
  • Bubbles drawn with the color of the wrong entry, and the wrong axis used for legend spacing in horizontal bar charts.
  • The axis dependency is now respected in combined charts, and horizontal bar charts get correct negative offsets.
  • onChartScale is now called after a double tap zoom.
  • The legend height now includes its last line of labels.
  • Clearing a data set now resets its min and max.
  • The project builds with current Android Studio versions (#5456).

What's next

MPAndroidChart 4.0.0 follows right after this release: a complete rewrite in Kotlin with a Jetpack Compose module, new coordinates and extensive guides at philjay.cc/mpandroidchart. Projects on 3.x are not affected until they choose to migrate, and the migration guide walks through every step. The 3.x code stays available on the 3.x branch.

Thanks to everyone who contributed fixes and features to 3.x: @danielgindi, @oatrice, @duchampdev, @UrielFrankel, @nathan-fiscaletti and many others.

14 days ago
fresco

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) (d74afa8eb22518830776f75e2a864d83e421aecb)
  • Adds a ProducerFactory.newBitmapMemoryCacheKeyMultiplexProducer overload that accepts an explicit CacheKeyFactory, allowing delegated cache requests to be multiplexed with their own cache-key factory (c361d615c1200c46c1d8c0163cfae97d8221427e)
  • Adds exact-key removal for memory caches and introduces UnifiedEncodedMemoryCache; Fresco's encoded-memory-cache producer now uses the shared cache boundary (745298f652d28ce219043977cdb9412af17d57ac, 53dc796565b8ad3902c8e2e304cadc0c47a175ba)
  • Generalizes EncodedCountingMemoryCacheFactory to create caches for custom encoded value types through a ValueDescriptor (53dc796565b8ad3902c8e2e304cadc0c47a175ba)
  • Adds a Vito warning when a CloseableBitmap has a null underlyingBitmap, helping diagnose images that may already be closed (028280873e8bfc554d6fa776215927aedadf4bbc)

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 use com.android.legacy-kapt instead of kotlin-kapt. Source-build automation or patches that depend on the previous wrapper or plugin IDs must be updated (d74afa8eb22518830776f75e2a864d83e421aecb)

Full Changelog: https://github.com/facebook/fresco/compare/v3.8.0...v3.9.0

17 days ago
fresco

v3.8.0

Highlights

  • Adds an encoded-image request transformation hook and makes disk-cache write producer creation overridable (58ac45fa33e37b9ac1521a9124b783a6144582d7)
  • Adds EncodedImageDimensionsDecoder and a registry for custom image-dimension decoding (b0742d60175f8dc799169daf01ebff673ad101fc)
  • Adds MultiPostprocessor for applying multiple postprocessors in sequence (ddc1db1f2707445e17fced4c303bd3bbd6a2b4fe)
  • Adds EmptyImageSource.isExpectedEmpty so intentional empty Vito sources can retain their placeholders without reporting failures (0b0bc9dadb3835edcccec2c579a0d9e4ce0f55a5, d8380341736fdcc0e89e82b23e2adc2babfb3617)
  • Lets custom producer-sequence factories handle decoded HTTP(S) requests and encoded network prefetches (793dabcffca074797603aff5d0ac475191fef4ac, 6bcf6e3fb166bfdf8204a07a31cdad8da9dfea9c)
  • Adds framework-neutral cache-key generation with UnifiedCacheKeyGenerator (f650f5d18c5fc407200ef481a7ec803bbc8bc7b1)
  • Adds request creation from complete SingleImageSource instances and request-based cache eviction that honors custom cache keys (7bf53dff1cc146c2cd2681399ec0a4f8bbce1f53, 8366d2701fa71b674704f3e53aad76afb49caeed)
  • Adds opt-in streaming image decoding with byte- and time-based partial-result throttling (9e2b4595ad1d8f228c36c5fba993b270efe6133a, f2d88bbb48552450fe368c3f2e2846fd4272ffcd)
  • Adds an option to keep the progress indicator visible while intermediate Vito images are displayed (624a167075555f63b38e3a1f72cf9ade74fb9d56)
  • Exposes the configured memory-chunk pool through PoolFactory.getMemoryChunkPool (06140ac8a11678cec7aea4d0262505fbd42a1e2a)
  • Adds PrefetchData and prefetch telemetry plumbing (936699641f3cf8b306eaa62265724e0d8aefc0ed)
  • Reduces final-image latency by letting completed decode results bypass the progressive-decode interval (02414e429ec1df1c3a2a633f6e206d8361034c85, e0ecb758083bcfcc3e19aadc41780a7b3333dca9)
  • Supports building the OkHttp backend against both OkHttp 3.x and 4.x (288a34c60a35d2d99912d43e2b6559af1e3fa61e, bc35d331f1646dcb00b7876e4daa9b48055e5413)
  • Fixes an Android 16 null dereference when creating the default Vito drawable factory (7b7b29a3b325126c538b044d1d7afc49cc4c53f1)
  • Hardens native WebP decoding against invalid dimensions, oversized canvases, negative lengths, and unsafe byte-array ranges (a160b3b1bbfb3f4032bd2efc423e37f637be215b, 1566dd8f87a637907cc42cf13a5faefa8f46ea90)
  • Fixes recycled-bitmap rendering in Vito (41905be2a1cdf43a466a2623ae48165bdc25eb04)
  • Fixes races and invalid-dimension handling in on-demand animations (762ed58dcf6f97f71cf4fabc820e06ea210bb880, b57c87456345409ee144def24da82667a6aaa30f)
  • Fixes concurrency-related null dereferences in request listeners and Vito image tracking (2baa5d40651f8881f5982fd6ab11789baeac32d9, c6620d772e0e4fad72429a0db986508bb3a30bb6)
  • Fixes source builds with JDK 25 and aligns the OSS Gradle build with Kotlin 2.2 (288cdbb6870c7ffd2f6ff9ae714c9fbd63524383, c90d7f069174259d6d4567e04dd9f78b07dc1c8c, 0209f2496f362d2380437f1e3a6ef220fe76410b, 15df97e435f104f80b6ab8cabdc614e1b39d63de)

Breaking

Method signature changes:

  • Changes ProducerFactory.newDiskCacheWriteProducer to return Producer<EncodedImage> instead of DiskCacheWriteProducer (58ac45fa33e37b9ac1521a9124b783a6144582d7)

Removed classes and options:

  • Removes EfficientPlatformDecoder, EfficientRawBitmapDecoder, DecodeValidationUtils, and the PlatformDecoderOptions.useEfficientDecoder and useBitmapFactoryDecoder options (d7ed19ab1705c63d4bed185d0efb990cb3f9833f, 5bc48b675f5cc3715d71ccd1009d03447df54f8c, d4f73938ace28184415aed5bdda915901aac2e5d)

Kotlin migration changes:

  • Makes MatrixDrawable and RoundedBitmapDrawable final and makes several previously overridable FadeDrawable methods final (f60d58d71149ab007be7d76d5b9c0fada650dfc2, dc82282e214b331d24b926ae6965f3a982a1cff7, 9926a960d86d3ad6097ca2ef362e0b8518690ac1)
  • Makes StreamUtil and UriUtil singletons; their static operations remain available, but construction and subclassing are no longer supported (e708aed9aa6f6d440a18b62d838a423d44283d77, 5f2b04b83d93833dd302322b50aeca40bd845b73)
  • Makes NativeJpegTranscoderFactory final and NativeJpegTranscoderSoLoader a singleton (f69ccbc66bafe6b64b6301142ca0f5739e1c7a0f)
  • Changes selected Kotlin getter calls on FrameScheduler, GifFrame, and WebPFrame to property access (d30727c402a6f9c5b8e03add5ced46abb80484de, 0f7acde029049f8e5864dbba2fef66fab501301b, 0266179cb9bfe420d8d434043c0989f3e43cf61a)

Behavioral changes:

  • Cache-only decode misses now report errors; cancelDecodeOnCacheMiss no longer changes this behavior (0e7644ef410164bb7a3d2b8d2f28c6af3d50ff0f, 762ed58dcf6f97f71cf4fabc820e06ea210bb880)

Full Changelog: https://github.com/facebook/fresco/compare/v3.7.0...v3.8.0

18 days ago
react-native

0.88.0-rc.2

Changed

  • Metro: Bump the minimum Metro version to 0.87.1, so upgrading projects resolve the same Metro as freshly created ones (f2439a83cf by @robhogan)

Fixed

  • TurboModules: Revert the RCTArrayBuffer codegen change, restoring NSMutableData * for ObjC TurboModule methods that take or return an ArrayBuffer. 0.88 is a non-breaking release, and the change stopped modules that adopted ObjC ArrayBuffer support in 0.87 from compiling (639cdedb50, 19a3184981 by @fabriziocucci)
  • TurboModules: Revert the rejection of ArrayBuffer as a TurboModule EventEmitter payload. C++ TurboModules could declare EventEmitter<ArrayBuffer> in 0.87 and it generated working code, so rejecting it at codegen time broke those builds (070af03ab3 by @fabriziocucci)
  • TypeScript: Restore the .js fallback for legacy deep imports of untyped modules, so react-native/Libraries/* specifiers resolve again under the react-native-legacy-deep-imports condition (579212e15c by @fabriziocucci)

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.