【问题标题】:How does Xamarin for Android (Mono for Android) compare to native Android development?Xamarin for Android (Mono for Android) 与原生 Android 开发相比如何?
【发布时间】:2013-05-17 05:55:59
【问题描述】:

我最近选择学习 C# 并在 Xamarin 上使用 C# 开发移动应用程序。尤其适用于 Windows Phone 和 Android 开发。我知道 Windows Phone 应用程序开发主要是 C#,并且 Xamarin 可以为 Android 编译本机代码,但它与 Java 中的本机开发相比如何?我能否使用 Xamarin 使用所有或至少大部分(如 90% 以上)的 Android SDK 和扩展?

【问题讨论】:

  • 您可能会花一些时间阅读 Xamarin 的文档。这是链接-xamarin.com
  • 没有什么可以代替本机代码:)
  • Xamarin 在他们的网站上:Xamarin.Android 提供对标准 Android API 的完全访问权限。
  • 编译和运行一个应用程序需要多少时间?本机和 Xamarin 之间的比较如何?缓慢的编译-执行周期会对开发速度产生显着影响,因为它会干扰开发人员的思维和注意力。使用 Xamarin 会影响编译时间吗?有多显着?

标签: c# android xamarin.android xamarin


【解决方案1】:

我认为要考虑的主要事情是您首选的编程语言 - 在您的情况下是 C# - 并使用它。在使用 C# 构建与 Java 相反的应用程序时,我唯一关心的是它们没有像 Java 那样使用那么多的 3rd 方引用。您会发现自己下载示例文件并对其进行逆向工程以学习如何执行新功能,如果您只能找到基于 Java 的示例,您将不得不更多地搜索智能以找到正在使用的东西。您会发现的一件事是,它通常可以与 Java 中的方法相同,但第一个字母大写。 LINQ 是我在数据操作中发现的一个主要好处,Java 中没有。

祝你好运,詹姆斯

【讨论】:

    【解决方案2】:

    我没有对 Android Java API 的 Xamarin C# 覆盖率进行任何统计或研究,但在我的工作中,将代码从 Java 移植到 C# 时所需的一切都在那里。此外,Xamarin 表示,对于新的 Android SDK 版本,他们通常会在 24 小时内发布 C# 对应版本。而且,正如@dotToString 所说,您可以将 Java jar 库添加到 Xamarin C# 项目并在必要时调用它们。

    性能是另一回事 - 我不相信它可以在 Android 上原生运行。相反,Mono 运行时以某种方式解释字节码。我在实际代码中对 Java 与 Xamarin C# 代码性能进行了一些比较,更多信息请参见:

    Does anyone have benchmarks (code & results) comparing performance of Android apps written in Xamarin C# and Java?

    格雷格

    【讨论】:

    • 声明Mono runtime is somehow interpreting the byte code不正确。
    • @MarkLopez - 如果你知道得更多,请解释它到底是做什么的。最有可能将 .NET pcode“即时”编译为本机代码,然后执行 - 什么 - 整个应用程序、特定模块或一次一个函数?
    • 在运行一个 monodroid 应用程序时,实际上有两个独立的运行时执行,一个是 .NET 的 CLR 的剥离版本和一个原生的 android Dalvik VM。 .NET 运行时托管在与您的 monodroid 应用程序一起部署的单声道运行时 (Mono.Android.Platform.ApiLevel_XY.apk) 中。正是这个 monodroid 运行时使 .NET CLR 和 Dalvik VM 保持同步(对象创建和销毁)。
    【解决方案3】:

    您可以使用所有的 android 功能和 java 库互操作。此外,您还可以获得包括 linq 在内的非特定于 Windows 的 .net 的优势。

    【讨论】: