Я только что закончил относительно крупный проект для Android, и он оставил горький вкус в моем рту со знанием, что он никогда не будет работать на одной из самых повсеместных гарнитур эта сторона солнечной системы (та тем фруктовым небольшим клубом).
Так, для моего следующего проекта я хочу записать это способом, который делает большинство компонентов легко мобильным между платформами Android и iPhone. Путем я думаю о выполнении, это путем кодирования большей части из него в Objective C и затем добавления определенных для платформы частей в большем количестве Objective C и Java соответственно. На стороне Android это потребует использования NDK.
Мое знание C хорошо, но мое знание Objective C близко к нулю, и у меня нет требования изучить C++. Насколько нормальный подход выше и является там лучшим? Есть ли какой-либо способ, которым я могу кодировать в Java и все еще добраться до оригинального рынка iPhone? И как, вероятно, это, что у людей, которых я знаю (пользователи iPhone) будет телефон на базе Android к следующему году?
Сделайте шаг назад и подумайте, чем вы, по логике, сможете в конце концов поделиться.
Модели пользовательского интерфейса довольно разные, компоненты разные. В конце концов, вы могли бы поделиться с вами классами объектов данных, возможно, некоторыми алгоритмами. Это даже не похоже на то, что вы могли бы реально в конечном итоге поделиться сетевым кодом, как в старые времена, потому что вы не используете напрямую сокеты, вы используете библиотеки HTTP.
Так будут ли все усилия, которые вы вкладываете в это, в конце концов окупятся? Мне кажется, что конечным результатом будет хрупкий беспорядок, который трудно обновить, и он будет посредственным на обеих платформах вместо того, чтобы быть отличным на любой из них.
Почему вы пишете приложения? Чтобы облегчить жизнь вам или вашим пользователям?
Мое предположение, у которого нет опыта, подтверждающего это, заключается в том, что вы, вероятно, могли бы каким-то образом написать Obj-C с помощью Google NDK, учитывая, что GCC существует для ARM, является открытым исходным кодом, имеет Obj- Компилятор C и базовая среда выполнения Obj-C (которая, если она еще не может быть взломана для работы с новой архитектурой) и т. Д.
Это также может быть большой работой с сомнительной пользой.
И, конечно же, «Obj-C» (без классов NS
) означает нечто совсем иное, чем «Какао», что большинство людей на самом деле имеют в виду, когда говорят «Obj -С ". Возможно, вы сможете повторно использовать часть GNUstep для этого, но ... Честно говоря, я сомневаюсь в этом. Снова похоже, что нужно много работать.
Так что да, я думаю, что это возможно. Это также большая работа, и я не думаю, что она того стоит.
Учитывая то, что вы сказали, если бы я попытался это сделать, у меня возникло бы искушение написать как можно больше вашей базовой логики на C, а затем обернуть ее двумя отдельными графическими интерфейсами для каждой платформы.
Другие говорили в основном это, но я хотел бы сделать это более явным. Лучше всего, вероятно, написать:
Это максимально близко; любая попытка написать код кроссплатформенного интерфейса несомненно приведет к созданию посредственного приложения на обеих платформах. Но превращение всего остального вашего кода в переносимый и просто обертывание интерфейса, зависящего от устройства, делается постоянно , и это отлично поработало для некоторых разработчиков iPhone.
Я не уверен насчет Android, но с iPhone вы, по сути, можете писать на чистом C, если вы обернете его в классы Objective-C.
Objective-C без Cocoa не так полезен и не приблизит вас к созданию работающей кодовой базы iPhone. Вероятно, вам будет лучше написать свое ядро на C с помощью Core Foundation и использовать Java или Objective-C для частей, специфичных для платформы. Apple предоставила открытый исходный код большой части Core Foundation как CF-Lite, и она бесплатно связана с Cocoa в OS X (т.е. вы можете использовать многие классы CF взаимозаменяемо с их аналогами из Cocoa).
Подходя к этому под другим углом ... Я знаю, что вы сказали, что вы хотел попробовать и придерживаться Java, но если вы знаете C #, то можете использовать фреймворк MonoTouch для iPhone. По сути, Mono - это реализация стека .Net с открытым исходным кодом. Команда Mono работает над переносом Mono на Android, чтобы вы могли написать общую библиотеку C # для своей бизнес-логики и иметь разные представления / контроллеры для каждой платформы. Конечно, все это будет на C #, и это немного дороже, но это решает проблему написания всего на разных языках.
Я считаю, что это называется MonoTouch на iPhone и MonoDroid на Android.
Среда выполнения Objective-C еще не была перенесена на Android. Это не должно быть слишком сложной работой, но все же, без рабочего знания языка я сомневаюсь, что вам будет легко ее перенести.
То, что вы пытаетесь сделать, будет сложно для общего приложения, но должно быть возможно для игр, если вы решите разрабатывать игру на простом C (который поддерживается как Android NDK, так и iPhone). Вам придется написать некоторый "клейкий" код для передачи входных событий из сред Obj-C и Java в код на C, но это не должно быть большой проблемой - Objective-C позволяет напрямую вызывать код на C, и есть много примеров проектов, которые делают именно это для Android.
Я еще не пробовал сам и не закончил смотреть доклад, но на YouTube есть доклад Google Tech Talk по разработке приложений для iPhone с помощью Java, который выглядит довольно многообещающим.
Если вы можете подождать до конца этого года (точное время неизвестно), у 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.
XMLVM - это проект, который может переводить (некоторые) приложения Android на iPhone. Для получения дополнительной информации посетите http://xmlvm.org/android/