Як розробник C # ви навчилися Java розробляти для Android або використовувати натомість MonoDroid? [зачинено]


46

Я вважаю себе досить добре розбраним на C #. Наразі це моя мова вибору, і саме тут лежить весь мій професійний досвід.

І все-таки я здивований наявністю проекту MonoDroid . Я завжди розумів, що C # і Java дуже близькі. Мовляв, якщо ви знаєте одне, ви можете навчитися іншого дуже швидко. Отже, коли я розглядав питання про розробку свого першого додатка для Android, я просто припускав, що ознайомлюсь з Java достатньо, щоб почати роботу, а потім просто навчитися навчатися.

Хіба це не матиме більше сенсу, ніж використання MonoDroid, який, ймовірно, менш багатий на функції, ніж Java Android SDK, і вимагає вивчення власного API (хоча і .NET API) у будь-якому випадку? Я просто відчуваю, що було б краще вивчити нову мову (і надзвичайно популярну в цьому) і отримати певний досвід в ній - коли це так близько до того, що ти все одно знаєш - а не дотримуватися технології, яку ти досвідчив з, не здобуваючи більше цінних навичок.

Можливо, я грубо неправильно представляю середнього потенційного користувача MonoDroid. Можливо, це більше для людей, які мають досвід роботи в Java та .NET і просто віддають перевагу .NET. А може (насправді це ймовірно) є й інші фактори, які я просто не враховував. Мені просто цікаво, чому б ви використовували MonoDroid замість того, щоб просто розробляти для Android за допомогою Java?


11
У Google словосполучення "це новий COBOL" і подивіться, з якою мовою Google придумує ...
Джон Рейнольдс

1
@JohnReynolds Ironic тоді, що зараз найшвидший ріст у мобільних пристроях та Android, використовуючи "новий COBOL". Яким би способом ви її не нарізали, навіть якщо ви вибрали MonoDroid, якщо ви розробляєте для Android, ви все ще покладаєтесь на "новий COBOL".
Jason S

1
"новий COBOL" відноситься до мови, а не до ВМ (будь то JVM чи Дальвік). Тож MonoDroid не покладається на "новий COBOL", а також на Scala та Clojure чи будь-яку іншу мову JVM.
Джон Рейнольдс

Існує ще величезна кількість старого COBOL.
Алан Б

@JohnReynolds Іронічна річ у тому, що більша частина коду, який працює сьогодні, є COBOL; і найбільш іронічним є той факт, що C # є клоном Java (і поганим, оскільки він також клонував більшість неправильних речей).
m3th0dman

Відповіді:


55

Будь компетентний C # програміст повинен мати можливість швидко підібрати досить Java , щоб написати програму для Android, але це не головне . Це питання повторного використання коду.

Подумайте про півроку, коли ваша програма Android популярна, а ваші користувачі просять версію для iPhone та Windows Phone 7. Якщо ви використовували MonoDroid, ви можете повторно використовувати більшу частину логіки програми за допомогою MonoTouch (Mono для iOS) та SDK для Windows Phone. Тепер вони хочуть веб-версії, тому ви включаєте бібліотеки одного класу в проект ASP.Net. Версії для робочого столу? Немає проблем, що той самий бібліотека класів працює з .Net під Windows або Mono в Linux та OS X.

Крім C або C ++, я не можу придумати жодної іншої мови, яка дозволила б вам повторно використовувати той самий код у всіх цих цілях.

Змініть, щоб вирішити деякі проблеми в коментарях:. Net і Mono не дозволять вам написати повну програму та використовувати ту саму програму скрізь. Вони дозволять вам ділитися деяким кодом, і, як і у всіх крос-платформних програмуваннях, кількість спільного коду залежить від типу програм, які ви пишете, і від того, наскільки добре ви відокремите інтерфейс користувача та апаратний код від логіки програми.

Однак, якщо ви пишете додаток для Android на Java, скільки цього можна використовувати для iOS або Windows Phone? Це я і намагався зробити. У мене були існуючі бібліотеки C #, які працювали над Mono для Android набагато менше часу, ніж знадобилося б для їх повторного втілення, хоча я вже знав Java . У мене є код, який ділиться - немодифікованим - між веб-сайтом, настільними програмами та мобільними додатками на двох різних мобільних платформах, завдяки Mono.

Я не мав на увазі, навіть побічно, що Mono є ідеальним інструментом для кожної ситуації з мобільним розвитком. Це компроміс, але я твердо вірю, що бувають ситуації, коли Моно - набагато кращий вибір.

Будь ласка, подивіться (і піднесіть заявку!) Відповідь Джейсона S для іншої точки зору.


12
І я подумав, що Java - це та гасло "писати один раз запустити всюди"!
Лучано

3
@Luciano - такі ж аргументи можна було б застосувати, якби ОП заявила, що знає Яву, як і цікавиться, чи слід вивчати C #. Важливим бітом є повторне використання коду, а не мова.
ChrisF

14
Моно було вибрано в будинку з цієї ж причини. Нам потрібно було створити клієнта на декількох платформах і всіх кодерів нового c #. Теоретично це була чудова ідея. Однак на практиці це перетворилося на трохи кошмар. Ми знайшли багато місць, де код, який працював на рідній платформі .NET, не працював на платформі MacOS, тому нам довелося зробити виняток; тоді той самий код не працював у LInux. Загалом моно видався занадто нестабільним. Врешті-решт, нам довелося відмовитися від ідеї та повернутися до написання рідного коду для цільової ОС.
Чу

4
Однак єдиний код, який можна повторно використовувати - це бізнес-логіка, а не код або код інтерфейсу, який взаємодіє з апаратним забезпеченням телефону. Дивіться, у мене є програма MonoTouch або WindowsPhone 7, чи можу я просто відновити його з Mono для Android та націлити Android? на MonoDroid FAQ.
Jason S

2
@JasonS, я оновив свою відповідь, щоб відповісти на ваш коментар. Для запису моя єдина участь із Xamarin та Mono - як задоволений користувач.
Кевін

18

Це свого роду додаткова відповідь, оскільки одне, що, здається, поки що у відповідях не було помічено, стосується того, що насправді є кросплатформою. На думку самих Xamarin, це в основному ваша бізнес-логіка, а не ваш інтерфейс користувача або будь-який апаратний контроль, такий як GPS, аудіо, адресна книга тощо. Вони повинні бути написані спеціально для кожної платформи. Подивіться їх запитання щодо поширених запитань У мене є додаток MonoTouch або WindowsPhone 7, чи можу я просто відновити його з Mono для Android та націлити на Android? .

Використовуючи Mono, ви можете написати свій інтерфейс користувача та код управління телефоном за допомогою C #, але він не буде переносимим на будь-яку платформу. Вам потрібно буде написати інтерфейс користувача та управління телефоном для кожної платформи, навіть якщо ви можете записати це на C #. У будь-якому випадку, вам все одно доведеться дізнатися особливості управління інтерфейсом користувача на Android та те, як Android обробляє телефонні ресурси.

Використовуючи Mono, вам доведеться вивчити Mono API, який викликає API Android. Вам також доведеться чекати, коли Mono впровадить нові функції Android і сподіваємось, що вони реалізують усі функції Android. Навіть якщо C # є більш потужним, ніж Java, ви не зможете зробити більше, ніж якщо ви використовуєте Android SDK безпосередньо (на Java).

Якщо ви переходите прямо з C # на Android, оскільки C # настільки синтаксично схожий на Java, то більшість навчань розробників C # для Android буде вивчати API для Android.

Деякі міркування ...

C # для Android

Треба вчитися

  • Android API
  • Java API: обробка рядків, календарів та подій тощо

Не потрібно вчитися

  • Синтаксис Java: C # дуже схожий на синтаксис.

Інші міркування

  • Ви не зможете повторно використовувати код на всіх платформах.
  • У вас не буде ніяких залежностей між вами та SDK для Android. Ви отримаєте нові функції Android по мірі їх випуску.
  • Ви, швидше за все, матимете більшу підтримку та приклади для коду Android, ніж Mono.

C # до Моно

Треба вчитися

  • Android: Вам ще потрібно вивчити функції інтерфейсу та апаратного керування Android.
  • API Mono: Ви повинні навчитися викликати API Mono, щоб виконувати роботи з інтерфейсом та обладнанням Android.

Не потрібно вчитися

  • API Java та синтаксис: Ви можете розвиватися в C #

Інші міркування

  • Код повторного використання: Ви можете повторно використовувати код C #, позбавлений будь-якого коду користувальницького інтерфейсу або апаратного керування, і таким чином є чистою "бізнес-логікою". Хоча ідеально, мати таку чисту поділ не завжди просто. Вам доведеться оцінити, яка частина вашого коду не матиме ніякого інтерфейсу або апаратного контролю.
  • Залежності: Ви залежать від Mono, який реалізує API Android. Можливо, є деякі відставання від версій Android API або деякі функції Android ніколи не можуть бути реалізовані.
  • У вас може бути менше документації та прикладів на вибір.

Ви забули згадати P / Invoke. Зразок.
Амір Карімі

-1: Що ти маєш на увазі Learn the Mono API? Скільки потрібно насправді знати, щоб розробити додаток для Android? А ви насправді пробували MonoDroid чи гадаєте?
Джим Г.

@JimG. До Learn the Mono API, я маю в виду , що вам все ще потрібно вивчити Android API , що Mono повторності, на додаток до частин він не робить. Скільки потрібно знати? Залежить від програми, залежить від людини - це насправді не було сутністю ОП. Я використовував MonoDroid? Ні. У мене є досвід C #, Java та Objective C, тому немає потреби. Я вважав Mono за портативність. У той час, коли я відповідав, ніхто не згадував обмеження на переносимість. Я не проти, щоб люди не погоджувалися зі мною, але це само по собі не робить мою відповідь поганою.
Jason S

13

Я думаю, що багато чого стосується наявних ресурсів.

Синтаксис в C # і Java може бути схожий, але вони пропонують дуже різні речі. Наприклад, робота з датами за допомогою стандартних бібліотек Java - це кошмар, тоді як у C # це досить приємно.


2
Цікаво - тому звернення стосується більше доступу до бібліотек .NET. Чи знаєте ви, чи пропонує .NET пропонує багато зручних функцій, відповідних Android, чого складніше досягти за допомогою API Android Android Java?
Дан Дао

19
+1 - Починаючи з C #, я вважаю, що java є ... ідіосинккратичним у кращому випадку
Oded

4
Я вважаю, що подібність між C # та Java не є перевагою при переключенні між ними. Я можу перемикатися між C # і Python, Ruby або Lua без мигті, але востаннє, коли я спробував зробити якесь кодування Java, я в кінцевому підсумку скреготів зубами і крутив колеса.
Адам Кросленд

1
@Dan Тао: заклик не більш про доступ до стандартного .Net. Йдеться і про те, і про повторне використання. Користь від повторного використання повинна бути очевидною. Щодо доступу до .Net, я дивлюся на це таким чином. Я використовував, скажімо, XDocument 1000 і 1 раз. Якщо мені потрібно написати мобільний додаток, який інтегрує XML-дані з сервісу, я записую це з швидкістю думки. Якщо я навчаюсь Java, я міг би легко переходити від 4 до 8 разів (або 10 чи 12, хто знає), підстрибуючи вперед і назад між кодуваннями та читанням документів. Якщо використання для бізнесу, то безвідповідально робити проект під час вивчення мови.
квентин-зірин

9

Це здається чудовою можливістю для вивчення нової мови , яку, на мою думку, ви не повинні пропускати.

Перехід від C # до Java - вітер, оскільки вони засновані на одних і тих же концепціях. Java - це як підмножина C #, тому вам доведеться вивчити деякі речі (наприклад, властивості та збірки) та звикнути до деяких нових умов, але, головним чином, це повинно бути безпроблемним.


10
І з’ясуйте відмінності між тим, як працюють дженерики в кожній, і задайтеся питанням, чому властивості не існують, і подіями і ...
Oded

5
Незначні відмінності. Це не так, як йому доводиться вчитися Haskell.
Мартін Вікман

1
+1 Без шкоди знати кілька різних мов та працювати над реальним світовим проектом - це чудовий спосіб розвісити мову, якщо мова схожа на мову, яку ви вже знаєте.
гленатрон

Краще переконайтеся, що особа, яка платить, добре платить за навчання.
квентин-зірин

1
@qes - Навчання чогось зайвого не є достатньою причиною для виправдання витрат у більшості випадків, але розробка складного додатку у рідному середовищі буде проходити більш плавно більшу частину часу, і це може змусити навчання мати більше довгострокові скорочення витрат.
Morgan Herlocker

3

Швидкий урок історії - MonoDroid виріс із MonoTouch. Вдало багато сенсу в той час. На жаль, Novell був проданий, і вся команда Mono була звільнена. Хороша новина полягає в тому, що Мігель де Іказа забезпечив фінансування і розпочав нове спорядження для відновлення того, що було MonoTouch / MonoDroid. Тож ви начебто в кінцівці, поки вони справді не запускаються.

Оновлення липня 2011 року: Спорядження Мігеля відновило права на весь Mono * стек. Отримайте його, поки він не хот.


Приємно почути (оновлення липня 2011 року). Я раніше спробував Mono і виявив це трохи невтішним. Я ще спробую!
Брайан Кноблаух
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.