Эта тема часто заполнена догмой техники джихадистов, поэтому я постараюсь избежать этого в своем ответе.
По моему опыту, я бы в основном согласился с мнением людей, что попытка поделиться кодом между двумя платформами будет трудной. Однако есть несколько важных исключений:
Я бы рассмотрел кроссплатформенную разработку, где ваша бизнес-логика :
- нетривиально;
- должен быть стандартизирован для разных платформ; и
- имеет четко определенные взаимодействия с внешним миром (например, сетевой стек или пользовательский интерфейс).
- (бонус) уже написано.
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.