FlyMove Пользователь Сейчас: Offline
Регистрация: 06.01.2011
| Часть 1
Недавно компания Samsung представила новую мобильную платформу Bada и выпустила смартфон на этой платформе, Samsung Wave. Для разработчика смысл ее в том, что она предоставляет некий стандартный набор API поверх системы на основе GNU/Linux или собственной проприетарной ОС.
В первой части статьи рассказано, с чего начать, сделан обзор Bada SDK, описаны его особенности, подводные камни, варианты решения проблем, — все основано целиком на собственном опыте. Во второй части будет рассказано про упаковку приложения (т.н. deployment), магазин Samsung Apps, продажу приложения на Bada с авторскими замечаниями и советами.
Желающим поиграться с Bada: писать код придется на C/C++, без сбора мусора и прочих благ цивилизации. Если вас это не пугает, прошу под кат.
Получаем SDK
Прежде всего необходимо зарегистрироваться на developer.bada.com и официально стать Bada-разработчиком. После успешной регистрации будут доступны ссылки на «SDK installer IDE and Simulator/Target SDK» (354 мб) и «Language pack 1 installer» (170 мб). Думаю, из названий и справки на странице загрузки всем очевидно, для чего нужен каждый файл — это непосредственно платформа и поддержка симулятора Wave. На момент написания статьи версия SDK 1.0.0b3. SDK в настоящее время работает только под Windows, однако, как станет понятным далее, Samsung не составит большого труда портировать его на GNU/Linux и другие UNIX-like ОС. Устанавливается все без каких-то проблем.
Анализ SDK
Samsung в целом положилась на открытые технологии. Компания купила решение CodeSourcery, которое в свою очередь является сборкой Eclipse Mylyn и GNU Toolchain. Последнее означает, что код компилируется GCC (aka MinGW) версии 4.4.1. В Eclipse добавлены «секретные» плагины Samsung.
Для отладки на компьютере используется симулятор. Напомню, что симулятор, в отличие от эмулятора, исполняет код, родной для компьютера, а не отлаживаемого устройства. Это означает, что для более-менее твердой уверенности в работоспособности приложения необходимо разориться на соответствующее железо. Будем надеяться, в будущем симулятор заменят эмулятором.
В составе SDK ставится документация в PDF (/Documents), которая годится разве что толкать презентации перед настоящими разработчиками или улавливать общую суть API. Я советую пользоваться Bada API Reference.
Hello, World!
На самом деле легче будет сначала посмотреть многочисленные примеры приложений (/Samples). Корейцы не поленились и создали 42 различных мини-программ, демонстрирующих ту или иную функциональность. Импортируйте понравившийся пример, затем соберите его и запустите. Замечу, что сначала нужно именно собрать, а потом запустить, иначе IDE ругнется, что нет бинарников. Надо полагать, это баг: в остальных случаях достаточно лишь запустить приложение, измененный код будет автоматически перекомпилирован.
Симулятор запускается на моем Aspire 5920g около 10 секунд, в режиме отладки GDB — 20 секунд. Расстраивает, что при каждом новом запуске приложения необходимо перезапускать симулятор, иначе IDE ругается что он уже запущен. Что касается самого симулятора, он весьма аскетичен: при нажатии на джойстик попадаем в главное меню, состоящее из иконок когда-либо запущенных приложений и настроек. При попытке запустить из меню приложение ничего не выходит — скорее всего, это сделано специально. С помощью контекстного меню симулятора можно создавать события (их довольно много, чего только нет — даже магнитным сенсором можно управлять), снимать скриншоты и изменять размер окна «смартфона».
bada API
Первое, что мне пришло в голову — раз язык платформы C/C++, стоит попробовать портировать многочисленный код на Bada. Однако, порт может не получиться совсем, или превратиться в войну с API. Все дело в том, что в Bada POSIX реализован не полностью, основное вроде все есть, но, к примеру, POSIX threads нет (об этом написано в FAQ). Отчасти положение с pthreads может исправить мой проект с открытым исходным кодом и MIT лицензией на CodePlex. Стандартные заголовочные файлы C реализованы в libc-newlib — специальной библиотеке для встраиваемых решений ARM. Зато STL работает отлично. Также, никто не запрещал применять Boost. Полная картина складывается в обсуждении статьи.
Собственный Bada API очень напомнил мне C#/.NET. Судите сами: все классы наследуются от Object, например String, File, Directory, Int64. У Object реализован метод GetHashCode(). Имена совпадают довольно часто. Ведь это же здорово, не так ли? Из неприятных моментов следует отметить отсутствие ToString() и несостоятельность GDB при попытке просмотра экземпляра String. Отладчик может показать лишь первый символ и длину строки. API работает на юникоде и полностью асинхронно, исключения C++ поддерживаются, но не используются. В целом, остались приятные впечатления: классы и методы тщательно задокументированы, с примерами использования, понятные имена и продуманные namespace-ы.
API файловой системы прост и понятен. Каждому приложению присваивается приватная домашняя директория /Home. Из папки ресурсов /Res можно читать, соответственно, ресурсы. Подробнее см. Bada File System
Приложения Bada многопоточны. Но вместе с тем Bada — псевдомногозадачная. Об этом уже писали, и повторяться я не буду, лишь дам ссылку на Application UI Guide.
Приватность и безопасность
Разработчики очень внимательно подошли к этой проблеме, если не сказать фанатично. Задействована система привилегий. Например, чтобы создать рисунок в папке /Media, необходима привилегия LOCAL_CONTENT. При этом принципиально невозможно получить доступ к входящим SMS/MMS/EMail владельца смартфона или использовать IO для записи в директории, отличные от домашних. В последнем случае возможен трюк с методами Osp::Content::ContentManagerUtil CopyToMediaDirectory/MoveToMediaDirectory. Однако, создавать папки вне домашней директории не представляется возможным.
Интерфейсы
В Bada работа с графическим интерфейсом смартфона реализована через XML файлы ресурсов. Доступен графический редактор. Есть 3 типа файлов — формы (Form), всплывающие окна (Popup) и панели (Panel, ScrollPanel). Использование в коде выглядит примерно так:
Popup popup;
popup.Construct(L"IDP_POPUP_NAME");
Button *button = static_cast<Button *>(popup.GetControl(L"IDC_BUTTON_PUSHME"));
Минус — для каждого разрешения экрана придется заново делать ресурсы. Все позиционируется жестко и по пикселям.
Приложение готово. Что дальше?
Итак, у вас есть код приложения. Вызовом из IDE Project/Privilege Check узнаем, какие нам нужны привилегии. Или анализируем код сами на основе документации. В своем профиле на developer.bada.com заходим в My Applications и заводим новое приложение. Если название уже кем-то занято, придется в своем коде везде его переправлять, так что разумно сделать нечто вроде
#define MYAPPNAME SuperBadaApp
Далее указываем список требуемых привилегий и в конце получаем манифест, который необходимо загрузить. Это XML файл, связывающий уникальный ID приложения с привилегиями. Теперь создаем новый Bada-проект в Eclipse и вместо дефолтного манифеста указываем скачанный. Копируем код и собираем проект в конфигурации Target-Release. Проверяем на железе. Если все работает как надо, переходим к развертыванию приложения и маркетингу, чему посвящена вторая часть статьи.
Итог
Был проведен краткий обзор Bada SDK, описаны некоторые проблемы и способы их решения, впечатления автора, а также приведена информация для начинающих разработчиков. Разумеется, обзор сумел охватить лишь часть богатого Bada API. Спасибо за внимание!
Изменено FlyMove (6.01 / 22:23) (всего 1 раз) |