Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Взлом как образ мысли Взлом как образ мысли
Интервью с человеком, который, как оказалось, является не только талантливым пентестером в одной из крупных ИБ-компании, но и хакером-ветераном, который уверенными шагами вышел на свет и прикоснулся к истории российской хак-сцены....
Полный гид по накрутке онлайн-голосований Полный гид по накрутке онлайн-голосований
Конкурсы с голосованием привлекают большое количество посетителей, а трафик, как известно, — это деньги. Особый интерес вызывают конкурсы, где за победу предлагаются лакомые призы....

Кроссплатформенный кодинг для мобильных платформ: покоряем iOS, Android, Bada, Symbian и WM с помощью AirPlaySDK

Bookmark and Share

Ни для кого не секрет, что кодинг для мобильников — дело интересное, прибыльное и перспективное. Я всегда запускаю на КПК какую-нибудь игру, когда спускаюсь в метро, то же самое делают и окружающие меня люди. Но, к сожалению, нынешнее разнообразие платформ часто заставляет нас ограничить круг поддерживаемых устройств.

Что мы имеем?

Компания Ideaworks Labs позаботилась о нас и создала AirPlaySDK. Данный инструментарий позволяет написать код на C++ один раз и компилировать его в нативные приложения для платформ iPhone OS, Android, Samsung Bada, Symbian, Windows Mobile, BREW, Palm/HP WebOS и Maemo. Ну как, впечатляет? Кроме того, AirPlaySDK имеет отличную документацию (правда, на английском языке) и позволяет использовать уникальные особенности той или иной платформы. Ты можешь бесплатно скачать AirPlaySDK с сайта airplaysdk.com и попробовать, a можешь и купить Indie-лицензию всего лишь за 99$.

Создание проекта

AirPlaySDK позволяет писать приложения в Windows или в Mac OS, а также хорошо интегрируется с Visual Studio (начиная с версии 6.0) и XCode соответственно. Я буду ориентироваться на Visual Studio, но уверен, что для XCode все будет выглядеть ничуть не сложнее. Итак, ты скачал и установил AirPlaySDK и Visual Studio. Создай папку "HelloWorld" в каком-нибудь месте своего диска. Именно в этой папке будет размещаться наш первый проект.

Главным файлом всего решения является HelloWorld.mkb в папке HelloWorld, создадим его и откроем для редактирования, а затем впишем туда следующее содержимое:

options {
s3e-data-dir="data"
}
files {
    (source)
    HelloWorld.cpp
    HelloWorld.h
    HelloWorldMain.cpp
}
subprojects {
iw2d
}

Здесь параметр s3e-data-dir секции options определяет папку, в которой будут находиться ресурсы будущего приложения. Это могут быть изображения, музыка или что-нибудь еще. Создай объявленную нами папку data в папке HelloWorld. Секция files содержит список файлов проекта. В скобках мы указали папку source, которую тоже следует создать. В нее мы поместим три файла: HelloWorld.cpp, HelloWorld.h и HelloWorldMain.cpp. В секции subprojects находятся названия библиотек, которые мы хотим использовать в своем проекте.

Кроссплатформенный "Hello World!"

Итак, подготовка проекта закончена, и мы можем приступить к программированию. Для этого щелкни два раза на файле HelloWorld.mkb и насладись логотипом AirPlaySDK. Насладился? Это еще не все, ведь затем перед твоими глазами откроется проект в Visual Studio. Вбей в файл HelloWorldMain.cpp код "HelloWorldMain.cpp", а я потом поясню, что тут к чему.

#include "s3e.h"
#include "HelloWorld.h"
int main()
{
    GameInit();
    while (true)
    {
        s3eDeviceYield(0);
        s3eKeyboardUpdate();
        bool result = GameUpdate();
        if ((result == false) || (s3eKeyboardGetState(s3eKeyEsc) & S3E_KEY_STATE_DOWN) || s3eKeyboardGetState(s3eKeyLSK) & S3E_KEY_STATE_DOWN) || (s3eDeviceCheckQuitRequest()))
        break;
        GameRender();
    }
    GameShutdown();
}

С помощью директивы #include s3e.h мы подключаем стандартный заголовочный файл AirPlaySDK, который дает нам возможность работать с мобильным устройством. Функцию GameInit() мы напишем сами. Она будет инициализировать нужные нам переменные, создавать объекты, загружать ресурсы и выполнять прочие действия сразу же при старте программы. Функция s3eDeviceYield(..) останавливает работу устройства на указанное в параметре время и дает операционной системе возможность выполнить какие-нибудь действия. В качестве параметра этой функции мы передали ноль, и потому получим минимально возможную задержку, разрешенную операционной системой. s3eKeyboardUpdate() обновляет информацию о текущем состоянии клавиш мобильника и проверяет, не нажимал ли пользователь какие-либо клавиши во время прохода цикла. Функцию GetUpdate() мы тоже напишем сами. В ней обычно размещается вся логика работы приложения. Если ты пишешь игру — то в этой функции следует проверять, не умер ли очередной монстр после выстрела пользователя. Функция возвращает true, если приложение продолжает свою работу, и false, если, например, пользователь нажал "Выйти из игры". Далее следует проверка, не захотел ли пользователь выйти из приложения, нажав соответствующий пункт меню или клавишу телефона, и не просит ли операционная система наше приложение завершиться (в случае положительного результата завершается главный цикл). Если же приложение должно продолжить работу — идем дальше. В GameRender(), которую мы опять же создадим самостоятельно, идет отрисовка всего и вся на экран. И, наконец, GameShutdown() (уже четвертая пока что несуществующая функция) завершает работу нашего приложения, сохраняя результаты, освобождая память и совершая прочие необходимые операции.

Ну что же, главную функцию приложения мы разобрали. Стоит отметить, что файл HelloWorldMain.cpp — это шаблон. Такой файл с практически тем же содержанием будет присутствовать во всех проектах, которые ты будешь создавать при помощи AirPlaySDK.

Кроме двухмерной графики AirPlaySDK дает возможность создавать трехмерные игры, работать с GPS, звуками, списками контактов, сетью, видео и кучей других штучек.

Описываем логику приложения

Теперь самое время заняться функциями, которые будут определять непосредственно логику приложения. Для этого открой файл HelloWorld.cpp и вбей туда код "HelloWorld.cpp":

#include "Iw2D.h"
void GameInit()
{
    Iw2DInit();
}
bool GameUpdate()
{
    return true;
}
void GameRender()
{
    Iw2DSetColour(0xFF000000);
    Iw2DFillRect(CIwSVec2(0, 0), CIwSVec2(Iw2DGetSurfaceWidth(), Iw2DGetSurfaceHeight()));
    Iw2DSetColour(0xFF00FF00);
    Iw2DFillArc(CIwSVec2(Iw2DGetSurfaceWidth()/2, Iw2DGetSurfaceHeight()/2), CIwSVec2(30, 30), 0, 0x800 * 2);
    Iw2DSurfaceShow();
}
void GameShutdown()
{
    Iw2DTerminate();
}

Как ты уже заметил, код файла HelloWorld.cpp содержит те функции, которые я обещал описать. Ничего сложного в этом листинге нет. Он всего лишь закрашивает экран черным цветом и выводит посередине зеленый круг.

Теперь стоит описать прототипы этих функций в заголовочном файле HelloWorld.h, чтобы иметь возможность их вызова из главной функции main(). Выглядеть это будет следующим образом:

#ifndef HELLOWORLD_H
#define HELLOWORLD_H
void GameInit();
bool GameUpdate();
void GameRender();
void GameShutdown();
#endif

Листинг в комментариях не нуждается. Код нашего приложения готов, и ты можешь запустить его на исполнение, нажав клавишу F5 в Visual Studio. Перед тобой откроется окно эмулятора, которое продемонстрирует наше первое творение на AirPlaySDK.

Warning

Не переусердствуй, сидя за компьютером. Обязательно выходи на улицу, чтобы размяться и подышать свежим воздухом, а заодно купить свежий номер ][ :).

Сборка проекта

Ну что же, настало время продемонстрировать главное преимущество AirPlaySDK — переносимость приложений с одной платформы на другую. Выбери "GCC (ARM) Release" в качестве активной конфигурации проекта и нажми F5. Перед тобой появится окно Airplay System Deployment Tool. Отметь пункт "ARM GCC Release" и нажми "Next". Следующий шаг пока что не представляет для нас ничего интересного, поэтому нажми "Next" еще разок. Вот тут-то и требуется отметить то многообразие платформ, под которое мы хотим скомпилировать наше приложение. Давай отметим ОС Bada, нажмем "Deploy All" и подождем окончания компиляции нашего проекта. На этом создание первого приложения на основе AirPlaySDK окончено. Теперь самое время почитать документацию по этому инструментарию, ведь он поддерживает огромное количество функций мобильных устройств, которые ты можешь использовать в своих приложениях!

Links

  • На сайте проекта AirPlaySDK можно скачать весь инструментарий, а также найти качественную документацию: airplaysdk.com.
  • Есть такой сайт, где мелкомягкие бесплатно раздают Visual Studio студентам: dreamspark.com.


Теги: мобильные устройства , программирование





СЛЕДУЮЩИЕ СТАТЬИ
Ударь копирайтом по работодателю: возвращаем финансы, честно заработанные на служебных произведениях
Руткит в сетевухе: фантазии программиста о создании непобедимого руткита
Чемпионаты по программированию и не только
Алгоритмическая симфония из одной строчки кода
Kinect: разбираемся с новым девайсом и учимся писать для него приложения
Программное обеспечение: поглощая мир
SMS-похититель для Android: Sсriрting Layer for Android - интересная среда разработки для мобильного телефона
13 утилит для безопасной разработки: инструменты от Microsoft для написания надежного кода
Silverlight: защита и нападение
ПРЕДЫДУЩИЕ СТАТЬИ
Return-oriented rootkits наступают
Си на стероидах: знакомимся с языком программирования Go
Дышим свежим AIR-ом: кроссплатформенная среда для онлайн- и оффлайн-кодинга
Рулим форточками через PHP
В поисках слабого звена: как найти узкие места в приложениях
Неубиваемые кукисы: создаем Cookie, которые надолго задержатся в системе
Windows Filtering Platform в защите и нападении
Программирование и музыка: бэкграунд
Пуленепробиваемый C#: основные правила создания безопасного кода
Дверной замок на Arduino
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
23.07.2011 2:05:53
Ответить Ссылка
Эппл не даст выложить такие проги на AppStore.
UserГость
24.07.2011 14:59:42
Ответить Ссылка
quote:

Эппл не даст выложить такие проги на AppStore.


Соберись!! Ты, вообще, читал статью или хотя бы название? Это не прога, а framework, что-то похожее на Titanium http://www.appcelerator.com/products/titanium-mobile-application-development/
UserГость
24.07.2011 20:25:43
Ответить Ссылка
Поясню. Насколько я помню, всё, что написано не в XCODE / Objective-C Эпплом не пропустится, а то Qt бы уже давно портировали... Или сейчас что-то поменялось?

п.с. ну и капча, ппц
UserГость
24.07.2011 23:24:25
Ответить Ссылка
Компилить придется xcodom все равно. И нужен будет developer account. Так что Apple пропустит если небулут нарушены их требования к самой программе. Apple все равно на чем пишут приложения так как в итоге чтобы послать их в AppStore все равно нужен Mac и Developer account. Но самый лучший фреймворк на сегодняшний день это CoronaSDK.
UserГость
25.07.2011 12:25:11
Ответить Ссылка
А что же тогда Qt не портнут? (Вернее не портнули до его приобретения нокией)
UserMotoKiller
25.07.2011 15:10:39
Ответить Ссылка
Что то не понял - если написать на этом виджет, то он пойдет и на Android и на Symbian?
UserГость
25.07.2011 21:56:49
Ответить Ссылка
если финансирование позволяет есть решения и по лучше - unity3d
UserГость
26.07.2011 20:25:56
Ответить Ссылка
За статью спасибо:) Хех, во дают, AirPlaySDK теперь уже в мармеладку превратилась :D
UserГость
01.01.2012 17:51:47
Ответить Ссылка
а где теперь airplay взять. ато я поставил мармеладку и жутко за***ло их лицензирование.




Keywords: zPOSTz zSOFTz, zHOWz, zINFOz, zYANDEXz z56269z
Для Авторов: edit Lock delete Lock



    Rambler's Top100