Pull to refresh

Сборка приложений под Android с использованием AIR SDK 3.6 в Linux

Reading time 6 min
Views 14K

Введение


Linux как систему для работы я использую недавно. Раньше работал в Windows. Причина перехода очень проста и банальна — надоели глюки и лаги Windows. Я разрабатываю приложения с использованием технологий Adobe Flash и Adobe AIR как для веб, так и под Android. Поэтому при переходе очень важно было решить вопрос, смогу ли я работать в Linux также продуктивно, как в Windows. Порывшись на форумах и на официальном сайте, узнал, что FlexSDK поддерживается, а вот поддержка AIR окончена еще с версии 2.6. Печально однако. Но у нас же есть возможность запускать windows-приложения в среде Linux, почему бы не воспользоваться этим. Эта статья как раз о том, как настроить работу в Linux с AIR SDK 3.6 — последней версией на момент публикации.
У меня на компьютере установлен ArchLinux, поэтому все описанные в статье действия будут рассмотрены именно для этого дистрибутива. В других дистрибутивах для выполнения этих операций может потребоваться вводить немного другие команды, но последовательность команд будет точно такая же.
Команды, приведенные в статье, будут начинаться с символа $ либо #. Если команда начинается с $, такие команды нужно запускать от имени обычного пользователя. Если же команда начинается с #, эти команды нужно вводить только от рута. Будьте внимательны!

WINE


В Linux не так уж много способов запустить приложение для Windows. Одним из самых распространенных решений является использование wine. Дополнительную информацию по этому программному продукту можно почерпнуть в интернете, например, тут http://www.winehq.org.
Итак, для начала нам нужно установить wine, если он еще не установлен. Обычно пакет так и называется wine, но если у вас в репозитории он отсутствует, его можно скачать с официального сайта в виде исходников и собрать у себя на компьютере. Команда установки пакета в ArchLinux выглядит так:
# pacman -S wine
После ее выполнения из репозитория будет скачан и установлен уже готовый к запуску wine. Нам нужно только немного его настроить. Запускать wine и все, что с ним связано, нужно только под обычным пользователем и ни в коем случае не от рута. Для настройки wine имеется специальная программа, запуск которой выполняется командой:
$ winecfg
После выполнения этой команды появится меню, где можно настроить некоторые параметры wine. Из настроек по умолчанию я поменял только версию операционной системы с Windows XP на Windows 7, все остальное оставил, как есть. Также важно проверить, чтобы во вкладке «Диски» был создан диск Z:, указывающий на корневую директорию. У меня это выглядит так:

Этот диск понадобится при настройке скрипта для запуска отладчика AIR, о котором будет упомянуто позднее. Если все готово, нажимаем ОК и выходим из конфигуратора. Теперь, когда wine настроен, можно приступать к установке FlexSDK и AIR SDK.

FlexSDK и AIR SDK


Если у вас еще не установлен FlexSDK, то сначала нужно установить именно его. Я устанавливал его из пользовательского репозитория AUR. Если в репозитории вашего дистрибутива нет FlexSDK, то его можно скачать с официального сайта Adobe по этой ссылке www.adobe.com/devnet/flex/flex-sdk-download.html. Итак, устанавливаем из AUR:
$ yaourt -S flex-sdk
После установки SDK из AUR он будет располагаться в /opt/flex-sdk. Далее качаем AIR SDK с официального сайта Adobe http://www.adobe.com/devnet/air/air-sdk-download.html. Нам нужна версия для Windows:
$ wget -P ~ airdownload.adobe.com/air/win/download/latest/AIRSDK_Compiler.zip
Указанная команда скачает файл в домашнюю папку. Далее нам нужно его распаковать и скопировать в папку с установленным FlexSDK. Переходим в домашнюю папку и распаковываем архив. Распаковать архив можно программой file-roller — архиватором с графическим интерфейсом на базе GTK, либо консольной утилитой unzip. Допустим, вы распаковали его в папку AIRSDK_Compiler, которая была сохранена в домашней директории. После распаковки накатываем содержимое этой папки на папку с FlexSDK:
# cp -R ~/AIRSDK_Compiler/* /opt/flex-sdk
Если у вас FlexSDK установлен в папку, отличную от /opt/flex-sdk, то в качестве папки назначения конечно указываем свою. После копирования папку AIRSDK_Compiler можно удалить, она нам больше не понадобится, весь набор файлов уже скопирован во FlexSDK.

ADL, AAPT и ADB


Вeсь AIR SDK, как и FlexSDK, написан на Java, то есть является кроссплатформенным и может функционировать на любой системе, для которой существует JRE, в том числе и на Linux. Однако в AIR SDK отсутствуют linux-версии следующих программ: отладчик (adl), паковщик (aapt) и программа-мост для отладки (adb), а без них ничего запустить и собрать не получится.
ADL (Adobe Debug Launcher) — это отладчик, используемый для отладки приложений и их запуска.
AAPT (Android Asset Packaging Tool) — это упаковщик для сборки приложения, библиотек и ресурсов в единый apk-файл.
ADB (Android Debug Bridge) — программа-мост для отладки и удаленного управления эмулятором Android или реальным устройством на базе этой системы. Поскольку другого вменяемого перевода для этой программы я не нашел, далее в статье я буду называть эту программу просто «мостом».
В SDK все три программы присутствуют только для двух операционных систем: Windows и Mac OS. Поэтому для запуска отладчика мы будем использовать wine, паковщик и мост возьмем из Android SDK Platform Tools, поскольку в этом программном наборе присутствуют обе эти программы под Linux.

Android SDK Platform Tools


Это набор программ, упрощающих разработку приложений под Android. В нем присутствуют две необходимые нам программы: паковщик и мост. Я устанавливал его тоже из AUR. Набор по умолчанию ставится в /opt/android-sdk/platform-tools.
$ yaourt -S android-sdk-platform-tools
При отсутствии такого пакета в репозитории вашего дистрибутива его без проблем можно скачать с официального сайта http://developer.android.com/sdk/index.html.

Запуск ADL


В качестве среды разработки я использую Intellij IDEA. Как настроить ее на использование нашего вновь установленного FlexSDK, в статье не описывается, поскольку читатель наверняка подкован в таких вопросах, если читает это. Будем считать, что вы это уже сделали и в вашем тестовом AIR-проекте используется вновь установленный FlexSDK. Эта среда при компиляции AIR-проекта пытается запустить отладчик по пути 'папка_с_flex_sdk/bin/adl'. При условии, что FlexSDK установлен в папку /opt/flex-sdk, полный путь будет иметь вид /opt/flex-sdk/bin/adl. Cейчас там присутствует исполняемый файл для Windows adl.exe. Чтобы заставить его выполнять наши задачи, нам нужно сделать следующее:
1. Отладчик под Windows понимает в качестве пути только пути вида «C:\директория\путь_к_файлу», при сборке же проекта под Linux путь к файлу имеет вид “/директория/путь_к_файлу". То есть нам нужно привести второе к первому, чтобы отладчик нас понял и запустил нужный нам файл. Тут то нам и пригодится диск Z:, который в wine указывает на корневую директорию операционной системы.
2. Нужно передать отладчику все параметры, которые были переданы из среды разработки.
Для решения этой задачи мы создадим скрипт, который будет делать две вещи: 1. Конвертировать путь к файлу из windows-версии в linux-версию, причём так, чтобы путь указывал на реальный файл в системе; 2. Запускать отладчик под wine с теми же параметрами, с которыми этот отладчик пытается запустить нама среда разработки. Я уже написал черновой вариант такого скрипта на bash и выкладываю его тут. Он достаточно простой:

!#/bin/bash
wine /opt/flex-sdk/bin/adl.exe ${@//\/home/\Z\:\/home}

Сейчас он рассчитан на то, что все ваши проекты находятся в домашней директории, что не всегда так. Скрипт явно нуждается в доработке, но у меня пока физически не хватает времени, чтобы довести его до ума. Буду очень благодарен всем, кто поможет его унифицировать.
Чтобы сохранить скрипт, переходим в /opt/flex-sdk/bin. Тут уже присутствует Mac OS версия adl-файла. Можно этот файл просто удалить:
# rm /opt/flex-sdk/bin/adl
Вместо него создаем новый пустой файл:
# touch /opt/flex-sdk/bin/adl
Открываем его в любом текстовом редакторе (я использую nano):
# nano /opt/flex-sdk/bin/adl
и вставляем туда приведенные выше строки скрипта. Сохраняем и выходим из редактора. Осталось сделать файл исполняемым. Для этого назначаем ему права маской 755:
# chmod 755 /opt/flex-sdk/bin/adl
После этого файл готов к использованию.

Создание ссылок на AAPT и ADB


Паковщик запускается по пути /opt/flex-sdk/lib/android/bin/aapt. Переходим в папку /opt/flex-sdk/lib/android/bin и видим, что тут тоже присутствует aapt-файл и он тоже скомпилирован для Mac OS. Удаляем его:
# rm /opt/flex-sdk/lib/android/bin/aapt
На его месте должен присутствовать файл из Android SDK Platform Tools, поэтому мы просто создадим символическую ссылку на исполняемый файл паковщика /opt/android-sdk/platform-tools/aapt. Сделать это можно следующей командой:
# ln -s /opt/android-sdk/platform-tools/aapt /opt/flex-sdk/lib/android/bin/aapt
Аналогичные команды нужно выполнить и для моста:
# rm /opt/flex-sdk/lib/android/bin/adb
# ln -s /opt/android-sdk/platform-tools/adb /opt/flex-sdk/lib/android/bin/adb
Вот пожалуй и все. Поздравляю, теперь вы можете разрабатывать AIR-приложения под Android в Linux с использованием последней версии AIR SDK!

Резюме


Мне удалось заставить работать отладчик под wine, отладка работает полностью: работают точки останова, отображается содержимое переменных и т. д. Но некоторые вещи я еще пока проверить не успел. Например, как будут работать в таком отладчике приложения, использующие Stage3D, не пытался отлаживать приложение на реальном устройстве и, может быть что-то еще. Как только я это сделаю, обязательно дополню статью, если будет такая возможность. Также буду благодарен всем, кто сможет разобраться со сборкой AIR-приложений под iOS, поскольку этим я тоже пока не занимался.

Заключение


Я очень надеюсь, что кому-то эта информация будет полезной. Когда я столкнулся с этим, никакого вменяемого решения в сети я так и не нашёл. Пришлось копать самому. А когда разобрался, захотелось поделиться этим со всеми. Мне очень нравится Linux, его стабильность, открытость, неограниченные возможности в настройке этой платформы. Огорчает малая распространенность системы среди обычных пользователей, отчасти из-за отсутствия версий различного ПО именно под эту ОС. Возможно, после прочтения этой статьи часть разработчиков, которым отсутствие SDK под Linux мешало перейти на эту ОС, попытаются сделать это снова. Да прибудет с вами сила пингвина! )
Tags:
Hubs:
+5
Comments 3
Comments Comments 3

Articles