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

Проще говоря: Каков наиболее эффективный способ совместного использования / повторного использования кода между iPhone и Android?

Я думаю, что два наиболее распространенных сценария:

  1. Blank slate новый проект, зная заранее, есть большой кусок многоразовой логики, который нужно запускать на каждом устройстве.
  2. Существующая база кода iPhone, портирование C, C ++ и Objective-C на Android NDK или в противном случае.

Да, конечно, в идеальном мире все приложения просто подключались к волшебному облаку, и вся логика многократного использования была бы в Google App Engine или некоторых веб-сервисах, но это не дух этого вопроса. После того, как я столкнулся с портом iPhone для Android без повторного использования кода во второй половине дня и увидев боль, которую должен был переносить человек, я хотел бы знать, как другие люди избегают этого.

По моему опыту, вы можете использовать Android NDK для компиляции C и C ++, поэтому, если вы используете привязки iPhone Obj-C ++ (.mm) для движка C ++ / C на iPhone, а в Android вы используете привязки Java к одному движку, Это должно быть вполне возможно.

Итак, C ++ / C engine (почти такая же кодовая база для Android и iPhone) + Thin bindings layer = Portable code.

Как я сказал кому-то, кто задал подобный вопрос некоторое время назад, используйте MVC и реализуйте MC в C ++ и V в obj-c или Java.

Пишите как можно больше в простой старый C (или C ++, если необходимо) и просто включайте те же файлы в Android и iPhone. Работает и на Windows / Mac. «Кросс-платформенные» библиотеки, как правило, потребляют вас.

Вы могли бы пойти с SDK Marmalade … Скомпилировать один раз для встроенного ARM и развернуть как на Android, так и на iPhone с тем же двоичным, стандартным C / C ++, разрабатывать на Windows или Mac, много (необязательно) промежуточного программного обеспечения.

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

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

XMLVM стоит попробовать.

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

На моем ПК:

Gamename – содержит только общий код

Gamename-android – в основном поддерживает специфический для Android Android код Android и Android, разработчики указывают на проект игрового имени для общего кода

Gamename-win32 – Просто для построения в Windows, использует код из проекта gamename

На моем Mac:

Gamename – содержит только общий код

Gamename-ios – сборка iPhone / iPad, импорт общего кода

Gamename-osx – Собственная сборка OSX. Импортирует общий код.

И я использую SVN для совместного использования между моим ПК и Mac. Мои единственные реальные проблемы – когда я добавляю классы в общую базу кода в Windows, а затем обновляю mac, чтобы вытащить их из SVN. XCode не имеет возможности автоматически добавлять их в проект без скриптов, поэтому я должен каждый раз вытаскивать их вручную, что является болью, но не является концом света.

Все это происходит с BatteryTech, поэтому легко понять, как только вы его получите.

Moai бесплатно для небольших проектов, а также используется в больших студиях. Я сам запускаю сам доморощенный, но если бы я этого не сделал, я бы, вероятно, использовал сам Моай, поскольку он выглядит очень многообещающим. Они утверждают, что это порты для Mac, ПК, iOS, Android, и я думаю, что даже Kindle Fire.

Вы хотите написать основную часть кода в Lua, я думаю, но у вас будет доступ ко всему коду, поэтому вы можете использовать C ++, когда вам это нужно.

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