- PVSM.RU - https://www.pvsm.ru -
Apportable SDK [1] — это продукт, который позволяет без изменений скомпилировать игру (или приложение), разработанное на Objective-C/Cocoa Touch для iOS под Android. Это полный toolchain (компилятор, дебаггер, линковщик — все-все-все), работающие Foundation, CoreFoundation, UIKit, множество других фреймворков из состава iOS, перенесенные на Android (даже такая «мелочь» как GameKit и StoreKit, с бэкендами для GooglePlus и Amazon GameCircle/Appstore).
Цель Apportable — дать iOS разработчику перенести свое приложение на Android за час, без изменения кода, и поддерживать после этого одну кодовую базу. Как портировать простую игрушку на cocos2d — под катом
Заходим на сайт Apportable [1].
После регистрации [2] нам дают выкачать 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
Теперь выкачаем нашего подопытного кролика, какую-нибудь рандомную опенсорсную игру с гитхаба [3], запиленную на Objective-C/Cocos-2d (поддержка cocos2d у apportable особо хороша, они даже являются оффициальным спонсором cocos2d [4]). Дисклеймер: автор не имеет никаго отношения к подопытной игре, она совершенно не адаптированна для 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 [5], который будет масштабировать графику, как если бы игра была запущена на 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 игрушку на Нексусе:
Форк игрушки [6] после портирования на Андроид. Всего один конфиругационный файл добавлен, пять строчек изменено в AppDelegate [7]
Полный листинг сессии портирования [8]
Доступна документация [9] и список рассылки [10]. Также наши специально обученные инженеры мониторят тэг на StackOverflow [11]. Видео [12] сессии портирования tweejump [13].
Starter редакция SDK бесплатна [14], подерживается Android 4+. Лучше всего Apportable подходит для портирования игр — у приложений все равно разные гайдлайны UI, a игры уже обкатаны на множестве лидеров аппстора [15]. Буду рад ответить на любые вопросы, в следующей статье собираюсь рассказать как быстро и безболезненно выдрать возникающие при портировании баги и прозрачно, без изменения кодовой базы интегрировать социальные фреймворки, StoreKit [16] и GameKit.
Автор: sergeyklimov
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ios/41233
Ссылки в тексте:
[1] Apportable SDK: http://apportable.com
[2] регистрации: https://www.apportable.com/account/new
[3] рандомную опенсорсную игру с гитхаба: https://github.com/haqu/climbers
[4] являются оффициальным спонсором cocos2d: http://www.cocos2d-iphone.org/forums/topic/apportable-has-become-the-official-cocos2d-sponsor/
[5] workaround: http://docs.apportable.com/uikit-extensions.html#uiscreen
[6] Форк игрушки: https://github.com/darvin/climbers
[7] Всего один конфиругационный файл добавлен, пять строчек изменено в AppDelegate: https://github.com/darvin/climbers/commit/39b369a8949b78f803a1ca1e1b15b5b4b3c9f982
[8] Полный листинг сессии портирования: https://gist.github.com/darvin/6248126
[9] документация: http://docs.apportable.com/index.html
[10] список рассылки: https://groups.google.com/forum/#!forum/apportable-discuss
[11] тэг на StackOverflow: http://stackoverflow.com/questions/tagged/apportable
[12] Видео: http://www.youtube.com/watch?v=40rAtzemb-4
[13] tweejump: https://github.com/haqu/tweejump
[14] бесплатна: http://www.apportable.com/pricing
[15] множестве лидеров аппстора: http://www.apportable.com/customers
[16] StoreKit: http://docs.apportable.com/publishing.html#storekit-google-play
[17] Источник: http://habrahabr.ru/post/190560/
Нажмите здесь для печати.