Кроссплатформенный обмен кодами iPhone / Android - PullRequest
39 голосов
/ 04 марта 2010

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

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

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

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

Ответы [ 11 ]

21 голосов
/ 04 марта 2010

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

Итак, движок C ++ / C (почти такая же кодовая база для Android и iPhone) + слой тонких привязок = переносимый код.

8 голосов
/ 04 марта 2010

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

5 голосов
/ 05 марта 2010

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

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

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

2 голосов
/ 15 мая 2011

XMLVM выглядит заслуживающим внимания.

2 голосов
/ 04 марта 2010

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

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

1 голос
/ 08 мая 2012

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

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

1 голос
/ 25 марта 2011

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

На моем ПК:

gamename - содержит только общий код

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

gamename-win32 - для сборки в Windows используется код из проекта gamename

На моем Mac:

gamename - содержит только общий код

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

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

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

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

0 голосов
/ 18 апреля 2019

Вы можете использовать Scapix Language Bridge для автоматического соединения C ++ с Java и ObjC / Swift (среди других языков). Код моста автоматически генерируется на лету прямо из заголовочных файлов C ++. Вот пример :

Определите свой класс в C ++:

#include <scapix/bridge/object.h>

class contact : public scapix::bridge::object<contact>
{
public:
    std::string name();
    void send_message(const std::string& msg, std::shared_ptr<contact> from);
    void add_tags(const std::vector<std::string>& tags);
    void add_friends(std::vector<std::shared_ptr<contact>> friends);
};

И позвони из Свифта:

class ViewController: UIViewController {
    func send(friend: Contact) {
        let c = Contact()

        contact.sendMessage("Hello", friend)
        contact.addTags(["a","b","c"])
        contact.addFriends([friend])
    }
}

А с Java:

class View {
    private contact = new Contact;

    public void send(Contact friend) {
        contact.sendMessage("Hello", friend);
        contact.addTags({"a","b","c"});
        contact.addFriends({friend});
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...