You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SDK 35中BitmapFactory.decodeStream()不再支持GIF?求解决方案

Android 35+ 中 BitmapFactory.decodeStream() 处理GIF返回null的问题解析

问题本质

Android 35(API Level 35)及以上版本中,BitmapFactory.decodeStream() 对 image/gif 类型文件返回null,这是预期变更——属于Android平台对图片解码逻辑的规范调整。此前该方法会隐式处理单帧GIF并返回Bitmap,但从API 35开始,系统严格区分静态图片(如PNG/JPG)和动态图片(如GIF/WebP动图)的解码路径,BitmapFactory 不再负责解码GIF格式内容,无论是否为单帧。

对第三方库的影响

包括Picasso在内的多个图片加载缓存库,因依赖 BitmapFactory.decodeStream() 处理图片流,在API 35+设备上加载GIF时会出现解码失败,尤其是单帧GIF这类此前能正常处理的资源。

最佳规避方案

提取GIF首帧是可行方案之一,但更推荐以下两种适配性更强的方式:

  • 升级图片加载库:使用适配API 35解码逻辑的新版本库,比如Picasso的后续更新版本(若已完成适配),或切换到Glide、Coil等对动态图片解码支持更完善的库——这类库内置独立的GIF解码逻辑,不依赖系统BitmapFactory处理GIF。
  • 手动处理GIF解码:若需继续使用旧版库或自定义解码逻辑,可借助android.graphics.gif.GifDecoder类(API 28+引入)解析GIF流并提取首帧Bitmap:
    val inputStream = ... // GIF文件输入流
    val gifDecoder = GifDecoder()
    gifDecoder.read(inputStream)
    val firstFrameBitmap = gifDecoder.getFrame(0)
    // 使用Bitmap后记得按需回收
    

注:你提到的示例资源为单帧GIF,在API 35前可被BitmapFactory解码,现在需通过上述方式处理。

内容的提问来源于stack exchange,提问作者alexgophermix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:29:53