Статьи

Настройка Scala на Android

Scala может использоваться для создания приложений Android, как альтернатива Java или Kotlin. В отличие от них, настройка проекта Android в Scala с SBT не проста и может дать нам некоторые головные боли, чтобы сделать это правильно. Чтобы показать, как это можно сделать, мы собираемся создать новый шаблон проекта, используя плагин Android SDK для SBT.

Необходимые инструменты

Для разработки приложений Android в Scala вам необходим минимальный набор инструментов: SBT и Android SDK .

Установить SBT

Вы можете установить SBT на Mac OSX, используя Homebrew .

1
$ brew install sbt

Чтобы установить SBT в других операционных системах, вы можете следовать инструкциям официальной документации.

Установите Android SDK

Вы можете просто загрузить последнюю версию Android SDK с веб-сайта разработчика и следовать инструкциям по установке. Кроме того, вы можете установить Android Studio , которая поставляется с Android SDK и эмуляторами.

Установите переменную среды ANDROID_HOME

В Mac OSX / Linux вы можете просто экспортировать переменную

1
$ export ANDROID_HOME=path_to_your_android_sdk

или добавьте его в ваш bash_rc или bash_profile .

ПРИМЕЧАНИЕ. В Mac OSX, если установлена ​​Android Studio, Android SDK обычно находится по адресу /Users/your_user_name/Library/Android/sdk/

Добавить плагин SBT

Самый простой способ установить плагин Android SDK для SBT — это сделать это глобально. Для этого вам нужно создать файл в папке плагинов SBT:

1
~/.sbt/0.13/plugins/android.sbt

и добавьте следующую строку:

1
addSbtPlugin("org.scala-android" % "sbt-android" % "1.7.0")

Создать проект Android

Давайте создадим папку для нашего проекта Android:

1
2
$ mkdir my-project
$ cd my-project

Теперь мы собираемся использовать плагин SBT для создания шаблона проекта. Сначала запустите SBT:

1
$ sbt

Затем используйте плагин для создания проекта.

1
> gen-android <package_name> <project_name>

Например:

1
> gen-android com.codurance scala_on_android

Созданная структура проекта выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
my-project/
|-- project/
|   |-- android.sbt
|   |-- build.properties
|-- src/
|   |-- androidTest/
|       |-- java/
|           |-- com/
|               |-- codurance/
|                   |-- Junit3MainActivityTest.java
|                   |-- Junit4MainActivityTest.java
|   |-- main/
|       |-- res/
|           // Android resorces folders
|       |-- scala/
|           |-- com/
|               |-- codurance/
|                   |-- MainActivity.scala
|       |-- AndroidManifest.xml
|-- build.sbt
|-- lint.xml

Плагин SBT создает структуру проекта с минимальным количеством файлов, необходимых для запуска проекта Android, плюс настройку для запуска тестов инструментовки. Обратите внимание, что сгенерированные тестовые классы находятся в Java, а MainActivity — в Scala.

Самый интересный файл это build.sbt . Я добавил несколько комментариев, чтобы объяснить, какова цель каждой строки.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Version of the Scala runtime
scalaVersion := "2.11.8"
 
// Use the Android plugin
enablePlugins(AndroidApp)
// Add support for vector drawables
useSupportVectors
 
// Android version code (Same as versionCode on Gradle projects)
versionCode := Some(1)
// Android version name (Same as versionName on Gradle projects)
version := "0.1-SNAPSHOT"
 
// Instrumentation tests runner (Same as testInstrumentationRunner on Gradle projects)
instrumentTestRunner :=
  "android.support.test.runner.AndroidJUnitRunner"
 
// Android platform target (Same as targetSdkVersion on Gradle projects)
platformTarget := "android-24"
 
// Java compile options
javacOptions in Compile ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil
 
// Libraries
libraryDependencies ++=
  "com.android.support" % "appcompat-v7" % "24.0.0" ::
  "com.android.support.test" % "runner" % "0.5" % "androidTest" ::
  "com.android.support.test.espresso" % "espresso-core" % "2.2.2" % "androidTest" ::
  Nil

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

Запустить проект

Вам понадобится подключенное устройство Android или работающий эмулятор .

Как только это будет сделано, последний шаг — запустить приложение из sbt:

1
> android:run

Вы также можете запустить его из терминала, а не из SBT:

1
$ sbt android:run

Больше опций на build.sbt

Есть и другие интересные опции, которые могут быть включены в файл build.sbt . Вот некоторые из них:

1
2
// Application name
name := "scala_on_android"
1
2
// Min Android SDK version supported
minSdkVersion := "15"
1
2
// Override 'android:run', to use just 'run' instead
run <<= run in Android

Интеграция с Android Studio

С этого момента вы можете разрабатывать свои приложения для Android в Scala, используя текстовый редактор и sbt. Но было бы хорошо иметь возможность использовать официальную IDE, которая предлагает много полезных инструментов. Также возможно использовать IntelliJ, но я не буду вдаваться в подробности в этом посте.

Перед тем как начать, нам нужно установить плагины Scala и SBT для Android Studio.

Чтобы импортировать наш проект, откройте Android Studio и выберите « Import project (Eclipse, ADT, Gradle, etc.) . Import project (Eclipse, ADT, Gradle, etc.) .

Выберите Import project from external module и SBT :

Скала-на-android_import-SBT

Выберите ваш Android SDK в опции Project SDK и отметьте « Sources , Javadocs и Sources for SBT and plugins :

Скала-на-android_import-SDK

В Project Settings / Modules выберите модуль проекта и нажмите + , а затем добавьте Android в разделе Framework . На вкладке Структура замените все пути /.idea/modules на /src/main :

Скала-на-android_proj-структура-модуль

Теперь, когда проект настроен, мы можем попытаться запустить его. Создайте новую конфигурацию Run / Debug. Выберите Android App и дайте ему имя (например, app ).

На вкладке General выберите модуль. Нам также нужно настроить, как запустить приложение с SBT. В разделе « Before launch » удалите Gradle-aware Make по умолчанию задачу создания с учетом Gradle-aware Make нажав на: —

Скала-на-android_run-отладочной конфигурации

Наконец, нажмите + , создайте новую задачу SBT и добавьте android:run . Оставьте флажок « Run in current module отмеченным:

Скала-на-android_run-перед тем, запуском-SBT-андроид перспектива

Отныне вы можете запускать приложение так же, как любое приложение, написанное на Java или Kotlin.

Вывод

Kotlin по-прежнему выглядит более подходящим для Android: помимо других преимуществ, он имеет более простую настройку, лучшую поддержку IDE и меньшее время выполнения. Тем не менее, возможность использования Scala и SBT может позволить разработчикам, которые создают свои бэкэнды в Scala или хотят использовать функциональные возможности высокого уровня для создания сложных приложений.

Ссылка: Настройка Scala на Android от нашего партнера по JCG Серхио Родриго Ройо   в блоге Crafted Software .