Pull to refresh

Разработка приложений на языке Scala

Reading time 4 min
Views 19K
В этом небольшом посте я постараюсь рассказать с чего начать разрабатывать приложения для Android на языке Scala с помощью SBT и IntelliJ Idea, а так же плюсы и минусы этого подхода. Все будет довольно просто, стоит только запастись терпением. Весь процесс описывается для unix like систем, на Windows не проверялось, но если очень хочется, то можно попробовать провернуть то же самое через cygwin. Итак…

Существующие решения


При беглом гуглении можно наткнуться на эти три (раз, два, три) замечательные статьи, которые в красках поэтапно описывают долгий и тернистый путь к просветлению, а именно как поднять SBT проект для Android в Idea. Этот метод устарел, потому как в статье описывается процесс для SBT 0.7.4, а так же многие ненужные шаги, которые только отталкивают от дальнейшего изучения материала. Не смотря на это, я рекомендую их к прочтению, чтобы иметь базовое представление с чем вы имеете дело.

Многие знают, что под Eclipse тоже есть плагин для разработки на Scala, но он находится в вечной бете и совершенно негодный к использованию ввиду постоянных тормозов и скудности функционала.

Инструменты


  • ItelliJ Idea community edition с поддержкой Android — самая дружественная к Scala IDE на сегодняшний день (есть еще ensime, но это из другой оперы).
  • JDK 6 для linux/mac os. Путь до JDK необходимо прописать в глобальной переменной JAVA_HOME (можно в ~/.bashrc).
  • Android SDK для linux/mac os. Путь до SDK должен быть также задан через глобальную переменную ANDROID_SDK_HOME, но, внимание, для видимости всей системой, поэтому прописывать переменную нужно строго в /etc/environment. Может потребоваться перезагрузка.
  • Simple Build Tool (SBT) 0.10.1 — инструмент для генерации и сборки Scala проектов. Недавно проект сменил имя на XSBT и переехал на github, что весьма удобно.
  • Android плагин для SBT — для ознакомления, потому как данный плагин ставится автоматически.
  • giter8 (g8) — утилита для генерации проектов из шаблонов, опубликованных на github.
  • Мой шаблон g8 для генерации Idea проектов.
  • Настроенный Android Emulator или напрямую подключенный андроид смартфон с включенной USB отладкой.




Установка SBT


Предварительно необходимо скачать sbt-launch.jar последней версии и положить в папку ~/bin, затем создать пустой файл с именем sbt со следующим содержимым

java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"

и также положить его в папку ~/bin. Далее необходимо сделать файл sbt исполняемым и добавить папку ~/bin к переменной $PATH, чтобы иметь доступ к ее исполняемым файлам без явного указания пути:

$ chmod u+x ~/bin/sbt
$ echo 'PATH=$PATH:~/bin' >> ~/.bashrc    

После этого следует перезапустить терминал, чтобы он перечитал файл ~/.bashrc.

Принцип работы


Для создания проекта используется giter8 (g8). Принцип его работы очень прост — он скачивает с github предварительно заготовленный шаблон проекта и подставляет вместо указанных переменных заданные в файле default.properties свойства. Это справедливо как для содержимого файлов, так и для их имен. Например, в этом коде

class $main_activity$ extends Activity { ... }

$main_activity$ будет заменено на соответствующее заданное свойство. Все значения свойств задаются в интерактивном режиме через g8. Исходя из этого, был создан шаблон, включающий в себя стандартные для Idea проектные файлы и модули, в которые на этапе генерации проекта подставляются специфические для него свойства.

Генерация проекта


Сперва следует установить giter8. Самое простое решение — запустить мой маленький скрипт, который сделает это сам:

curl https://raw.github.com/mbektimirov/android-app-idea.g8/master/install.sh | sh

Если все пройдет успешно, то g8 установится в папку ~/bin. О возможных проблемах смотрите в конце статьи.
Следующий шаг — собственно, создание проекта из шаблона. Сложностей никаких, в процессе установки g8 будет запрашивать свойства. Если значения по умолчанию вас устраивают (они указаны в квадратных скобках), то их можно не указывать.

mbektimirov@mbektimirov-pc:~$ g8 mbektimirov/android-app-idea

Template for Android apps in Scala 

package [my.android.project]: ru.my.first.android.scala.project
name [My Android Project]: my super project
main_activity [MainActivity]: MyActivity
api_level [10]: 8
project_scala_version [2.9.1]: 

Applied mbektimirov/android-app-idea.g8 in my-super-project

После этого можно лицезреть сгенерированный проект в папке my-super-project, который уже можно деплоить на устройство. Это можно сделать с помощью команды sbt start-device.

Настройка IDE


После того, как вы скачали и установили Idea, ее надо дополнить некоторыми плагинами, а именно для поддержки Scala и SBT, так сказать, не отходя от кассы, чтобы не приходилось каждый раз переключаться на консоль и собирать/деплоить проект оттуда. Плагины доступны из самой Idea в plugin manager'е:



После установки плагинов следует перезагрузить IDE, затем в настройках перейти в раздел SBT и указать путь до sbt-launch.jar:



После этих действий можно загружать наш сгенерированный проект в IDE через «File -> Open project...».
Почти все готово, осталось настроить конфигурацию для запуска проекта с использованием SBT. Для этого в меню «Run» следует выбрать пункт «Edit configurations». В появившемся окне надо создать новую конфигурацию, в нашем случае это будет Android Application, и назвать ее StartDevice. В появившихся настройках выбрать модуль «android-module», снять галочку с «make» и поставить напротив «Run SBT Action». В SBT Action, в свою очередь, добавить задачу «start-device». Скриншот ниже поясняет все проделанные выше действия:



Теперь проект можно запускать по зеленой кнопке или хоткею. Все логи будут писаться в SBT консоль, которая является частью плагина SBT для Idea:





Известные проблемы


  • При установке g8 может ругаться на то, что ему не удалось скачать Apache httpclient. Для этого следует почистить кэш в папках ~/.ivy2/cache/org.apache.httpcomponents и ~/.m2/cache/org/apache/httpcomponents.
  • Размер стандартного Hello world apk файла составляет 680 Кб. Вероятнее всего эта проблема связана с неправильно работающим proguard, который должен вычленять из apk файла неиспользуемые Scala библиотеки и классы. В ближайшее время я постараюсь написать автору плагина Android для SBT для выяснения путей решения этой проблемы.
  • Плагин для разработки под Android на Idea не поддерживается компанией Google, поэтому в ней нет большинства возможностей, которые предоставляет Eclipse.


Что почитать


Tags:
Hubs:
+28
Comments 18
Comments Comments 18

Articles