[英]Decompile scala's .class file in Android Studio generates .java file?
[英]Using Scala with Java in 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;
喀嚓...
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似乎驗證了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)
所以看看這個答案繼續這個過程:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.