C# Xamarin构建错误编译可以';无法完成,因为缺少某些库类
当我尝试构建我的Xamarin.Droid项目时,我得到以下构建错误:C# Xamarin构建错误编译可以';无法完成,因为缺少某些库类,c#,android,xamarin,C#,Android,Xamarin,当我尝试构建我的Xamarin.Droid项目时,我得到以下构建错误: 2>R8 : warning : Missing class: java.lang.ClassValue 2>R8 : error : Compilation can't be completed because some library classes are missing. 我每天都会犯这个错误。。。有没有办法找到需要java.lang.ClassValue的地方,或者手动添加它 编辑: 我做了一些研究,
2>R8 : warning : Missing class: java.lang.ClassValue
2>R8 : error : Compilation can't be completed because some library classes are missing.
我每天都会犯这个错误。。。有没有办法找到需要java.lang.ClassValue的地方,或者手动添加它
编辑:
我做了一些研究,得到了一些新的信息:当我在另一台机器上构建解决方案时(我这里是Microsofts AppCenter),它构建起来没有任何问题。所以我认为我的解决方案很好,也许android sdk或jdk有问题。
所以我创建了一个新的Xamarin.Forms项目并构建了android部分,该部分工作起来没有任何问题。所以android sdk或jdk看起来不错。这并不是一个确切的解决方案,但它可能会为您指明正确的方向。我目前收到这条消息是由于我们自己维护的绑定Android库。当我从项目中删除NuGet时,消息将消失,代码将编译。显然,我也不能使用这个库来利用程序的功能,但至少看起来这个库导致了这个问题。。。你的情况可能也是这样吗
是什么为我解决了这个问题 在我知道哪个库导致了问题之后,我决定使用我专门为测试该库而编写的一个演示应用程序进一步深入研究它。从这里我发现,启用d8索引或r8代码收缩以及多重索引是导致问题的原因。您可以使用或,因此:
- 打开代码收缩器选项,如ProGuard或r8,并使用d8索引
- 对于多重索引,使用d8索引和可选的代码收缩器
更好的修复方法 今天,有人向我指出了另一组可能的修复方法。本页实际上提到了三个修复方案,其中选项B是首选方案,因为这与“来自的上游建议”(引用自)一致 对我来说,选项A——恢复到dx索引——并没有很好地工作,因为尽管我能够删除与java.lang.ClassValue相关的警告,但我得到了一大堆其他警告。在这方面,使用ProGuard规则和R8组合使用的选项B是一个更好的选择,因为这使我也可以消除所有其他警告。事实上,尽管如此,这消除了选项B和C之间的差异,因为它们的结果因此变得相同。然而,仅仅按照本文中的建议,我的应用程序在发布时就开始崩溃。为了解决这个问题,我必须检查Logcat中的错误,它向我显示了一个需要链接的类。添加另一个规则以显式保留该类,然后最终解决了问题的其余部分,并给出了以下ProGuard配置:
-dontwarn java.lang.ClassValue
-dontwarn kotlin.jvm.internal.Lambda
-dontwarn kotlin.jvm.functions.Function1
-dontwarn kotlin.jvm.internal.markers.KMappedMarker
-dontwarn kotlin.jvm.functions.Function0
-dontwarn kotlin.coroutines.jvm.internal.SuspendLambda
-dontwarn kotlin.jvm.functions.Function2
-keep class com.google.android.material.internal.BaselineLayout
通过这种配置,我现在可以再次使用AOT和LLVM。我搜索一些信息,然后找到,将Dex编译器设置为dx进行尝试。我已经做好了准备。它没有改变什么。。。