求助: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链接加载的,直接就会被系统拦截,这是最常见的原因:
- 在
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> - 在
AndroidManifest.xml的<application>标签里添加配置:
要是你的SVG链接是HTTPS的,这步可以跳过,优先建议把HTTP换成HTTPS更安全。android:networkSecurityConfig="@xml/network_security_config"
三、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
相关产品推荐
相关产品推荐

