Настройка среды разработки на 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.
Распаковываем архив, в ~/.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, Scala, Функциональное программирование.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.