Существуют ли какие-либо огромные различия между objective-c и Java, или iPhone и Android?

Изменить: Мой плохой, я имел в виду objective-c, а не С#. По какой-то причине я понял, что это был С# iphone. Поэтому ответы на С# были отличными, спасибо, но они немного неактуальны, извините.

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

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

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

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

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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