Существуют ли какие-либо огромные различия между целью-c и Java, или iPhone и Android? - PullRequest
13 голосов
/ 24 июля 2010

Редактировать: Мой плохой, я имел в виду цель-с, а не с #.По какой-то причине я получил его в голову, это был C # Iphone используется.Так что ответы на c # были отличными, спасибо, но они немного неуместны, извините за это.

Я посмотрел, но не могу найти ничего, что отвечает на это, хотя некоторые сократили вопрос наотвечая на его части.Между небольшой группой мы планировали сделать какую-то работу на iPhone и Android, 2 по большей части разделили друг друга, но помогали друг другу, и с некоторыми ребятами, работавшими над графикой, они разделились между ними.

Но мы былидумать о возможностях перемещения вещей между двумя, не обязательно приложениями, может быть, просто полезными классами или чем-то еще.Рассматривая target-c и Java, они, по-видимому, имеют примерно те же функции, что и самое большое препятствие, которое может быть связано с интерфейсом системы, поэтому мы задались вопросом: можем ли мы создать абстракцию над ними в каждой системе, чтобы им можно было давать одинаковые входные данные?(что, если я не ошибаюсь, не будет слишком напрягать систему?), возникнут ли какие-либо проблемы в написании чего-либо для преобразования между target-c и Java, что хуже, чем расположение методов в sdks?Или есть какие-то ключевые функции или что-то на одном языке, которого нет у другого, который мы упустили, и это означало бы, что единственный способ сделать это - переписать с нуля.

Ответы [ 8 ]

52 голосов
/ 29 июля 2010

Я бы не стал тратить время, пытаясь найти сходство между iOS и Android.

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

Межплатформенные среды разработки добавляют, а не уменьшают сложность в долгосрочной перспективе.Да, это звучит аккуратно, но обычно вы получаете 90% того, что вы хотите легко, а затем вы сталкиваетесь с препятствиями, которые разрушают все сбережения, которые вы сделали, и затем начинаете ставить вас в дыру.Есть просто много компромиссов, и квадратные колышки заклинивают в круглые отверстия.

Если ваше приложение теоретически не может работать с общей веб-страницы, кросс-платформенность не для вас.

В конкретном случае Objective-C и Java, хотя Java происходит от Objective-С ними нет современной совместимости.Вы не можете использовать код из одного на другой.

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

4 голосов
/ 28 июля 2010

Такие инструменты, как XMLVM , Codename One * и iSpectrum говорят нам о том, что вы действительно можете кросс-компилировать код Java (из приложения Android или создать его с нуля)) в код Objective-C, который выполняется на iPhone без необходимости устанавливать какую-либо виртуальную машину на стороне Apple.

Я предлагаю посмотреть Разработка приложений для iPhone с использованием Java

К сожалению, лицензионное соглашение Apple на iPhone SDK запрещает портирование виртуальной машины Java на iPhone.В этой презентации мы представляем кросс-компилятор с открытым исходным кодом Java-to-Objective-C , а также реализацию библиотеки Какао на основе Java.С помощью этих инструментов приложения для iPhone могут быть написаны на чистом Java.Используя Java-версию Cocoa, можно запускать Java-приложение для iPhone в качестве Java-приложения для рабочего стола / апплета, которое можно кросс-компилировать для собственного запуска на iPhone.В докладе будут обсуждаться проблемы кросс-компилятора Java-Objective-C, а также версия Cocoa на основе Java.Подробности доступны по адресу http://www.xmlvm.org/

, а для более подробной информации о недавнем выступлении о кросс-компиляции приложений Android для iPhone от февраля 2010 г. можно прочитать здесь , что описано наhttp://www.xmlvm.org/android/:

Android - это платформа с открытым исходным кодом для мобильных устройств.По инициативе Google Android получил много внимания.Приложения Android разрабатываются с использованием Java, хотя специальный компилятор преобразует файлы классов в собственную виртуальную машину на основе регистров, которая используется на устройствах Android для выполнения приложений.Android определяет собственный API для написания мобильных приложений.С помощью XMLVM можно выполнять кросс-компиляцию приложений Android на основе Java для собственных приложений iPhone.

Приложение Android написано на Java и использует специальный API для Android.XMLVM предлагает библиотеку совместимости, написанную на Java, которая предлагает тот же API, что и Android, но использует только API на основе Java для Cocoa Touch.В процессе кросс-компиляции и приложение, и библиотека совместимости Android кросс-компилируются из Java в Objective-C и связываются с библиотекой совместимости Cocoa Touch для получения собственного приложения iPhone.

ОтРазговор 2008 года о создании Java-приложений для iPhone http://www.xmlvm.org/iphone/:

iPhone Apple вызвал огромный интерес как у пользователей, так и у разработчиков.Как и MacOS X, среда разработки iPhone основана на Objective-C в качестве языка разработки и Cocoa для библиотеки GUI.Лицензионное соглашение iPhone SDK не разрешает разработку виртуальной машины.Используя XMLVM, мы можем обойти эту проблему путем кросс-компиляции Java для iPhone.Так же, как Java-приложение может быть кросс-скомпилировано в AJAX, XMLVM может использоваться для кросс-компиляции Java-приложения в Objective-C.Кросс-компиляция также выполняется путем имитации стекового компьютера в Objective-C.

3 голосов
/ 03 августа 2010

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

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

Я бы рассмотрел кроссплатформенную разработку, где ваша бизнес-логика :

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

Apple - это шаг определения скорости, учитывая ныне печально известные ограничения 3.3.1 для языков исходного кода. Вы можете написать код на Javascript в соответствии с комплектом Webkit, C, C ++ и Objective C.

Если вы не хотите устанавливать дополнительные языки на droid, вы можете использовать Java, которая компилируется в код dalvik, Javascript в соответствии с немного отличающейся сборкой webkit или чем-то из NDK. Тогда вы будете смотреть на C / C ++. Вы могли бы кросс-компилировать Objective-C, но у меня не было никакого опыта этого.

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

Я бы не пытался написать кроссплатформенный код пользовательского интерфейса на C / C ++, и либо написал бы что-нибудь, использующее HTML / CSS / JS, либо, скорее, написал бы что-то совершенно нестандартное, чтобы воспользоваться преимуществами различных UF метафоры на каждой платформе - например, на iPhone нет аналога панели уведомлений. Анимация на iPhone на порядок проще в реализации, чем на Android.

Если вам не требуется массовая интеграция пользовательского интерфейса с ОС, тогда веб-просмотра и некоторого HTML5 может быть достаточно. Титаниум - хороший вариант, и мои коллеги знают, что он лучше (то есть компилируется, а не интерпретируется), чем PhoneGap. Опять не знаю.

Если пойти по другому пути сложности, Open GLES доступен на обеих платформах.

Следует также отметить, что SVG недоступна в текущей версии ОС Android.

3 голосов
/ 24 июля 2010

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

C # имеет лучшую реализацию обобщений, чем Java, поскольку обобщения C # сохраняют строгую типизацию во время выполнения.

C # также имеет LINQ, который, насколько я знаю, не имеет эквивалента (пока) в Java.LINQ предоставляет возможность запросов в стиле SQL, встроенную в язык и полностью поддерживаемую .NET frameowrk, которая позволяет запрашивать коллекции объектов и делает это в стиле очень функционального языка.LINQ могут быть расширены поставщиками запросов для работы с другими форматами данных, такими как XML и SQL, после того как поставщик запросов предоставит объектную модель, которая преобразуется в другой формат.LINQ также делает распараллеливание очень простым для многоядерной работы.Это огромное расширение возможностей языка.

2 голосов
/ 24 июля 2010

Опубликованные ответы, несмотря на это, посмотрите на этот вопрос:

Кроссплатформенный обмен кодами iPhone / Android

1 голос
/ 28 июля 2010

Если вы действительно хотите заняться кросс-телефонной разработкой, если это не что-то действительно вычислительно дорогое, я бы, вероятно, выбрал PhoneGap .

PhoneGap является открытымрамки разработки исходного кода для создания кроссплатформенных мобильных приложений.Создавайте приложения на HTML и JavaScript и при этом пользуйтесь основными функциями SDK для iPhone / iTouch, iPad, Google Android, Palm, Symbian и Blackberry.

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

Если вы не уверены в нативной разработке, я думаю, вы обнаружите, что если вы не создаете игру и не ориентируетесь на c, она будетмного работы в порт.Фреймворки очень разные, и способ создания пользовательского интерфейса очень отличается.Тем не менее, чтобы ответить, что вы прямой вопрос объективной C против Java, это не так уж плохо.Однако достаточно отличается, что инструмент абстракции не будет таким простым - не так, как Java против C #.Например, у Objective-c нет сборки мусора (на iPhone в любом случае), а синтаксис сильно отличается.Objective-c более свободно набирается так, как он выполняет вызовы методов (сообщения в target-c).Тем не менее, они не сильно отличаются друг от друга с точки зрения парадигм программирования.Они оба являются объектно-ориентированными императивными языками.У них обоих есть классы и методы, публичные и частные.Если бы вы хотели портировать код вручную, это не стало бы концом света, я просто думаю, что вы могли бы потратить гораздо больше времени на создание уровня абстракции.

0 голосов
/ 24 июля 2010

Если вы думаете о разработке для Android, мой лучший совет - пойти на Java.Нет никакой пользы от написания полного слоя абстракции (если вы можете) для преобразования из C # в Java.Что касается разработки IPhone, не сомневайтесь в использовании Objective-C для той же цели.

0 голосов
/ 24 июля 2010

Нельзя разрабатывать для iPhone на том же языке, что и для Android. Для iPhone вы можете программировать только в Objective C, разработанной Apple. Вы не можете использовать его для Android, и единственный способ сделать это для iPhone - использовать этот язык (это входит в пользовательское соглашение).

Что касается C # и Java, то весь принцип другой. Java - один язык для каждой платформы, .Net - одна платформа для каждого языка. Они не совместимы. Вы можете использовать Java на Android, но я не уверен, что вы также можете использовать C # (.Net).

В любом случае вам придется создавать два разных приложения для этих двух мобильных операционных систем.

...