it-swarm.cn

作为C#开发人员,您会学Java为Android进行开发还是使用MonoDroid?

我认为自己非常精通C#。目前,这是我选择的语言,基本上是我的专业经验所在all

但是,我仍然对 MonoDroid 项目的存在感到困惑。我的理解一直是C#和Java接近非常。就像,如果您知道一个,就可以很快地学习另一个。因此,当我考虑开发我的第一个Android应用程序时,我只是假设我会充分熟悉Java以使其入门,然后在学习过程中进行一些学习。

这难道不比使用MonoDroid更有意义,因为MonoDroid的功能可能不如Java Android SDK,并且仍然需要学习自己的API(尽管是.NET API)?我只是觉得学习一门新语言(以及当时一种非常流行的语言)并获得一些经验(最好是无论如何都已经非常接近它)会更好,而不是坚持使用已有的技术却没有获得更多有价值的技能.

也许我严重误解了平均潜在的MonoDroid用户。也许对Java和.NET经验丰富的人更喜欢,而他们更喜欢.NET。或者,也许(实际上有可能)我只是没有考虑其他因素。我只是在想,为什么您会使用MonoDroid而不是仅使用Java为Android开发?

46
Dan Tao

任何有能力的C#程序员都应该能够迅速掌握Java编写一个Android程序,但是 point。这是代码重用的问题。

想想从现在开始的六个月后,当您的Android程序)流行并且您的用户要求iPhone和Windows Phone 7的版本时。如果您使用过MonoDroid,则可以重用大多数应用程序MonoTouch(适用于iOS的Mono)和Windows Phone SDK的逻辑,现在他们需要基于Web的版本,因此您在ASP.Net项目中包含相同的类库。桌面版本?在Windows或Linux和OS X上的Mono下的Net。

除了C或C++,我想不出任何其他语言来让您在所有这些目标上重用相同的代码。

编辑以解决注释中的某些问题: .Net和Mono不会允许您编写完整的程序并使用该程序程序无处不在。它们将使您共享一些代码,并且像所有跨平台编程一样,共享代码的数量取决于您正在编写的程序的类型以及如何那么您可以将UI和硬件代码与应用程序逻辑分开。

但是,如果您使用Java编写Android应用程序,那么其中有多少可在iOS或Windows Phone上重用?这就是我要尝试的重点。我有正在使用的C#库Mono for Android)的时间比重新实现它们要少得多,,尽管我已经知道Java。多亏了Mono,我在两个不同的移动平台上的网站,桌面程序和移动应用程序之间共享了一些未经修改的代码。

我并不是要暗示甚至间接暗示Mono是每种移动开发情况的理想工具。这是一个折衷,但是我坚信在某些情况下,Mono是更好的选择。

请查看(并赞扬!)Jason S的答案以换个角度。

55
Kevin

这是一种补充性的答案,因为到目前为止,似乎在答案中已被忽略的一件事涉及实际上是跨平台的东西。根据Xamarin自己的看法,基本上这是您的业务逻辑, not 您的UI或任何硬件控件,例如GPS,音频,地址簿等。这些将必须针对每个平台专门编写。请参阅他们的FAQ条目 我有一个MonoTouch或WindowsPhone 7应用程序,我可以仅使用Mono为Android并以Android为目标来重建它吗?

使用Mono,您可以使用C#编写UI和电话控制代码,但它不能移植到任何平台。即使您可以用C#编写,也必须编写每个平台的UI和电话控件。无论哪种方式,您仍将必须学习Android上的UI控件的细节以及Android如何处理电话资源。

使用Mono,您将必须学习Mono API,该API调用Android AP​​I。您还必须等待Mono实现新的Android功能,并希望它们实现所有Android功能。即使C#比Java更强大,您也无法做得比直接使用Android SDK(在Java中)要做的更多。

如果您直接从C#转到Android,由于C#在语法上与Java非常相似,那么大多数Android的C#开发人员学习的都将是Android AP​​I。

一些注意事项...

从C#到Android

需要学习

  • Android API
  • Java API:字符串,日历和事件处理等。

无需学习

  • Java语法:C#的语法非常相似。

其他注意事项

  • 您将无法跨平台重用代码。
  • 您和Android SDK之间没有任何依赖关系。您将获得新的Android功能,因为它们已发布。
  • 与Mono相比,您可能对Android代码有更多的支持和示例。

C#转Mono

需要学习

  • Android:您仍然需要学习Android的UI和硬件控制功能。
  • Mono API:您必须学习如何调用Mono的API来使用Android的UI和硬件进行操作。

无需学习

  • Java API和语法:可以用C#开发

其他注意事项

  • 重用代码:您可以重用没有任何UI或硬件控制代码的C#代码,因此是纯“业务逻辑”。尽管理想,但如此干净的分离并不总是那么容易。您将不得不评估您的代码中有多少没有任何UI或硬件控件。
  • 依赖关系:您依赖Mono实现Android AP​​I。 Android AP​​I版本可能会有一些滞后,或者某些Android功能可能永远不会实现。
  • 您可能没有多少文档和示例可供选择。
18
Jason S

我认为这很大程度上与可用资源有关。

C#和Java中的语法可能相似,但是它们提供了截然不同的东西。例如,使用标准Java库处理日期是一场噩梦,而在C#中,这很令人愉快。

13
Corey

看起来学习新语言的绝佳机会,我不认为您应该放弃。

从C#到Java很容易,因为它们基于相同的概念。Java就像C#的一个子集,因此您必须取消学习一些东西(例如属性和程序集),并习惯了一些新的约定,但大多数情况下应该很容易。

9
Martin Wickman

快速历史课程-MonoDroid源自MonoTouch。当时很有道理。不幸的是,Novell被出售,整个Mono团队被解雇。好消息是,Miguel de Icaza获得了资金,并已开始组建新公司以重建MonoTouch/MonoDroid。因此,在它们真正发布之前,您一直处于困境。

2011年7月更新:Miguel的服装已重新获得整个Mono *堆栈的权利。得到它的时候。

3
Wyatt Barnett