Android 何时链接;仅Sdk程序集“;?

Android 何时链接;仅Sdk程序集“;?,android,linker,xamarin,Android,Linker,Xamarin,我正在使用Xamarin和Visual Studio 2013开发一个Android应用程序。如果转到项目属性/Android选项/Linking有三个选项:无,仅Sdk程序集,以及Sdk和用户程序集 我的问题是:您什么时候会选择选项Sdk Assemblies Only选项?您不总是希望在发布版本中包含用户程序集吗 更新链接一词实际上用于表示在中取消链接。当使用该条件对文本进行预处理时,这一切都是有意义的。当您希望在构建APK时删除未使用的Xamarin.Android程序集时,可以使用Sdk

我正在使用Xamarin和Visual Studio 2013开发一个Android应用程序。如果转到项目属性/Android选项/Linking有三个选项:
仅Sdk程序集
,以及
Sdk和用户程序集

我的问题是:您什么时候会选择选项
Sdk Assemblies Only
选项?您不总是希望在发布版本中包含用户程序集吗


更新链接一词实际上用于表示在中取消链接。当使用该条件对文本进行预处理时,这一切都是有意义的。

当您希望在构建APK时删除未使用的Xamarin.Android程序集时,可以使用
Sdk程序集Only
选项。可以创建这些程序集的完整列表

假设您已将System.Net程序集添加到项目中,但尚未在代码中实际使用它,并且忘记将其删除。仅指定链接器选项
Sdk Assemblies
将导致生成链从最终APK中删除程序集,从而减小应用程序的总体大小

您可以通过查看将最终APK提取为zip文件并检查Assembly目录来验证此行为:


在上图中,您将看到
System.Net.dll
System.Xml.dll
位于
Don Link
生成的APK中,而它们已从仅使用
Sdk程序集构建的APK中删除。这些是项目引用,但从未在源代码中使用过,Xamarin通过静态分析检测到这一点,然后将其从APK中排除。

Xamarin。Android
应用程序使用链接器来减小应用程序的大小。默认值为
SdkOnly

  • None
    :将不尝试链接
  • SdkOnly
    :链接将 仅在基类库上执行,不在用户的程序集上执行
  • Full
    :将对基类库和用户库执行链接 装配。 注意:如果您面临链接问题,例如
“GetAdditionalResourcesFromAssemblies”任务意外失败。 System.IO.FileNotFoundException:。也许它不存在于Mono for Android配置文件中

然后重新检查xamarin.Android项目设置并设置以下标记

<AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>
true

希望这会有所帮助。

据我所知,这三个选项中,未使用的Xamarin.Android程序集永远不会链接到APK。还是我错了?当您将核心Xamarin.Android程序集添加到项目中,但在源代码中没有明确使用时,该选项适用。当启用
不链接
时,默认情况下,Xamarin不包括每个核心程序集。
链接
==
从APK中删除哪些程序集
。而
Sdk程序集仅
==
删除未使用的Sdk程序集
?我现在已经阅读了官方文档,很明显,
链接
这个词的含义是
取消链接
。难怪我会感到困惑。
Sdk程序集
将您的项目引用与Xamarin.Android核心程序集进行匹配,并通过静态分析确定哪些程序集永远不会被使用,然后将其从最终APK中删除。这是一个需要对Xamarins部分做进一步澄清的过程。我不得不分解他们的构建过程来解决这个问题。