Я считаю себя довольно хорошо разбирающимся в C #. Это мой любимый язык на данный момент, и в этом весь мой профессиональный опыт.
Тем не менее, я озадачен существованием проекта MonoDroid . Я всегда понимал, что C # и Java очень близки. Мол, если вы знаете одно, вы можете выучить другое очень быстро. Итак, поскольку я думал о разработке своего первого приложения для Android, я просто предполагал, что достаточно познакомлюсь с Java, чтобы начать, а затем просто учусь на ходу.
Разве это не имеет больше смысла, чем использование MonoDroid, который, вероятно, будет менее многофункциональным, чем Java Android SDK, и в любом случае требует изучения своего собственного API (хотя и .NET API)? Я просто чувствую, что было бы лучше выучить новый язык (и в то же время чрезвычайно популярный) и получить в нем некоторый опыт - когда он все равно настолько близок к тому, что вы уже знаете, - чем придерживаться технологии, которую вы испытали с, без получения каких-либо более ценных навыков.
Возможно я сильно искажаю средний потенциальный пользователь MonoDroid. Может быть, это больше для людей, которые имеют опыт работы с Java и .NET и просто предпочитают .NET. Или, может быть (на самом деле это вероятно), есть и другие факторы, которые я просто не учел. Мне просто интересно, почему бы вам использовать MonoDroid вместо просто разработки для Android с использованием Java?
Ответы:
Любой компетентный программист на C # должен быстро освоить Java, чтобы написать программу для Android, но это не главное . Это вопрос повторного использования кода.
Подумайте о том, что через шесть месяцев ваша Android-программа станет популярной, и ваши пользователи будут запрашивать версию для iPhone и Windows Phone 7. Если вы использовали MonoDroid, вы можете повторно использовать большую часть логики приложения с помощью MonoTouch (Mono для iOS) и Windows Phone SDK. Теперь им нужна веб-версия, поэтому вы включаете те же библиотеки классов в проект ASP.Net. Настольные версии? Нет проблем, эта же библиотека классов работает с .Net под Windows или Mono на Linux и OS X.
Кроме C или C ++, я не могу представить ни одного другого языка, который позволил бы вам повторно использовать один и тот же код для всех этих целей.
Отредактируйте, чтобы устранить некоторые проблемы в комментариях: .Net и Mono не позволят вам написать законченную программу и использовать эту программу везде. Они позволят вам поделиться некоторым кодом, и, как и во всех кроссплатформенных программах, объем общего кода зависит от типа программ, которые вы пишете, и от того, насколько хорошо вы отделяете пользовательский интерфейс и программный код от логики приложения.
Однако, если вы напишите свое приложение для Android на Java, сколько из этого можно будет повторно использовать на iOS или Windows Phone? Это то, что я пытался сделать. У меня были существующие библиотеки C #, которые работали над Mono для Android гораздо быстрее, чем потребовалось бы для их переопределения, хотя я уже знал Java . Благодаря Mono у меня есть некоторый код, который разделяется - не изменяется - между веб-сайтом, настольными программами и мобильными приложениями на двух разных мобильных платформах.
Я не хотел подразумевать, даже косвенно, что Mono был идеальным инструментом для любой мобильной разработки. Это компромисс, но я твердо верю, что бывают ситуации, когда Mono - лучший выбор.
Пожалуйста, посмотрите (и возразите!) Ответ Джейсона С. для другого взгляда.
источник
Это своего рода дополнительный ответ, поскольку одна вещь, которая, кажется, до сих пор игнорировалась в ответах, касается того, что на самом деле является кроссплатформенным. Согласно самим Xamarin, это в основном ваша бизнес-логика, а не ваш пользовательский интерфейс или какой-либо аппаратный элемент управления, такой как GPS, аудио, адресная книга и так далее. Они должны быть написаны специально для каждой платформы. См. Их раздел часто задаваемых вопросов У меня есть приложение MonoTouch или WindowsPhone 7, могу ли я просто перестроить его с помощью Mono для Android и целевого Android? ,
Используя Mono, вы можете написать свой пользовательский интерфейс и код управления телефоном, используя C #, но он не будет переносимым на любую платформу. Вам придется написать пользовательский интерфейс и управление телефоном для каждой платформы, даже если вы можете написать это на C #. В любом случае вам все равно придется изучить особенности элементов управления пользовательского интерфейса на Android и то, как Android обрабатывает ресурсы телефона.
Используя Mono, вы должны изучить Mono API, который вызывает Android API. Вам также придется подождать, пока Mono внедрит новые функции Android, и надеюсь, что они реализуют все функции Android. Даже если C # более мощный, чем Java, вы не сможете сделать больше, чем если бы вы использовали Android SDK напрямую (в Java).
Если вы переходите прямо с C # на Android, так как C # очень синтаксически похож на Java, то большая часть обучения C # для разработчиков будет изучать Android API.
Некоторые соображения ...
C # для Android
Нужно учиться
Не нужно учиться
Другие соображения
C # в моно
Нужно учиться
Не нужно учиться
Другие соображения
источник
Learn the Mono API
? Сколько вам на самом деле нужно знать, чтобы разработать приложение для Android? А ты на самом деле пробовал MonoDroid или угадаешь?Learn the Mono API
, я имею в виду , что вам все еще нужно выучить Android API , что Mono повторности, в дополнение к частям он не делает. Сколько вам нужно знать? Зависит от приложения, зависит от человека - это не было суть ОП. Я использовал MonoDroid? У меня есть C #, Java и Objective C, так что нет необходимости. Я рассматривал Mono для мобильности. В то время, когда я отвечал, никто не упомянул ограничения на мобильность. Я не против людей, не согласных со мной, но это само по себе не делает мой ответ бедным.Я думаю, что многое из этого связано с доступными ресурсами.
Синтаксис в C # и Java может быть похож, но они предлагают очень разные вещи. Например, работа с датами с использованием стандартных библиотек Java - это кошмар, а в C # это довольно приятно.
источник
Похоже, это отличная возможность для изучения нового языка , который я не думаю, что вы должны упустить.
Переход с C # на Java очень прост, поскольку они основаны на одних и тех же концепциях. Java похожа на подмножество C #, поэтому вам придется отучиться от некоторых вещей (например, свойств и сборок) и привыкнуть к некоторым новым соглашениям, но в основном это должно быть просто.
источник
Краткий урок истории - MonoDroid вырос из MonoTouch. Сделано много смысла в то время. К сожалению, Novell была продана, и вся команда Mono была уволена. Хорошая новость заключается в том, что Мигель де Икаса получил финансирование и начал новое оборудование для восстановления того, что было MonoTouch / MonoDroid. Так что вы находитесь в подвешенном состоянии, пока они действительно не запустятся.
Обновление за июль 2011 года: наряд Мигеля восстановил права на весь стек Mono *. Получи это, пока оно есть.
источник