Настройка среды разработки на Scala (и Java) под Android
20 апреля 2015
Мне давно было интересно попробовать пописать под Android. Достоверно известно, что Scala без труда справляется с этой задачей, но вот что именно как настраивать было не очень понятно. А тут недавно добрыми людьми был опубликован шаблон готового Android-приложения на Scala. Все сделано за нас, остается только разобраться с настройкой среды разработки, и можно писать для мобилок! Вот о том, как эту среду разработки настроить, я и поведаю далее.
Все написанное ниже я делал под Ubuntu Linux 14.04 LTS, но, вероятно, будет также во многом справедливо и для других систем. Кроме того, насколько я понимаю, если вы пишите на Java, настройка будет выглядеть практически точно так же, за тем исключением, что вместо SBT вы будете использовать Gradle.
В первую очередь нам понадобится IntelliJ IDEA с установленным плагином для Scala. Это совершенно тривиальный шаг, поэтому не буду останавливаться на нем подробно. Ровно как и на установке самого компилятора Scala, SBT, всяких там Git и других утилит, наличие которых я считаю само собой разумеющимся. При написании этой заметки я использовал IntelliJ IDEA 14.1.1 Community Edition. Если у вас другая версия, то интерфейс (имена пунктов меню, и прочее) может немного отличаться.
Далее идем по ссылке и скачиваем Android SDK. IDE у нас уже есть, поэтому выбираем версию без Android Studio. Последний, на само деле, представляет собой ту же IntelliJ IDEA, заточенную исключительно для разработки под Android. Что, если нам вдруг очень срочно понадобится написать небольшое десктопное GUI приложение или сайтик? Специализация — удел насекомых!
Распаковываем архив, в ~/.bashrc прописываем что-то вроде:
Таким образом переменную окружения подхватит SBT, но не IntelliJ IDEA. Разбираться было лень, поэтому я просто прописал ту же переменную в файле ~/intellij-idea14/bin/idea.sh.
Согласно инструкции, которая отображается в браузере после начала загрузки Android SDK, в 64-х битной Убунте требуется дополнительно руками установить пару пакетов. Придется повиноваться:
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
После установки Android SDK на самом деле у вас еще не установлен Android SDK :) Говорим:
Теперь самое сложное — нужно правильно поставить галочки:
Ставьте галочки прямо как на картинке! Иначе потом в неожиданных местах будут возникать очень странные ошибки, и придется долго выяснять, что на самом деле вы выбрали немного не ту версию Android API, ставить правильную, потом выяснить, что IDEA как-то криво импортирует SDK при использовании нескольких API, чистить проект, сносить лишний API, ужас в общем.
Если теперь склонировать репозиторий с шаблоном проекта:
… перейти в него и сказать:
# (еще есть android:packageRelease)
… то, при условии, что все было сделано правильно, мы получим собранный apk. Теперь вопрос, а где его запускать-то? Лично у меня так вообще убунтофон…
Никаких проблем, идем по еще одной ссылке и качаем эмулятор Genymotion. Терпеливо проходим регистрацию и прочие издевательства. Это правда очень крутой эмулятор Android-устройств! Устанавливаем:
./genymotion-2.4.0_x64.bin
Насколько я понимаю, ему для работы нужен Virtual Box. Лично у меня он уже был установлен. Запускаем:
Логинимся (хэх…), скачиваем-устанавливаем образ устройства. Я лично выбрал Nexus 7. Драг-н-дропаем файл ./target/android-bin/com-myapp-debug.apk из каталога с проектом в эмулятор и видим запущенный «Hello World».
Теперь импортируем проект в IDEA. При импорте меняем Java SDK, вместо него создаем Android SDK и используем его. Важно! После импорта проекта в дереве файлов помечаем каталог ./src/main, как обычный, а ./src/main/scala — как каталог с исходниками. То есть, из этих двух каталогов синеньким должен быть только последний. У меня после импорта синенькими были оба, что приводило к странной ошибке «MainActivity is already defined as class MainActivity» при компиляции.
Если сейчас попытаться собрать проект в IDEA, ничего не получится. В дереве с файлами жмем ПКМ по MainActivity, в меню выбираем «Create ‘MainActivity’…» с зеленой иконкой Android’а рядом. В появившимся окне в секции Target Device меняем галочку на Show chooser dialog. В секции Before launch удаляем шаг Make и добавляем новый с типом Run External Tool. Создаем новый тул, в Program пишем «./sbt», в Parameters — «android:packageDebug». При сборке проекта должен появляться диалог, который предлагает запустить приложение в Genymotion (виртуалка c Android-устройством уже должна быть запущена). Для удобства можно поставить галочку Use same device for future launches, тогда приложение будет стартовать сразу в эмуляторе.
Поздравляю, теперь у вас есть среда разработки под Android!
А в чем вы пишите для мобильных устройств? И какую литературу или иного рода учебные материалы вы бы посоветовали для того, чтобы быстро въехать в разработку под Android?
Метки: Android, Scala, Функциональное программирование.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.