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 SDK в опции Project SDK и отметьте « Sources
, Javadocs
и Sources for SBT and plugins
:
В Project Settings
/ Modules
выберите модуль проекта и нажмите +
, а затем добавьте Android
в разделе Framework
. На вкладке Структура замените все пути /.idea/modules
на /src/main
:
Теперь, когда проект настроен, мы можем попытаться запустить его. Создайте новую конфигурацию Run / Debug. Выберите Android App
и дайте ему имя (например, app
).
На вкладке General
выберите модуль. Нам также нужно настроить, как запустить приложение с SBT. В разделе « Before launch
» удалите Gradle-aware Make
по умолчанию задачу создания с учетом Gradle-aware Make
нажав на: —
Наконец, нажмите +
, создайте новую задачу SBT
и добавьте android:run
. Оставьте флажок « Run in current module
отмеченным:
Отныне вы можете запускать приложение так же, как любое приложение, написанное на Java или Kotlin.
Вывод
Kotlin по-прежнему выглядит более подходящим для Android: помимо других преимуществ, он имеет более простую настройку, лучшую поддержку IDE и меньшее время выполнения. Тем не менее, возможность использования Scala и SBT может позволить разработчикам, которые создают свои бэкэнды в Scala или хотят использовать функциональные возможности высокого уровня для создания сложных приложений.
Ссылка: | Настройка Scala на Android от нашего партнера по JCG Серхио Родриго Ройо в блоге Crafted Software . |