Подтвердить что ты не робот

Objective-C и Android

Я только что закончил относительно большой проект для Android, и он оставил горький вкус во рту, зная, что он никогда не будет работать на одном из самых распространенных телефонов этой стороны солнечной системы (тот, на который этот фруктовый маленький клуб).

Итак, для моего следующего проекта я хочу написать его таким образом, чтобы большинство компонентов легко переносились между платформами iPhone и Android. Способ, которым я собираюсь это сделать, - это кодировать большую часть его в Objective-C, а затем добавить части, относящиеся к платформе, в более Objective-C и Java соответственно. На стороне Android это потребует использования NDK.

Мои знания о C хороши, но мои знания Objective-C близки к нулю, и у меня нет желания изучать С++. Насколько разумным является подход выше, и есть ли лучший? Есть ли способ, которым я могу закодировать на Java и до сих пор дойти до не-взломанного рынка iPhone? И насколько вероятно, что люди, которых я знаю (пользователи iPhone), будут иметь Android-телефон к следующему году?

4b9b3361

Ответ 1

Вернитесь назад и подумайте о том, что в итоге вы сможете логически разделить.

Модели пользовательского интерфейса довольно разные, компоненты разные. В конце концов, вы могли бы поделиться такими классами объектов данных, возможно, с некоторыми алгоритмами. Это даже не похоже на то, что вы могли бы реально обменяться сетевым кодом, как в старые времена, потому что вы не используете непосредственно сокеты, вы используете библиотеки HTTP.

Итак, все усилия, которые вы вкладываете в это, действительно находят выигрыш в конце? Мне кажется, что конечным результатом будет хрупкий беспорядок, который сложно обновить, и он посредственный на обеих платформах, а не отличный.

Почему вы пишете приложения? Сделать жизнь проще для вас или ваших пользователей?

Ответ 2

Другие говорили об этом, но я хотел бы сделать это более явным. Возможно, лучше всего написать:
  • Кросс-платформенные модели данных и основная логика, используя:
    • бит GNUstep (Obj-C) или
    • CF-Lite (C) или
    • Что бы вы ни хотели, пока это кросс-платформенный: P
  • Код интерфейса только для iPhone, используя Cocoa Touch (Obj-C)
  • Код интерфейса только для Android, однако он делает это для Android.

Это как можно ближе; любая попытка написать код межплатформенного интерфейса, несомненно, приведет к посредственному приложению на обеих платформах. Но сделать все остальное из вашего кода переносимым и просто обернуть вокруг него интерфейс, специфичный для устройства, выполняется все время и отлично работает для некоторых разработчиков iPhone.

Ответ 3

Objective-C без Cocoa не очень полезен и не приближает вас к созданию рабочей кодовой базы iPhone. Вероятно, вам лучше написать свое ядро ​​в C с Core Foundation и использовать Java или Objective-C для конкретных частей платформы. Apple открыла большой кусок Core Foundation в качестве CF-Lite, и он без сбоев соединяется с Cocoa в OS X (т.е. Вы можете использовать многие классы CF взаимозаменяемо со своими аналогами Cocoa).

Ответ 4

Мое предположение, которое не имеет опыта для его резервного копирования, заключается в том, что вы, вероятно, могли писать Obj-C с Google NDK каким-то образом, учитывая, что GCC существует для ARM, является открытым исходным кодом, имеет Obj -C и базовую среду выполнения Obj-C (которая, если она еще не может быть взломана для работы над новой архитектурой) и т.д.

Это также может быть большой проблемой для сомнительной выгоды.

И, конечно, "Obj-C" (без классов NS) означает нечто совсем иное, чем "Cocoa", что означает большинство людей действительно, когда говорят "Obj- C". Возможно, вы сможете повторно использовать некоторые из GNUstep для некоторых, но... Честно говоря, я сомневаюсь. Звучит снова как много работы.

Итак, да, я думаю, это возможно. Это также много работы, и я не думаю, что это того стоит.

Учитывая то, что вы сказали, если бы я пытался это сделать, у меня возникло бы желание написать как можно больше своей основной логики в C, а затем обернуть его двумя отдельными графическими интерфейсами для каждой платформы.

Ответ 5

Подходя с этим под другим углом... Я знаю, что вы сказали, что хотите попробовать придерживаться Java, но если вы знаете С#, вы можете пойти с картой MonoTouch для iPhone. Моно по существу и с открытым исходным кодом. Net. Команда Mono работает над подключением Mono к Android, поэтому вы можете в принципе написать общую библиотеку С# для своей бизнес-логики и иметь разные представления/контроллеры на платформу. Конечно, все это будет на С#, и это немного дороже, но это решает проблему написания всего на разных языках.

Я считаю, что он называется MonoTouch на iPhone и MonoDroid на Android.

Ответ 6

Apportable SDK - это подход Objective-C для записи один раз и развертывания как для IOS, так и для Android. Он перекрестно скомпилирует запущенный проект IOS Xcode в Android SDK.

Смотрите здесь для образцов приложений, которые запускаются на обеих платформах через несколько минут после загрузки.

Ответ 7

Я не уверен в Android, но с iPhone вы можете писать прямо C до тех пор, пока вы завершаете его в классах Objective-C.

Ответ 8

Время выполнения Objective-C еще не перенесено на Android. Это не должно быть слишком много, но все же, без знания языка, я сомневаюсь, что вам будет легко переносить его.

То, что вы пытаетесь сделать, будет сложно для общего приложения, но должно быть возможно для игр, если вы решите разработать игру на простом C (который поддерживается как Android NDK, так и iPhone). Вам нужно будет написать некоторый код клея, чтобы передавать входные события из сред Obj-C и Java в ваш код C, но это не должно быть большой проблемой. Objective-C позволяет вам напрямую звонить в ваш код C и есть много примеров проектов, которые делают именно это для Android.

Ответ 10

XMLVM - это проект, который способен переводить (некоторые) приложения Android на iPhone. Для получения дополнительной информации посетите http://xmlvm.org/android/

Ответ 11

Я понимаю, что это может быть немного поздно, но, похоже, индустрия собирается в направлении веб-приложений в эти дни, чтобы обеспечить мобильность приложений. То есть, встраивание веб-браузера в ваше "скелетное родное приложение" и запись javascript, css и html для Android, iOS и других крупных платформ для смартфонов.

Есть инструменты, которые помогут вам в этом. Возможно, вы захотите проверить PhoneGap и Sencha Touch, но их гораздо больше. Обратите внимание, что этот подход может быть не идеальным для приложений в режиме реального времени/анимации.

Ответ 12

Вот разговор на конференции facebook mobile @scale, где две команды (Dropbox и оркестр) использовали аналогичные подходы. Dropbox использовал С++ для создания libdropbox и Orchestra (почтовый ящик), используемого Objective-c для создания libmailbox.

Опять же, они написали свои интерфейсы на родном языке платформы и использовали свои кросс-платформенные библиотеки для основной логики и данных.

Основные преимущества, которые я забрал: Почтовый ящик перешел от ios к Android в течение 5 недель, потому что он просто создавал код пользовательского интерфейса. Dropbox может бета-тестировать изменения основных функциональных возможностей, которые находятся в общей библиотеке с бета-версиями Android, было проще сделать массовые развертывания в масштабе для бета-сборки.

Ответ 13

Если вы можете подождать до конца этого года (точное время неизвестно), Adobe будет иметь AIR для Android и компилятор для iPhone. Таким образом, вы можете написать приложение в AIR для Android и использовать большую часть того же кода для компиляции на iPhone.

http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/

Даже если вы не можете дождаться, см. http://www.insideria.com/2008/12/actionscript-to-cocoa---protot.html, где объясняется сходство между ActionScript и Cocoa.

Также проверьте: http://labs.adobe.com/technologies/air2/ для версии AIR, которая может использовать сенсорный экран.

Итак, вы можете скоро написать один раз и развернуть на Android и iPhone с помощью ActionScript 3.