我有一个Xamarin Forms解决方案,可以在调试模式下针对所有项目成功构建。
当我切换到目标发行版时,我可以成功构建iOS项目,但是无法构建Android项目。
我已经能够将其范围缩小为启用或禁用“链接”。当链接设置为无时,我可以在发行版中进行构建。一旦我尝试将发布版本链接到设置为“仅SDK程序集”的发布版本,该版本就会变得微不足道,即没有错误挂起,要求我在任务管理器中杀死MSBUILD。
已在不同计算机上的许多版本的Visual Studio上尝试过此操作。Xamarin表格版本:4.4目标Android版本:9.0
如何在启用链接的情况下将其内置到发行版中?
谢谢
这似乎是一个类似的问题:
Xamarin Android build just hangs when linker is enabled
解决方案是删除项目文件中对可空引用类型(启用)的显式支持。
可以在您自己的项目文件中删除此支持,但是如果引用的第三方库具有此支持,您可能会不走运。将此类库更新为最新版本,如果仍然没有帮助,唯一的选择是禁用链接。
问题是在最新的Visual Studio中有时与android链接器和上述可为空的参考支持不兼容。此问题将在Visual Studio的即将发布版本中修复,并且已在预览中提供。如果您可以选择使用VS 2019的预览版,那么它也将起作用。
通常,您应该会看到链接错误,但是在具有Firebase的Android发布模式下进行构建时,我遇到了类似的问题。如果链接仅针对Sdk程序集,则应签入Android项目属性。如果可以,请尝试将链接程序集设置为调试模式,然后运行应用程序。如果在输出窗口中遇到链接错误,请记下它们。现在,您的下一步是为proguard设置其他配置文件。将proguard.cfg文件添加到您的Android项目,并确保将Build Action设置为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.** { *; }