Xamarin.Android.Support.Design导致应用启动崩溃,寻求解决方案
解决Xamarin.Android.Support.Design引发的资源找不到启动异常
最近我碰到个挺闹心的问题:在Windows上用Visual Studio Professional 15.6.6新建了一个全新的Android项目,通过NuGet安装好Xamarin.Android.Support.Design之后,往Android 8的BLU Vivo XL3设备上部署运行,结果应用直接启动失败,还抛出了这么个异常:
Android.Content.Res.Resources+NotFoundException: File res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha9.png from xml type layout resource ID #0x7f020000
后来我升级到Visual Studio Professional 15.7.1再测试,结果还是一模一样的报错。折腾了好一阵,整理出几个可行的解决办法,分享给大家:
实用解决步骤
- 统一所有Support库版本:这是最常见的原因!Xamarin的各类Support库版本必须完全一致,不能有版本不匹配的情况。打开NuGet包管理器,检查所有带
Xamarin.Android.Support.前缀的包,把它们全部更新到同一个稳定版本,确保和你安装的Xamarin.Android.Support.Design版本完全对齐。 - 清理重建项目:有时候项目缓存的资源文件会出问题,先右键项目选择
清理,接着点击重建解决方案,完成后再尝试重新部署到设备上,很多时候缓存问题就这么解决了。 - 检查并补充缺失资源:如果统一版本后还是报错,可以手动检查项目的
Resources/drawable相关目录,确认abc_ab_share_pack_mtrl_alpha9.png这个文件是否存在。要是确实缺失,可以从对应版本的Support库安装目录里复制该文件过来,或者彻底卸载再重新安装一次相关的NuGet包。 - 升级Visual Studio到最新稳定版:15.6和15.7版本相对比较老旧,Xamarin在后续的版本里修复了不少兼容性和资源加载的bug,升级到最新的稳定版Visual Studio大概率能解决这个问题。
- 调整应用配置优化资源加载:有些设备对高密度资源的加载有特殊处理,可以尝试在项目的
AndroidManifest.xml里给application标签添加android:hardwareAccelerated="true"或者android:largeHeap="true"属性,优化内存和资源加载的逻辑。
另外还要注意,要是你的项目里还用到了Xamarin.Forms,一定要确保Xamarin.Forms的版本和Xamarin.Android.Support.Design的版本是兼容的,不能只单独更新某一个包,版本不匹配很容易引发这类资源异常。
内容的提问来源于stack exchange,提问作者William Jockusch
相关产品推荐
相关产品推荐

