在Android Studio中使用Scala和Java

Bil*_*son 9 java android scala android-studio

我在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;
Run Code Online (Sandbox Code Playgroud)

喀嚓...

Purch已更改,Purchase在Java中定义并正在解决确定.Scala代码是:

package net.from.apprise

class Purch {
   val whatever:Int = 1
}
Run Code Online (Sandbox Code Playgroud)

尝试建立产量:错误:找不到符号类Purch

Purch类的Scala代码位于app/build/main/scala/net.from.apprise目录中.同样,Java源代码位于app/build/main/java/net.from.apprise中.AS看到Scala代码,如果有的话会发出错误.但是课间没有解决方案.

我需要做一些特别的事情还是我忽略了一些愚蠢的事情?AS的配置?命名惯例?

Ren*_*cic 11

Android Studio或IntelliJ 的Scala插件只是一个帮助您编写scala代码的工具.它非常聪明,可以在IDE中引用来自java(以及其他方式)的scala类,我认为你的意思是"IDE似乎验证了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"]
}
Run Code Online (Sandbox Code Playgroud)

并且.java和.scala文件可以混合在同一项目目录中,如:

app/java/com.example
  /ItemRelation.java
  /Purch.scala
Run Code Online (Sandbox Code Playgroud)