Содержание статьи
Чтобы разрабатывать приложения, есть огромное количество решений. Но если это необходимо делать быстро и под все платформы сразу, чтобы программа работала и на iPhone/iPad, и на Android, и на соседнем компьютере с любой осью, то вариантов почти нет. Единственная надежная технология — Appcelerator Titanium, одно из самых современных и продвинутых решений на сегодняшний день.
Разные платформы были всегда, но сегодня это разнообразие стало особенно заметно. Появление Ubuntu и Mandriva позволило многим пользователям открыть для себя Linux, хотя еще недавно многие из них о существовании чего-либо, кроме Windows (как же без нее?), не подозревали. Другие вероотступники соскочили на MacOS и теперь смотрят на других свысока. А если заглянуть в карман? Миллион разных гаджетов, и ведь, как назло, у всех разная платформа. Apple каким-то невероят ным способом подсадил миллионы людей на iPad/iPhone с iOS, Google лезет во все щели рынка со своим Android OS, а ведь есть Windows Mobile, сразу несколько платформ от Nokia, никому неизвестные у нас, но зато дико популярные на западе телефоны BlackBerry со своей собственной ОС. Получается настоящий зоопарк. А теперь посмотрим на бедного программиста. Ведь как же хочется один раз написать приложение, воплотить все свои мысли и идеи, а потом легким движением руки запускать программу везде. Но ведь фиг!
Да, есть Java, на которой, как предполагалось, программы будут работать абсолютно везде, но только мало что получилось. Если на десктопах Java-приложения работают еще более менее (хотя многие при этом морщат носом, мол, «Ох, опять эта тормозная Java»), то с мобильной стороной у платформы сейчас полный провал. Хотя внутри Android’а и лежит Java, она сильно урезана и подогнана под возможности смартфонов. Короче говоря, если захочешь писать под все это разнообразие, готовься осваивать под каждую платформу свой язык, компилятор, ограничения платформы и API, а еще придется раскошелиться — для iPad/ iPod/iPhone особо не попишешь без реального устройства и железного мака.
Но лень, как говорится, двигатель всей ИТ-мысли. Относительно недавно появились предприимчивые парни из стартапа Appcelerator, которые выложили в открытом виде специальный фреймворк и систему разработки Titanium. И никто, возможно, не взглянул бы на их творение (в конце концов, сейчас же столько различных сред и фреймворков), если бы не те чумовые возможности, которая она сразу предложила. Ты пишешь программу один раз, используя только единственную систему API, а потом компилируешь одним кликом под разные системы: Windows, Linux, MacOS и… мобильные платформы! Но как?
Титановый скелет
Appcelerator Titanium — это не просто чудо-компилятор. Это целая система для быстрой кросс-платформенной разработки приложений, тестирования, сборки и распространения на всех доступных платформах, включая мобильные. Но это еще не самое главное.
Ведь в основе всего лежат стандартные веб-технологии: HTML 5, CSS и JavaScript. С учетом нынешних трендов сложно представить что-то другое. На деле это означает, что с Titanuim ты можешь разрабатывать приложения для десктопа, как если бы ты верстал простой сайт, а потом просто скомпилировать и получить бинарный исполняемый файл. Мало того, как и в случае с веб-приложениями, всю функциональность можно разрабатывать на привычных динамических языках: Python, Ruby и даже на PHP. Чтобы еще раз осознать суть, повторю: как тебе идея создать знакомыми веб-средствами полноценное приложение , которое в один клик можно скомпилировать под Windows, Linux или смартфон на Android? Супер-решение!
Создавать приложения с помощью Titanuim ты можешь в любой удобной среде разработки или даже в Блокноте. В проект включаются необходимые файлы: графические, стили, HTML-странички и любые другие ресурсы. Если придется что-то реализовывать вне приложения, к твоим услугам API-интерфейс, который предоставляет Titanium. Это необходимо, чтобы абстрагироваться от конкретных платформ — тебе не надо думать: «А как, черт возьми, открыть файл на устройстве Blackberry или создать диалоговое окно?». Большая часть API доступна для всех устройств, а если какой-то функции нет, она эмулируется. Все это работает как runtime-прослойка (для каждой платформы своя), но тебя это уже не беспокоит, ведь приложение работает только поверх своей среды. Внутри приложения лежит лучший из современных веб-движков — Webkit, который используется как рендер HTML/CSS, а также как среда исполнения JavaScript-кода. Эта часть платформы всегда доступа.
Если же ты хочешь писать на других языках, например, PHP или Ruby, их интерпретаторы и необходимые библиотеки будут включены в приложение. Внутри системы есть API для связки всех языков вместе, поэтому просто можешь писать на том, что лучше знаешь, а потом связать все вместе. Приятно, что разработчики не стали модифицировать базовые дистрибутивы языков — например, РНР можно обновить, просто скопировав в SDK файлы из официального дистрибутива.
Вторым компонентом Titatium’а является специальное приложение для сборки проекта, созданное, конечно же, на своей платформе. С его помощью ты можешь создать профиль приложения, задать его базовые параметры, а потом одной кнопкой запустить и проверить, что вышло. На твоем компьютере код будет запакован в двоичный исполняемый файл, слинкован с runtime-платформой и выполнен. Если все хорошо и правильно работает, смело переходи к последней фазе разработки.
Appcelerator использует собственную облачную платформу для компиляции и создания приложений для разных платформ, поэтому на компьютере ты сможешь собрать только тестовый вариант приложения для проверки его работы. Сами же исполняемые файлы для разных платформ будут собраны на мощностях компании, а тебе выдадут только красивую страничку со ссылками на все доступные варианты. Маленькая оговорка: выдадут, только если не глючит система сборки, которая почему-то частенько обламывает меня с компиляцией. На этом этапе ты просто выбираешь целевые платформы, а также вариант установки, который будет использоваться. Если не заморачиваться по поводу размера приложения, то можно слинковать рантайм и библиотеки Titanium’а вместе с самим приложением (такой пакет называется bundled).
Если же хочешь получить минимальный инсталлятор, то выбери Network; тогда при установке программа сама загрузит необходимые ему компоненты из Сети. Если разрабатываешь что-то коммерчески интересное, то необязательно выкладывать свое творение сразу для всех, приложения могут быть приватными — тогда его смогут поставить только те, кому ты сообщишь ссылку на страницу загрузки. Если же ты сделал обновление к уже существующему приложению, то всем пользователям будет разослано уведомление, что вышла новая версия, и они смогут быстро ее установить.
Разбираемся с API
Самая интересная для тебя, как разработчика, часть платформы — это ее API. Ведь именно через него строится приложение и использует функционал девайсов, на которых будет работать программа. Я не стану тебе пересказывать содержание документации, которая доступна на сайте, а лучше расскажу о ключевых модулях, которые будут полезны для создания приложений с уникальным функционалом.
Database — встроенная база данных SQLite, легко встраиваемая в приложение. Network — самый богатый компонент для взаимодействия клиентов и серверов. Вспомни, сколько костылей надо, чтобы добавить функции общения в реальном времени для веб-приложений: разные там Comet, WebSokets и прочие технологии. Забудь, здесь есть все, что необходимо для прямой работы с сокетами: HTTP-клиент и сервер, а также другие приятные бонусы вроде встроенного компонента для IRC-чатов. Worker — это модуль для построения многопоточности, взятый, как ты уже догадался, из спецификации HTML5. Если тебе надо что-то делать в фоновом режиме, чтобы не грузить приложение, просто создай воркера и дай ему задачу, она будет выполняться параллельно в соседнем потоке, обмениваясь сообщениями с основным приложением, никак не тормозя его.
UI — в этом модуле доступна работа с буфером обмена, панелью задач и треем. Приложение на базе Titanium’а будет вести себя идентично родным системным программам, даже не подозревая, что внутри на самом деле веб-страницы на JavaScript, дополненные возможностями HTML5.
Модули для работы с кодеками и мультимедиа. Пока что это слабое место платформы. Вот было бы круто, если бы встроили сразу видеокодеки, например, нашумевший гугловский VP8/WebM. Это бы обеспечило возможность делать серьезные мультимедийные приложения, порвав в клочья ближайшего конкурента, Adobe AIR, на его же поле.
Analytics — встроенная система для получения подробной статистики использования приложения. Это что-то типа Google Analytics, но для приложения. И, кстати, это очень круто — видно, что разработчики не только увлеклись крутостью своей платформы, но и поняли, что без таких вещей в суровый мир коммерческих решений не пробиться.
UpdateManager — модуль обновлений. Любое приложение развивается и дополняется, и, чтобы не заставлять пользователей повторно что-то скачивать и ставить, в базовый API входит компонент UpdateManager, который берет всю эту рутину на себя. Можешь спать спокойно: как только появится новая версия приложения, оно будет сразу доступно всем пользователям.
Надо сказать, что API для мобильных устройств немного отличается от десктопного. В основном это выражается в доступности некоторых специфических модулей для работы со списком контактов, использования акселерометра и т.п. Остальные модули практически идентичные, поэтому, если тебе не надо использовать что-то мобильное, то твое приложение будет сразу работать и на десктопах, и на мобилках.
Если же хочешь крутости, то в мобильной версии платформы тебе доступна интеграция с Facebook, доступ к геолокационным функциям устройства, слежение за жестами пользователя (вроде переворота или встряхивания телефона). Медиа-модуль также впечатляет: есть функции для работы со звуком и видео, работы с встроенной камерой (если она, конечно, поддерживается устройством). Работа с элементами интерфейса, кроме общих функций, имеет специфическое API для устройств на базе Android и iPad/iPhone, поэтому здесь код немного усложнится, чтобы адекватно поддерживать все возможности устройств.
Кстати, API является независимым от языка, поэтому, даже если ты на одной странице подключишь код на PHP, Ruby и JavaScript, все они смогут работать с одинаковыми объектами и методами платформы (при этом различаясь синтаксисом вызова функций). Также любой код имеет доступ к DOM-дереву текущей страницы приложения. Жаль, правда, что для мобильных платформ доступен только код на JavaScript, ведь, правда, как туда запихнуть интерпретатор РНР, который сам на пару десятков мегабайт потянет?
Структура проекта
Тебе осталось только разобраться в структуре проекта, чтобы создать свою первую программу на Titanium. Прежде всего понадобится аккаунт на сайте www.appcelerator.com, регистрация бесплатная. Дальше просто — изнутри приложение состоит из директории Resources, в которой хранятся все твои файлы. По сути, это корневая директория проек та. Выше нее лежат только служебные файлы для сборки — манифест, описывающий настройки среды (он создается автоматически), лицензия и файл конфигурации tiapp.xml. В нем доступно несколько опций, которые могут быть полезными. Например, начальный, минимальный и максимальный размер окна приложения, флаг для включения полноэкранного режима. Здесь же можно задать, какие из системных кнопок будут доступны (вроде «свернуть», «развернуть» и «закрыть»), а также ссылка на главную страницу, которая загружается при старте приложения.
Обычно это ссылка на HTML-файл в директории ресурсов. Но что, если задать здесь произвольный URL сайта? Вполне ожидаемая вещь. Получится обычное десктопное приложение, с инсталлятором и прочими присущими фишками, но отображающее один только сайт. Так можно за два клика сделать клиент для браузерной онлайн-игры или любого другого веб-сайта, главное, чтобы он корректно работал в браузере на базе WebKit’а, не требовал специфических для браузера модулей. Для примера превратим сайт журнала в полноценное десктопное приложение. Для этого достаточно создать новый проект в среде Titanium Developer, а потом, открыв в Блокноте файл tiapp.xml, отредактировать его следующим образом:
<?xml version='1.0' encoding='UTF-8'?>
<ti:app xmlns:ti='http://ti.appcelerator.
org'>
<id>ru.xaker.www</id>
<name>Xaker WebApp</name>
<version>1.0</version>
<publisher>Vasja Pupkin</publisher>
<url>https://xakep.ru</url>
<icon>default_app_logo.png</icon>
<window>
<id>initial</id>
<title>Xakep WebApp</title>
<url>https://xakep.ru</url>
<width>700</width>
<max-width>3000</max-width>
<min-width>0</min-width>
<height>500</height>
<max-height>3000</max-height>
<min-height>0</min-height>
<fullscreen>true</fullscreen>
<resizable>true</resizable>
<chrome scrollbars="true">true
</chrome>
<maximizable>true</maximizable>
<minimizable>true</minimizable>
<closeable>true</closeable>
</window>
</ti:app>
Приложение будет запускаться в полноэкранном режиме, в котором есть небольшой баг — при нажатии на <Esc> оно не выходит из него, это надо реализовать самостоятельно. Я заметил еще один глюк в среде тестирования — при запуске приложение создает в директории проекта папку dist, где и размещается инсталлятор проекта. Но при попытке тестовой компиляции, во-первых, все исходные файлы проекта помечаются как read-only, а во-вторых, повторно запустить программу уже не удается. Приходится предыдущий дистрибутив удалять вручную и только потом запускать сборку во второй раз.
Попробуй!
Как ни крути, Titanium — это настоящая находка! Какой еще проект предоставляет удобный API и позволяет разрабатывать приложение на привычном языке, а компилировать его под все десктопные ОС и большинство мобильных платформ? Да нет таких! При этом API очень прост и даже приятен в работе, поэтому написать простое приложение или же расширить функционал сайта, перенеся его в десктопный клиент и добавив новые фичи — занятие всего на пару вечеров. Если потрудиться, то можно также быстро сделать и программу для Android или iPhone. Правда, в последнем случае понадобится Mac и платный аккаунт программы разработчиков Apple. Несмотря на известные скандалы с Apple и приемом в AppStore программ, разработанных не на фирменном инструментарии, за приложения на базе Titanium можно не беспокоиться — они вполне нормально проходят все проверки.
TITANIUM vs ADOBE AIR
«Да это ж то же самое, что и AIR от Adobe», — возможно, воскликнет читатель, знакомый с разработкой RIA-приложений на этой платформе. И будет неправ, потому что, в отличие от AIR, Titanium пакует все приложение вместе со средой исполнения.
Это означает, что каждому приложению предоставляется своя отдельная среда, никак не связанная с другими приложениями.
Она легко устанавливается вместе с приложением. Для запуска AIR-приложений необходимо установить саму среду. К тому же эта среда является разделяемой — одной на все приложения в системе. Конечно, это не самым лучшим образом сказывается на быстродействии. К тому же, разные приложения для AIR могут требовать разные версии фреймворка и библиотек, а это уже совсем караул. И наконец, чтобы добить сомневающихся, где AIR для 64-битного Linux’а?
Химический состав титаниума
Если тебе интересно, что находится внутри этой системы, слушай. Для построения эффективной кроссплатформенной системы модулей на разных языках Appcelerator написали нечто подобное для ядра ОС, только направленное на взаимодействие библиотек. Kroll — это микроядро на C++, которое выступает связующим звеном между всеми модулями и языками, преобразует вызовы методов из разных языковых сред, обеспечивает передачу параметров в понятном для языка стиле и формате. Для этого модуль, написанный на одном из поддерживаемых языков (JavaScript, C/C++, Python, Ruby, PHP), должен использовать Module API. С другой стороны, необходимо использовать специальный Binding API, специфический для каждого языка, который и отвечает за работу с данными. После регистрации (связывания) модуля с ядром Kroll можно прозрачно вызывать методы любых языков и модулей. В будущем планируется добавить поддержку Java, C#/ Mono и Lua. Исходники ядра доступны на Github — www.github.com/appcelerator/kroll.
Links
- Официальный сайт платформы: www.appcelerator.com
- Хорошая документация по API: developer.appcelerator.com/documentation
- Примеры приложений: www.appcelerator.com/showcase/applicationsshowcase
- Обучающее видео: developer.appcelerator.com/training
- Сравнение мобильных платформ и средств разработки: www.devx.com/wireless/Article/45208/1954?pf=true