xamarin.android - aapt2 删除资源 * 不需要默认值
问题描述
在构建 Xamarin.Android 项目时,它会在输出窗口中写入 aapt2 由于缺少默认值而删除了资源。
Xamarin.Android.Aapt2.targets(160,3): warning APT2000: warn: removing resource com.companyname.demo_app:drawable/parking_slot without required default value.
删除的资源是 Xamarin.Android 绑定项目的一部分,并且还包含在 drawables 下的 aar 文件和 R.txt 中。
因为它只是构建输出中的一个日志语句,所以项目构建并且可以启动应用程序。但是当使用绑定项目的一部分时,会抛出以下错误:
Java.Lang.NoSuchFieldError: 'No static field parking_slot of type l in class Lcom/company/sample/R$drawable; or its superclasses (declaration of 'com.company.sample.R$drawable' appears in /data/app/com.companyname.demo_app-Ab0cDefG==/base.apk)'
是什么导致资源被移除,如何防止?
编辑1:
缺少的资源 park_slot 不在 drawable 文件夹中,而是在 drawable-xhdpi-v4 中。为了检查这一点,我将 aar 重命名为 zip 并将其解压缩。
然后我将它的parking_slot 复制到drawable 文件夹,压缩并再次将其重命名为aar。构建现在没有 aapt2 警告。然而,该应用程序再次崩溃:
Java.Lang.NoClassDefFoundError: 'Failed resolution of: Lcom/company/sample/R$drawable;'
解决方案
我使用本机非 Xamarin 应用程序测试了 aar 文件,没有引起我注意的任何问题,这使我得出结论,Xamarin 应用程序的构建方式可能会破坏某些东西。
尽管如此,修复(或者如果你想要的解决方法)看起来像这样:
- 将 aar 重命名为 zip 并解压缩。
- 搜索丢失的资源。就我而言,parking_slot
- 将缺少的资源复制到您的应用程序项目中
我认为这是因为 Android 后备系统的工作方式。
推荐阅读
- asp.net-mvc-5 - 从使用 epplus 生成的不是网格线的 excel 中删除不需要的水平蓝线
- powershell - 逐行检查文件内容
- tensorflow - 更改 vggface 预保留模型的输入大小
- angular - 当我更新了角度版本 7.0 -> 8.0。不更改 tsconfig.json 文件上的目标
- spring - 注释@Value 在我的服务中不起作用
- python-3.x - 加快移动平均计算
- node.js - 如何在后端发送的前端中获取贝宝结帐链接
- python - 在图中查找循环会导致空数组
- node.js - npm install 不下载最新的包
- java - JavaFX 组合框应该何时触发其 onAction?