gpt4 book ai didi

c# - Xamarin Build Error 编译无法完成,因为缺少一些库类

转载 作者:行者123 更新时间:2023-12-04 04:14:24 28 4
gpt4 key购买 nike

当我尝试构建我的 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 的地方,或者手动添加它?

编辑:我做了一些研究并获得了新信息:当我在另一台机器上构建解决方案时(我在本例中是 Microsoft 的 AppCenter),它构建时没有任何问题。所以我认为我的解决方案很好,可能是android sdk或jdk有问题。所以我创建了一个新的 Xamarin.Forms 项目并构建了 android 部分,它没有任何问题。所以android sdk或者jdk好像没问题。

最佳答案

这并不是一个完全正确的解决方案,但它可能会为您指明正确的方向。由于我们自己维护的绑定(bind) Android 库,我目前收到此消息。当我从我们的项目中删除 NuGet 时,消息消失并且代码编译。显然,我也无法利用使用该库的程序功能,但至少看起来该库导致了问题...可能与您的情况相同?


是什么解决了我的问题

在我知道是哪个库导致了问题之后,我决定使用我专门为测试该库而编写的演示应用程序对其进行深入研究。从这里我发现,启用 d8-dexing 或 r8-code-shrinking 以及 multi-dexing 是导致问题的原因。您可以使用或,所以:

  • 关闭代码压缩器选项,例如 ProGuard 或 r8,并使用 d8-dexing。
  • 转向多重索引,使用 d8-dexing 和可选的代码收缩器。

我的建议是使用后者,就像使用 d8-dexing 一样,你的 dexed 引用表无论如何应该更高效和更小,这意味着你甚至可能不再需要 multi-dexing。

此外,上述分辨率似乎不能很好地与链接一起使用,因此将链接选项设置为“无”。

Mac CI 上的问题

修复上述所有问题后,我在 Mac CI 上尝试编译我们的应用程序时遇到了另一个问题,它告诉我 Mono.Android.dll 无法进行 AOT 编译。显然,这是文件对于 Mac 上的 LLVM 来说太大的问题,但是,如所述here ,解决方案是简单地关闭 LLVM。


更好的修复方法

今天有人向我指出了另一组突出显示的潜在修复 here .该页面实际上提到了三个修复程序,其中选项 B 是首选,因为它符合“来自 the Google Guava library 的上游建议”(引自 this thread)。

对我来说,选项 A - 恢复到 dx-dexing - 不太奏效,因为虽然我能够删除与 java.lang.ClassValue 有关的警告,但我得到了一大堆其他警告。选项 B,使用 ProGuard 规则与 R8 结合使用,在这方面是更好的选择,因为这也让我摆脱了所有其他警告。但事实上,这消除了选项 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。

关于c# - Xamarin Build Error 编译无法完成,因为缺少一些库类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61025129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com