Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Apportable SDK — Objective-C/Cocoa Touch для Android

Anna | 2.07.2014 | нет комментариев

Apportable SDK — это продукт, тот, что разрешает без изменений скомпилировать игру (либо приложение), разработанное на Objective-C/Cocoa Touch для iOS под Android. Это полный toolchain (компилятор, дебаггер, линковщик — все-все-все), работающие Foundation, CoreFoundation, UIKit, уйма других фреймворков из состава iOS, перенесенные на Android (даже такая «мелочь» как GameKit и StoreKit, с бэкендами для GooglePlus и Amazon GameCircle/Appstore).

Цель 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», 2-й вопрос — «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 девайсе. Давайте испробуем 2-й путь:

В начале -[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 игрушку на Нексусе:

image

Форк игрушки позже портирования на Андроид. Каждого один конфиругационный файл добавлен, пять строчек изменено в AppDelegate

Полный листинг сессии портирования

Доступна документация и список рассылки. Также наши намеренно обученные инженеры мониторят тэг на StackOverflowВидео сессии портирования tweejump.

Starter редакция SDK бесплатна, подерживается Android 4 . Отменнее каждого Apportable подходит для портирования игр — у приложений все равно различные гайдлайны UI, a игры теснее обкатаны на множестве лидеров аппстора. Буду рад ответить на всякие вопросы, в дальнейшей статье собираюсь рассказать как стремительно и безболезненно выдрать возникающие при портировании баги и прозрачно, без метаморфозы кодовой базы интегрировать общественные фреймворки, StoreKit и GameKit.

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB