问题标签 [xamarin-linker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
630 浏览

xamarin.android - Xamarin.Android 链接问题——错误处理方法 System.String

我有一个 Xamarin Android 应用程序,它可以在 DEBUG 模式下编译并运行良好,但不会在 RELEASE 模式下编译。

我得到的错误是:

我已经为 Microsoft.CodeAnalysis.Workspaces.dll 尝试过“跳过链接”

我已经为 SQLitePCLRaw.core 尝试过“跳过链接”

上述“跳过链接”尝试都没有解决问题。如果我将 Linking 设置为“None”,则该应用程序可以正常编译,但不建议在 RELEASE 模式下这样做。

任何帮助将不胜感激。

2021 年 2 月 22 日 - 我在构建输出上调高了详细程度并搜索了 System.String。这是我发现的:

0 投票
0 回答
979 浏览

ios - Xamarin iOS Release Build - 本机链接失败

我无法构建我的 Xamarin iOS 项目。

有用:

  • 在使用物理设备的调试模式下
  • 在使用模拟器的调试模式下
  • 使用模拟器处于发布模式

但它不会工作:

  • 在物理设备的发布模式下!

我试过了:

  • 所有链接器行为:没有成功
  • 删除 obj 和 bin 文件夹并重建:没有成功
  • 删除 Library/Caches/mtbs/builds/ 并重建:没有成功
  • 降级 Visual Studio:没有成功
  • 将 --registrar:dynamic 添加到 mtouch 参数:没有成功

NuGet 包:

错误:

截图:

关于 Visual Studio

项目选项

找到解决方案感谢@steven:

https://github.com/xamarin/xamarin-macios/issues/10884#issuecomment-803450479

0 投票
1 回答
209 浏览

xamarin - 如何正确排除某些库,以便它们不在 Xamarin.Android 中链接?

我有一个运行良好的应用程序,但由于我无法链接库(因为它会导致异常行为),它变得明显更大(多 20 MiB)。主要问题发生在我自己的一个库中:

https://www.nuget.org/packages/Xamarin-MaterialSearchBar/

我“排除”了包及其依赖项:

Xamarin.AndroidX.AppCompat;Xamarin.AndroidX.ConstraintLayout;Xamarin.AndroidX.RecyclerView;Xamarin.AndroidX.CardView

但是“链接”选项的行为很奇怪,因为它们不被排除在链接全部或仅链接 SDK 的情况下。动画不知何故变得疯狂,它们以“特定”的方式工作,汉堡菜单在不应该的时候变成箭头,反之亦然,如果我点击 X,它只会永远删除 X 并且不会干净。下图可以让您了解异常行为

预习

当我不链接任何东西时,这是预期的行为和正常情况:

预习

该应用程序仅在我使用Don't Link时才能正常工作。但是,我想了解我必须排除什么(或如何正确执行)或更改以避免此问题。此时,我尝试在 ProGuard 文件、“排除”部分等中排除它,但没有任何效果。

在我的 ProGuard 文件中,我有以下组合:

我还尝试添加:

但结果完全一样。我不知道我可以排除什么是诚实的。任何想法?

PS:

我可以创建要发布的包,这不是我的问题。

如果您想就如何更改此逻辑并解决此问题给我任何建议,我的库是开源的:

https://github.com/FANMixco/Xamarin-SearchBar

重要的是要强调我用 C# 和 Xamarin 编写了这个库。这不是另一个约束。

在我看来,这个问题发生在这个部分:

更新1:

我已添加到我的库中:

[Preserve(AllMembers = true)]

[assembly: LinkerSafe]

这对我的项目:

--linkskip=tk.supernovaic.MaterialSearchBar

并且错误仍然存​​在;因此,它应该与动画库或类似的东西有关。

更新 2:

我也试过:

-keep class android.animation.ObjectAnimator.** { *; } -keep class **.R$* { public static <fields>; }

和:

-keep class android.animation.** { *; }

两者都仍然失败,但似乎与动画有关:

https://github.com/FANMixco/Xamarin-SearchBar/blob/master/tk.supernovaic.MaterialSearchBar/Resources/animator/menu_to_back_rotation.xml

另外,我添加了--linkskip=android.animation --linkskip=tk.supernovaicMaterialSearchBar没有任何结果。

更新 3:

我将文件从我的 lib 复制到我的项目中,并保留了所有以前的规则,但没有任何积极的结果。

更新 4:

我更新了我的库和应用程序,并在名为raw的资源中添加了一个新文件夹,其中包含带有以下代码的keep.xml :

并添加到我的 ProGuard:

这一切都没有任何积极的结果。该错误仍然存​​在。

更新 5:

我向 Microsoft 提出了一张票,因为我几乎确信这是与链接器本身相关的错误:

https://developercommunity.visualstudio.com/t/xamarinandroid-linking-libs-not-working-as-expecte/1482147?from=email

我的结论基于以下三点:

  1. 我将原始文件(动画)添加到项目中。
  2. 我添加了一条规则以将 XML 保留在项目和库中。
  3. 我添加了规则来保留 ProGuard 文件中的 R 类和所有内容(资源)。

在我看来,没有保留前 3 点的动画是没有意义的。如果您有任何其他想法,请随时分享,我愿意倾听。

更新 6:

我还在 GitHub 上开了一张票,因为我认为这是一个错误:

https://github.com/xamarin/xamarin-android/issues/6156