在 Android Studio 中使用 Scala 和 Java

2022-09-04 21:08:26

我在Android Studio 1.2.2中安装了1.5.2 Scala插件。我有一个用Java编码的现有(运行中的)项目。我在Scala中添加了一个普通的类来替换现有的Java类,只是为了尝试一下。IDE 似乎验证了 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 中定义的,并且正在解析 OK。Scala代码是:Purchase

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 的配置?命名约定?


答案 1

Android Studio或IntelliJ的Scala插件只是帮助您编写scala代码的工具。它非常聪明,可以在IDE中引用java中的scala类(以及其他方式),我认为您的意思是“IDE似乎验证了Scala代码”。

如果您正在开发一个Android应用程序,并且您使用gradle构建工具,那么我建议您使用Gradle scala插件。它正在与官方Android插件一起使用。然后,此插件将说明将scala文件构建为字节码,并在运行.class中使用。

以下是我的骨架 gradle 文件在 scala 插件中的样子:

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

答案 2

当您按照@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 给出“找不到匹配的构造函数”错误


推荐