我在Android Studio 1.2.2中安装了1.5.2 Scala插件。 我有一个用Java编码的现有(运行)项目。 我在Scala中添加了一个简单的类来替换现有的Java类,只是为了尝试它。 IDE似乎validation了Scala代码,但是Java代码对类的引用尚未解析。 我不知道为什么。 我已经成功地在这个项目的服务器端混合了SBT下的语言。
Java代码引用如下所示:package net.from.apprise; import java.util.*; import java.io.Serializable; import org.json.*; class ItemRelation extends SharableRecord implements Serializable, JSONable { public static final String TAG = "IR"; String listKey; String description; String barCode; Purch purch;
喀嚓…
Purch已经从在Java中定义的Purchase更改,并且正在解决问题。 Scala代码是:
package net.from.apprise class Purch { val whatever:Int = 1 }
尝试建立产量: 错误:找不到符号类Purch
Purch类的Scala代码位于app / build / main / scala / net.from.apprise目录中。 同样,Java源代码位于app / build / main / java / net.from.apprise中。 AS看到Scala代码,如果有的话会发出错误。 但是课间没有解决方案。
我需要做一些特别的事情还是我忽略了一些愚蠢的事情? AS的配置? 命名惯例?
Android Studio或IntelliJ的Scala插件只是一个帮助您编写scala代码的工具。 它非常聪明,可以在IDE中引用来自java(以及其他方式)的scala类,我认为你的意思是“IDE似乎validation了Scala代码”。
如果您正在开发Android应用程序并使用gradle构建工具,那么我建议您使用Gradle scala插件 。 它正在与gradle的官方android插件一起使用。 然后,此插件将指示将scala文件构建为字节码,其结尾为.class,用于运行应用程序。
下面是scala插件的骨架gradle文件的样子:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' // scala from https://github.com/saturday06/gradle-android-scala-plugin classpath "jp.leafytree.gradle:gradle-android-scala-plugin:1.4" } } android { ... } apply plugin: 'com.android.application' apply plugin: "jp.leafytree.android-scala" dependencies { ... compile 'org.scala-lang:scala-library:2.11.6' } // Configuration for scala compiler options as follows tasks.withType(ScalaCompile) { // If you want to use scala compile daemon scalaCompileOptions.useCompileDaemon = true // Suppress deprecation warnings scalaCompileOptions.deprecation = false // Additional parameters scalaCompileOptions.additionalParameters = ["-feature"] }
并且.java和.scala文件可以混合在同一个项目目录中,如:
app/java/com.example /ItemRelation.java /Purch.scala
当你按照@Renatol步骤(这很棒)时,你会遇到一个错误:
Could not find matching constructor for: org.gradle.api.internal.tasks.DefaultScalaSourceSet(java.lang.String, org.gradle.api.internal.file.BaseDirFileResolver)
所以看看这个答案继续这个过程:
gradle-android-scala-plugin给出“找不到匹配的构造函数”错误