启用链接时未构建的 Xamarin Forms 发布版本的 Android



我有一个 Xamarin Forms 解决方案,它可以在面向调试模式的同时为所有项目成功生成。

当我切换到目标版本时,我可以成功构建iOS项目,但无法构建Android项目。

我已经能够将其缩小到是启用还是禁用"链接"。当链接设置为无时,我可以在发布中构建。一旦我尝试使用链接到设置为"仅 sdk 程序集"的发布版本,构建就会出现问题,即没有错误只是挂起,要求我在任务管理器中杀死 MSBUILD。

这已经在不同机器上的许多版本的Visual Studio上进行了尝试。 Xamarin 窗体版本:4.4 目标安卓版本:9.0

如何在启用链接的情况下将其构建在发行版中?

谢谢

这似乎是一个类似于以下问题:

Xamarin Android 构建在启用链接器时挂起

解决方案是删除项目文件中对可为空的引用类型(启用(的显式支持。

可以在您自己的项目文件中删除此支持,但如果引用的第三方库具有它,则可能不走运。将此类库更新到最新版本,如果仍然没有帮助,唯一的选择是禁用链接。

问题是与android链接器和上述可空引用支持不兼容,在某些情况下,在最新的视觉工作室中。这将在即将发布的 Visual Studio 版本中修复,并且已在预览版中提供。如果您可以选择使用VS 2019的预览版本,那么这也将起作用。

通常您应该会看到链接错误,但是在使用Firebase为Android构建发布模式时,我遇到了类似的问题。如果链接仅针对 SDK 程序集,则应签入 Android 项目属性。如果这个没问题,请尝试在调试模式下设置链接程序集,然后运行应用程序。如果您在输出窗口中遇到链接错误,请记下它们。现在的下一步是为 proguard 设置其他配置文件。将 proguard.cfg 文件添加到您的 Android 项目中,并确保将"构建操作"设置为"ProguardConfiguration"。配置 proguard 以保留给出链接错误的类。

修复常见链接错误的 proguard 配置示例:

-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-keep class org.apache.http.** { *; }
-keep class org.apache.** { *; }
-dontwarn org.apache.**
-dontwarn org.apache.http.**
-dontwarn org.apache.commons.**
-keep class android.support.v7.widget.** { *; }
-dontwarn android.support.v7.widget.**
-keep class android.support.v4.widget.Space { *; }
-dontwarn android.support.v4.widget.Space
-dontwarn com.google.android.gms.**
-keep class com.google.android.gms.** { *; }

最新更新