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

求助:Android 9版本无法加载SVG图片,Glide等库低版本正常

解决Android 9中SVG图片无法显示的问题

我之前也踩过Android 9加载SVG的坑,结合你提到的用Glide、Picasso、Sharp在低版本正常但Android 9失效的情况,大概率是API 28引入的网络安全配置变化或者库版本没跟上系统更新导致的,给你几个针对性的解决思路:

一、先把用到的库升级到适配Android 9的版本

老版本的图片加载库可能没处理Android 9的新特性,先确保依赖是最新稳定版:

  • Glide+SVG:要搭配glide-svg扩展,Glide版本至少4.9.0以上才对API 28有更好的适配,gradle依赖示例:
    implementation 'com.github.bumptech.glide:glide:4.16.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
    implementation 'com.caverock:androidsvg-aar:1.4'
    implementation 'com.github.bumptech.glide:svg:4.16.0'
    
  • Picasso:Picasso本身不支持SVG,需要额外的SVG扩展库,记得同步升级Picasso和扩展的版本
  • Sharp:直接替换为仓库中的最新稳定版依赖

二、解决网络SVG的明文请求限制(重点!)

Android 9开始默认禁止明文HTTP请求,如果你的SVG是从HTTP链接加载的,直接就会被系统拦截,这是最常见的原因:

  1. 在res/xml目录下创建network_security_config.xml,内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
            </trust-anchors>
        </base-config>
    </network-security-config>
    
  2. 在AndroidManifest.xml的<application>标签里添加配置:
    android:networkSecurityConfig="@xml/network_security_config"
    
    要是你的SVG链接是HTTPS的,这步可以跳过,优先建议把HTTP换成HTTPS更安全。

三、Glide加载SVG的适配代码调整

如果用Glide,确保你正确注册了SVG解码器,尤其是自定义Application的场景:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 注册SVG解析器
        Glide.get(this).register(SVG.class, PictureDrawable.class, new SvgDrawableTranscoder());
        Glide.get(this).getRegistry().register(SVG.class, new SvgDecoder(this));
    }
}

加载代码也要对应调整成处理PictureDrawable的方式:

Glide.with(context)
     .load("你的SVG链接或本地路径")
     .into(new SimpleTarget<PictureDrawable>() {
         @Override
         public void onResourceReady(@NonNull PictureDrawable resource, @Nullable Transition<? super PictureDrawable> transition) {
             imageView.setImageDrawable(resource);
         }
     });

四、本地SVG的排查要点

如果是assets或res里的本地SVG,检查这几点:

  • 文件路径是否正确,比如assets下的SVG是不是放在assets/svg/这样的目录,加载时路径有没有写错
  • SVG文件本身有没有损坏,比如用浏览器打开看看能不能正常渲染
  • Sharp加载本地SVG的话,确保代码是这样的:
    Sharp.loadAsset(context, "svg/your_file.svg")
         .into(imageView);
    

五、排查WebView的影响

部分SVG加载库依赖系统WebView来解析,Android 9的WebView版本更新可能带来兼容性问题,你可以尝试更新设备的WebView,或者在代码中强制使用最新的WebView实现(比如启用Android System WebView的自动更新)。

先从库版本和网络配置这两点入手,这是Android 9 SVG加载失败的最常见原因,要是还不行,再检查代码实现和本地文件的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:46:22