Цель Apportable — дать iOS разработчику перенести свое приложение на Android за час, без изменения кода, и поддерживать после этого одну кодовую базу. Как портировать простую игрушку на cocos2d — под катом
Заходим на сайт Apportable.
После регистрации нам дают выкачать SDK, ссылка специфичная для пользователя.
Выкачиваться оно будет очень долго — Apportable использует патченные android-sdk, ndk и прочую тяжелую артиллерию.
После установки оно скажет:
Toolchain downloaded into /Users/darvin/.apportable/toolchain. Apportable CLI is successfully installed at /Users/darvin/.apportable/SDK/bin/apportable If you're using the default shell, add the Apportable CLI to your PATH using: (echo; echo 'PATH="/Users/darvin/.apportable/SDK/bin:$PATH"') >> ~/.bash_profile; source ~/.bash_profile
Так и делаем:
$ echo; echo 'PATH="/Users/darvin/.apportable/SDK/bin:$PATH"') >> ~/.bash_profile; source ~/.bash_profile
Теперь выкачаем нашего подопытного кролика, какую-нибудь рандомную опенсорсную игру с гитхаба, запиленную на Objective-C/Cocos-2d (поддержка cocos2d у apportable особо хороша, они даже являются оффициальным спонсором cocos2d). Дисклеймер: автор не имеет никаго отношения к подопытной игре, она совершенно не адаптированна для Apportable SDK, просто игра на cocos2d
$ git clone https://github.com/haqu/climbers.git $ cd climbers
Проверяем, чтобы компилировалось из XCode:
$ open climbers.xcodeproj
Подключаем любимый Нексус (или галакси, или нонейм-китайца без google-apps — нет почти никакой разницы), запускаем утилиту, которая создаст climbers.approj (это набор настроек для Apportable, которые накладываются поверх .xcodeproj), скомпилирует проект и загрузит его на девайс:
$ apportable load
Утилита вначале спросит:
If the app is using OpenGL ES, does it use ES1 or ES2? (Cocos2D 1.X uses ES1, 2.X uses ES2) [1/2] 1 Should the app initially launch in landscape or portrait orientation? (default: landscape) [L/p] p
Игрушка использует Cocos2D 1.X, так что отвечаем «1», второй вопрос — «p».
После первой попытки компиляция отваливается с сообщениями об ошибках:
/Users/darvin/GAMES/climbers/Support/CocosDenshion/CDAudioManager.m:322: error: undefined reference to 'AudioSessionGetProperty' /Users/darvin/GAMES/climbers/Support/CocosDenshion/CDAudioManager.m:382: error: undefined reference to 'AVAudioSessionCategoryPlayAndRecord' ...вырезано... /Users/darvin/GAMES/climbers/Support/CocosDenshion/CDOpenALSupport.m:227: error: undefined reference to 'ExtAudioFileDispose' Updating Jar... scons: *** [Build/android-armeabi-debug/climbers/apk/lib/armeabi/libverde.so] Error 1 scons: building terminated because of errors.
Оно жалуется на отсутствующие AudioFile* функции… Гугль подсказывает, что они находятся в фреймворке AudioToolbox. Ну что ж…
$ vim climbers.approj/configuration.json
В разделе "add_params" находим строки:
// A list of dependencies. Typically these correspond to // frameworks in the xcode project. "deps": [""],
Исправляем на:
"deps": ["AudioToolbox"],
$ apportable load
Игра загружена на подключенный Android мобильник, даже есть звук. Графика немного сьехала — разработчик не расчитывал на разные разрешения андроидофонов, впрочем, это легко (и нужно) исправить, если же адаптировать графику лень, Apportable представляет workaround, который будет масштабировать графику, как если бы игра была запущена на iOS девайсе. Давайте попробуем второй путь:
В начале -[AppDelegate applicationDidFinishLaunching:] добавим:
#ifdef APPORTABLE [UIScreen mainScreen].currentMode = [UIScreenMode emulatedMode:UIScreenBestEmulationMode]; #endif
Здесь мы выставляем лучший режим эмуляции для девайса — если его разрешение/пропорции похожи на iPad — он будет эмулировать iPad, если на iPhone — iPhone.
Также стоит удалить ненужный код выбора ориентации:
#if GAME_AUTOROTATION == kGameAutorotationUIViewController [director setDeviceOrientation:kCCDeviceOrientationPortrait]; #else [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft]; #endi
Сохраняем, запускаем коммандой apportable load. Видим Objective-C/Cocos 2d игрушку на Нексусе:
Форк игрушки после портирования на Андроид. Всего один конфиругационный файл добавлен, пять строчек изменено в AppDelegate
Полный листинг сессии портирования
Доступна документация и список рассылки. Также наши специально обученные инженеры мониторят тэг на StackOverflow. Видео сессии портирования tweejump.
Starter редакция SDK бесплатна, подерживается Android 4+. Лучше всего Apportable подходит для портирования игр — у приложений все равно разные гайдлайны UI, a игры уже обкатаны на множестве лидеров аппстора. Буду рад ответить на любые вопросы, в следующей статье собираюсь рассказать как быстро и безболезненно выдрать возникающие при портировании баги и прозрачно, без изменения кодовой базы интегрировать социальные фреймворки, StoreKit и GameKit.
ссылка на оригинал статьи http://habrahabr.ru/post/190560/
Добавить комментарий