【问题标题】:With Xamarin for Android is Mono runtime installed more than once?使用 Xamarin for Android 是否多次安装 Mono 运行时?
【发布时间】:2016-05-23 09:18:35
【问题描述】:

使用任何 .NET 语言(C#、VB.NET、F# 等)开发的 AFAIK 桌面应用程序 不包括 .NET 运行时,所有应用程序都运行在同一个 .NET 框架上。

对于 Android,这是不正确的。每个应用都在 APK 中包含 Mono 框架。

所以,Xamarin 生成的 APK 非常庞大!

如您所见here,包含整个 Mono 框架和库的 6K HelloWord 应用程序增长到 1580 万。

即使在链接器之后,6K HelloWord 应用程序仍然保持在 2.9M(超过 HelloWorld 应用程序大小的 480 倍)。

不用说,对于 Xamarin,我们使用的是“runtime-over-runtime”环境,即 Mono-over-Dalvik(或 Mono-over-ART,如果您愿意)

简化一下,我想知道的是:

由于每个 APK 都包含 Mono 框架,Mono 框架是随每个应用安装的,还是仅随我们安装的第一个应用一起安装?

还有……

卸载 Xamarin 应用后,Mono 运行时是否也被卸载?如果没有,我们如何卸载 Mono 运行时?

比你

【问题讨论】:

    标签: android xamarin mono


    【解决方案1】:

    我认为您只是误解了将 Mono 运行时与每个 Xamarin Android 应用程序捆绑在一起的目的。 它不包含在您的应用程序包中,然后安装在系统上。 它包含在包中,因此每次运行应用程序时,它实际上都会运行 Mono 运行时包含在包中,然后它运行您的应用程序

    起初它可能看起来有点愚蠢(因为您的每个应用程序都会有自己的 Mono 运行时打包),但这使您可以在手机上拥有不同的应用程序,这些应用程序将在不同的 Mono 运行时运行,有点像就像在 Docker 容器中一样。

    唯一的例外是使用您的手机或 Android 模拟器进行调试。然后,为了加快进程,它会安装特殊的“共享包”,但它们仅用于调试。

    【讨论】:

    • 感谢您的回答。现在我了解了 Xamarin 的工作原理。但是我认为他们选择的方法是在 Xamarin 的脚上射击。 Xamarin 的唯一优势是为多平台编写一次代码。关于语言细节,C# 类似于 Java 克隆。所以我认为不值得花费数兆字节的 Mono 开销。
    • 我喜欢每个应用都捆绑自己的 Mono 运行时的想法。你有关于调试模式的共享包的更多信息吗?它们位于哪里?例如,我可以将它们从我的设备中删除以排除一些奇怪的行为吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多