问题标签 [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 投票
1 回答
1256 浏览

ios - 将标准库与 Xamarin 链接

我用 Xamarin 创建了一个简单的绑定项目。绑定项目导入一个静态库MyLibrary.a。它还包含ApiDefinition.csStructAndEnum.cs通过Sharpie工具制作。

现在我有一个链接该绑定项目的 iOS 项目。MyLibrary.a为了工作需要一些框架和库(见下文)。

在此处输入图像描述

为了使其正常工作,我遵循了Xamarin 文档

在 iOS 项目中,我添加了以下内容mtouch arguments(另见附图)。

--cxx -gcc_flags "-L${ProjectDir} -framework CFNetwork -framework SystemConfiguration -framework MobileCoreServices -framework Security -framework AVFoundation -libicucore -libxml2 -libc++ -libzd -libstdc++.6.0.9"

在此处输入图像描述

当我尝试编译时,我总是以构建错误结束。

MTOUCH:错误 MT5209:本机链接错误:找不到 -libicucore 的库 MTOUCH:错误 MT5201:本机链接失败。请查看提供给 gcc 的构建日志和用户标志:-L/Users/tmp/Documents/Projects/Ovp/BindinTest.iOS -framework CFNetwork -framework SystemConfiguration -framework MobileCoreServices -framework Security -framework AVFoundation -libicucore -libxml2 -libc++ -libzd -libstdc++.6.0.9 MTOUCH:错误 MT5202:本机链接失败。请查看构建日志。

有什么线索可以让它工作吗?也许缺少了什么?

先感谢您。

0 投票
0 回答
65 浏览

c# - 为什么在 Xamarin 中使用链接器会减慢发布版本中的应用程序?

在安装应用程序后,在 Xamarin 中使用 Linker 来减小我的 android 应用程序的发布版本的大小。与我在调试模式下调试应用程序时相比,应用程序在发布版本中的运行速度要慢得多。

  • 除了应用程序变慢之外,没有报告错误并且应用程序运行时不会崩溃。

在不使用链接器的情况下创建发布版本不会导致应用程序变慢。

这有点令人困惑,因为我认为 Linker 旨在减少应用程序大小而不影响应用程序性能。

这种情况有解释吗?

0 投票
1 回答
1364 浏览

xamarin - 忽略 Xamarin.Android 链接器中的程序集

尝试使用Link SDK Assemblies Only(一切正常Don't Link)构建应用程序时出现错误

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:错误:执行任务时出错LinkAssemblies:错误XA2006:引用元数据项'System.Void Xamarin.Forms.Element:: set_AutomationId(System.String)' (在'ZXing.Net.Mobile.Forms, Version=2.1.47.0, Culture=neutral, PublicKeyToken=null'中定义)来自'ZXing.Net.Mobile.Forms, Version=2.1.47.0, Culture=neutral, PublicKeyToken=null' 无法解析。(FleetApp.Droid)

我正在尝试在忽略列表中添加导致问题的程序集:

在此处输入图像描述

但我无法让错误消失。这是正确的方法吗?还是我添加了错误的程序集以忽略列表?

PS 还尝试在没有大括号的情况下添加它们。

0 投票
1 回答
742 浏览

xamarin - Xamarin iOS 链接器在 System.Net.Http.Primitives.dll 上失败

在为 Release 构建我的 Xamarin iOS (10.4.0.88) 项目时,仅启用 Link SDK 程序集时出现以下错误。我有 Mono 版本 4.8.0.459

C:\Program Files (x86)\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(694,3):警告:无法将 Aot 文件复制到目标目录 /Users/markmeyer/Library/Caches/Xamarin /mtbs/builds/ServiceOrdersMobileApps.iOS/295315d462497600265210bd6b0fdce2/obj/iPhone/Release/mtouch-cache/64/Build/Msym/Msym/tmp:无法启动进程。1> --- 内部异常 1> System.ComponentModel.Win32Exception (0x80004005): ApplicationName='mono-symbolicate', CommandLine='store-symbols "/Users/markmeyer/Library/Caches/Xamarin/mtbs/builds/ServiceOrdersMobileApps. iOS/295315d462497600265210bd6b0fdce2/bin/iPhone/Release/ServiceOrdersMobileAppsiOS.app.mSYM" "/Users/markmeyer/Library/Caches/Xamarin/mtbs/builds/ServiceOrdersMobileApps。--- 1> 进程以代码 1 退出,命令:1> /Library/Frameworks/Mono.framework/Versions/Current/bin/mono /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.5/ mono-cil-strip.exe /Users/markmeyer/Library/Caches/Xamarin/mtbs/builds/ServiceOrdersMobileApps.iOS/295315d462497600265210bd6b0fdce2/obj/iPhone/Release/mtouch-cache/64/Build/System.Net.Http.Primitives。 dll /Users/markmeyer/Library/Caches/Xamarin/mtbs/builds/ServiceOrdersMobileApps.iOS/295315d462497600265210bd6b0fdce2/bin/iPhone/Release/ServiceOrdersMobileAppsiOS.app/.monotouch-64/System.Net.Http.Primitives.dll 1> Mono CIL剥离器 1> 错误:System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。1> 参数名称:索引 1> 在 System.Collections.CollectionBase.System。/Users/markmeyer/Library/Caches/Xamarin/mtbs/builds/ServiceOrdersMobileApps.iOS/295315d462497600265210bd6b0fdce2/obj/iPhone/Release/mtouch-cache/64/Build/System.Net.Http.Primitives.dll. 1> --- 内部异常 1>C:\Program Files (x86)\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(694,3): 错误:无法剥离程序集/Users/markmeyer/Library/Caches/Xamarin/mtbs/builds/ServiceOrdersMobileApps.iOS/295315d462497600265210bd6b0fdce2/obj/iPhone/Release/mtouch-cache/64/Build/System.Net.Http.Primitives.dll。1> --- 1> 在 /Users/builder/data/lanes/3985/9975cb17/source/xamarin-macios/tools 中的 MonoTouch.Tuner.Stripper.Process (System.String assembly_file, System.String output_file) [0x000ba] /mtouch/Stripper.cs:33 1> 在 /Users/builder/data/lanes/3985/9975cb17/source/xamarin-macios/tools 中的 Xamarin.Bundler.Target.m__2 (Xamarin.Bundler.Assembly 程序集)[0x00065] /mtouch/Target.cs:1041 1> 在 System.Threading.Tasks.Parallel+c__AnonStorey6 2[TSource,TLocal].<>m__0 (System.Int32 i) [0x00012] in <12e050e5b3d34326a1b4e2e7624e75da>:0 1> at System.Threading.Tasks.Parallel+<ForWorker>c__AnonStorey31[TLocal].<>m__1 () [0x000ed] in <12e050e5b3d34326a1b4e2e7624e75da>:0

我有以下额外的 mtouch 参数

-cxx -gcc_flags "-lc++" -v -v -v -v

如果我关闭链接器,一切都会构建并正常工作。我需要链接器才能让我的应用程序获得应用程序商店的批准,因为它会删除我不需要的东西(例如 CallKit)。有什么建议么?

0 投票
2 回答
229 浏览

c# - Xamarin 链接器删除所有构造函数但保留实例方法?

首先,一般注意,Xamarin 所谓的“链接器”实际上更像是“死代码删除器”。它应该防止不可调用的代码进入已编译的应用程序。

我的应用程序中有一个类型。当我使用反射来获取它的构造函数时,我看到零构造函数:

然而,当我使用反射查看它的实例成员时,我看到了很多:

上面的输出是:

这是一个问题,因为该类型是通往许多其他类型的门户。我希望通过摆脱所有构造函数,所有实例成员都会消失。他们没有。

这是链接器中的错误吗?或者它是否仍然不想摆脱实例成员?

我确实通过强制转换访问该类型的成员。也许这就是问题所在?

更新:摆脱所有演员并没有解决问题。我在很多地方都在调用超类对象的虚拟成员;这是我的下一个猜测,但如果这是问题所在,修复将是一团糟。

0 投票
3 回答
244 浏览

xamarin.android - 链接器错误 nach update auf neueste Xamarin Android 库

由于我将我的 Xamarin Forms 项目更新为最新的 Android 库 25.1.1,因此由于此链接器错误,我无法再构建版本

0 投票
1 回答
52 浏览

xamarin - Xamarin mtouch 链接器 ProjectDir 解析为 Windows 不是主机

当使用 mac 代理从 Windows 上的 Visual Studio 构建 iOS Xamarin 项目时,-B ${ProjectDir} 中使用的自定义链接器路径将 ProjectDir 解析为 Windows 而不是主机位置。

唯一的解决方法是手动指定路径,但这非常不方便。

似乎在 Xamarin Bugzilla 上报告了相同的问题,但似乎没有解决或使用最新的 Xamarin 工具版本之一重新引入: https ://bugzilla.xamarin.com/show_bug.cgi?id=22906#c4

你知道是否有另一种解决方法?

0 投票
1 回答
1090 浏览

xamarin.ios - Xamarin 链接器:找不到类型 MvvmCross.Platform.IoC.MvxPropertyInjector 的默认构造函数

这与此问题相同,但该解决方案对我不起作用。我有一个 LinkerPleaseInclude.cs 文件,其中包含以下内容:

我使用 Link All 作为链接器行为,但我的印象是在 LinkerPleaseInclude.cs 中包含上述内容会提示链接器不要将其删除。

不确定这是否重要,但这里有一些平台详细信息:

Xamarin Studio 6.3

MvvmCross 4.4.0

.NETCore UWP 5.3.3

0 投票
1 回答
278 浏览

c# - Xamarin.Android 链接器错误 (Plugins.Share)

尝试在发布模式下构建 Xamarin.Android 项目并Like SDK assemblies only启用会产生以下错误:

配置:

  • macOS Sierra 10.12.5
  • Visual Studio for Mac 7.0.1(内部版本 24)
  • Xamarin.Android 7.3.1.2
  • 项目目标 SDK:API 25 (Nougat 7.1)

Android SDK 的区域都是最新的: 在此处输入图像描述

与编译器和存储库一样: 在此处输入图像描述

我还尝试忽略项目配置中的 Plugin.Share 程序集。这些都不起作用,我编译应用程序的唯一方法是禁用链接。

0 投票
1 回答
573 浏览

android - Xamarin 在发布模式下使用 Proguard 链接

我正在开发适用于 Android 和 iOS的Xamarin Forms应用程序。我们使用以包形式提供的第三方 SDK .aar,构建操作设置为LibraryProjectZip. 然后,我们从代码的表单、iOS 和 Android 部分调用。如果我没记错的话,链接在调试模式下工作得很好。

我没能把Linker+ProGuard工作放在一起。我已经阅读了几天并尝试了许多解决方案。我有java codes 1 and 2- 所以我更新了 ProGuard 并开始工作。然后链接产生错误 -UnauthorizedAccessException所以我不得不去相应的文件夹并删除ReadOnly权限。然后项目构建成功,但应用程序功能丢失,即使它运行,Device Log我可以看到一些类丢失了。

为了解决这个问题,我创建了一个ProGuard.cfg并添加了大多数因该"-keep"命令而崩溃的程序集。但是,我似乎无法找到一种方法来保留这个.aar包的功能

有什么建议么?

我在带有 JDK 1.8 的 Windows 10 上使用 VS 2017 和 Xamarin 7.4,以管理员身份运行。尝试链接Sdk Assemblies / User&Sdk AssembliesMultidex开启。我尝试将所有项目的程序集名称放在“跳过链接程序集”字段中,但没有结果。在设备日志中,我得到了失败调用的包名称,因此我也尝试将其添加到 ProGuard,但没有帮助。(看起来像"-keep class com.something.something"