Android 的 Xamarin Forms 发布版本在启用链接时未构建
Xamarin Forms Release version of Android not building when linking enabled
我有一个 Xamarin Forms 解决方案,它在针对调试模式时为所有项目成功构建。
当我切换到目标版本时,我可以成功构建 iOS 项目但无法构建 Android 项目。
我已经能够将范围缩小到 "linking" 是启用还是禁用。当链接设置为 none 时,我可以在发布中构建。一旦我尝试将链接设置为 "sdk assemblies only" 的发布版本,构建就会冻结,即没有错误只是挂起,要求我在任务管理器中终止 MSBUILD。
这已经在不同机器上的多个版本 Visual Studio 上进行了尝试。
Xamarin 表单版本:4.4
目标 Android 版本:9.0
如何在启用链接的情况下将其构建到版本中?
谢谢
通常你应该看到链接错误,但我在使用 firebase 为 Android 构建发布模式时遇到了类似的问题。如果链接仅针对 Sdk 程序集,您应该检查 Android 项目属性。如果这个没问题,尝试在调试模式和 运行 应用程序中设置链接程序集。如果您在输出 window 中遇到链接错误,请记下它们。您现在的下一步是为混淆器设置额外的配置文件。将 proguard.cfg 文件添加到您的 Android 项目并确保将 Build Action 设置为 ProguardConfiguration。配置 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.** { *; }
这似乎与以下问题类似:
解决方案是在项目文件中删除对可空引用类型的显式支持(启用)。
可以在您自己的项目文件中删除此支持,但如果引用的第 3 方库有它,您可能就不走运了。将此类库更新到最新版本,如果仍然没有帮助,唯一的选择是禁用链接。
问题是与 android 链接器不兼容,并且在最新的 visual studio 中,在某些情况下上述可空引用支持。这将在即将发布的 visual studio 版本中得到修复,并且已经在预览版中可用。如果您可以选择使用 VS 2019 的预览版,那么这也可以。
我有一个 Xamarin Forms 解决方案,它在针对调试模式时为所有项目成功构建。
当我切换到目标版本时,我可以成功构建 iOS 项目但无法构建 Android 项目。
我已经能够将范围缩小到 "linking" 是启用还是禁用。当链接设置为 none 时,我可以在发布中构建。一旦我尝试将链接设置为 "sdk assemblies only" 的发布版本,构建就会冻结,即没有错误只是挂起,要求我在任务管理器中终止 MSBUILD。
这已经在不同机器上的多个版本 Visual Studio 上进行了尝试。 Xamarin 表单版本:4.4 目标 Android 版本:9.0
如何在启用链接的情况下将其构建到版本中?
谢谢
通常你应该看到链接错误,但我在使用 firebase 为 Android 构建发布模式时遇到了类似的问题。如果链接仅针对 Sdk 程序集,您应该检查 Android 项目属性。如果这个没问题,尝试在调试模式和 运行 应用程序中设置链接程序集。如果您在输出 window 中遇到链接错误,请记下它们。您现在的下一步是为混淆器设置额外的配置文件。将 proguard.cfg 文件添加到您的 Android 项目并确保将 Build Action 设置为 ProguardConfiguration。配置 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.** { *; }
这似乎与以下问题类似:
解决方案是在项目文件中删除对可空引用类型的显式支持(启用)。
可以在您自己的项目文件中删除此支持,但如果引用的第 3 方库有它,您可能就不走运了。将此类库更新到最新版本,如果仍然没有帮助,唯一的选择是禁用链接。
问题是与 android 链接器不兼容,并且在最新的 visual studio 中,在某些情况下上述可空引用支持。这将在即将发布的 visual studio 版本中得到修复,并且已经在预览版中可用。如果您可以选择使用 VS 2019 的预览版,那么这也可以。