首页 > 解决方案 > 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.androidaapt2

解决方案


我使用本机非 Xamarin 应用程序测试了 aar 文件,没有引起我注意的任何问题,这使我得出结论,Xamarin 应用程序的构建方式可能会破坏某些东西。

尽管如此,修复(或者如果你想要的解决方法)看起来像这样:

  1. 将 aar 重命名为 zip 并解压缩。
  2. 搜索丢失的资源。就我而言,parking_slot
  3. 将缺少的资源复制到您的应用程序项目中

我认为这是因为 Android 后备系统的工作方式。


推荐阅读