当构建Xamarin.Android项目时,会在输出窗口中写到apt2由于缺少默认值而删除了资源。
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下的ar-文件和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:
缺少的资源parking_slot不在drawable文件夹中,而是在drawable-xhdpi-v4中。为了检查这个问题,我将ar改名为zip并解压。
然后我把parking_slot复制到drawable文件夹中,再压缩并重新命名为ar。现在,构建过程中没有出现apt2警告。然而应用程序又崩溃了。
Java.Lang.NoClassDefFoundError: 'Failed resolution of: Lcom/company/sample/R$drawable;'
我用原生的非Xamarin应用测试了aar-文件,没有发现任何问题,这让我得出结论,Xamarin应用的构建方式可能有问题。
尽管如此,修复方法(或者说你想要的变通方法)是这样的。
我认为这是因为安卓系统回退系统的工作方式。