何时链接"仅限Sdk Assemblies"?

时间:2014-09-24 09:14:45

标签: android linker xamarin

我正在使用Xamarin和Visual Studio 2013开发Android应用。如果您转到项目属性/ Android选项/链接,则有三个选项:None,{{ 1}}和Sdk Assemblies Only

我的问题是:您何时会选择Sdk and User Assemblies选项?您是否总是希望在发布版本中包含用户程序集?

更新 Sdk Assemblies Only一词实际上用于表示Xamarin docs中的Linking。在使用该条件对文本进行预处理时,这一切都是有意义的。

2 个答案:

答案 0 :(得分:4)

如果您希望在构建APK时删除已链接到项目的未使用的Xamarin.Android程序集,则可以使用Sdk Assemblies Only选项。这些程序集的完整列表可以是found here.

假设您已将System.Net程序集添加到项目中,但实际上并未在代码中使用它而忘记删除它。指定链接器选项Sdk Assemblies Only将导致构建链从最终的APK中剥离程序集,从而减少应用程序的整体大小。

您可以通过查看将最终APK解压缩为zip文件并检查程序集目录来验证此行为:

enter image description here

在上图中,您会看到System.Net.dllSystem.Xml.dll位于Don't Link生成的APK中,而它们已从使用{{1}构建的APK中删除}。这些是项目参考,但从未在源代码中使用,Xamarin通过静态分析检测到这一点,然后将其从APK中排除。

答案 1 :(得分:0)

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

  • None:不会尝试关联。
  • SdkOnly:链接将是 仅在基类库上执行,而不是在用户程序集上执行。
  • Full:将对基类库和用户执行链接 组件。 For more details refer here.. 注意:如果您遇到链接问题,例如
  

" GetAdditionalResourcesFromAssemblies"任务意外失败。       System.IO.FileNotFoundException :.也许它在Mono for Android配置文件中不存在?

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

<AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>

希望它会有所帮助。