Android-сборка - это, по сути, сборка JVM с дополнительными шагами - байт-кодом JVM, опционально запуском proguard для минимизации кода и компиляцией его в формат Android.
Здесь у вас много информации о том, как настроить обычныйсборка Android в sbt: https://scala -android.org / quickstart / .
Разница будет заключаться в применении androidBuild
(и всех настроек, связанных с Android) только к проектам JVM:
val myProjectJVM = myProject.jvm
.settings(androidBuild: _*)
Однако, учитывая, что сборка Android и обычная сборка Scala будут выглядеть по-разному (поскольку обычное приложение JVM не имеет архитектурного отношения к приложениям Android - например, Main.main(Array[String])
против фрагментов и служб Android), это будетлучшая идея иметь модуль для некоторого общего кода JVM и выделенные проекты для частей, специфичных для платформы:
val commonJVM = myProject.jvm
val myProjectJVM = project.in(file("java-specific"))
.dependsOn(commonJVM)
val myProjectAndroid = project.in(file("android-specific"))
.settings(androidBuild)
.dependsOn(commonJVM)
Это архитектурное различие, скорее всего, является причиной, почему никто даже не рассматривает превращение Android в четвертый вариант вкросс-проект - у вас есть разные зависимости времени выполнения, другой способ запускаприложение, так что у вас будет больше частей кода, которые отличаются от общего.Подмодули с кодом, предназначенным для платформы в зависимости от общей зависимости (даже кросс-скомпилированной), являются лучшей идеей.