Android/Scala IntelliJ 14 中的项目编译,但在启动时崩溃,找不到 Scala class

Android/Scala project in IntelliJ 14 compiles, but crashes when launched not finding Scala class

我在 Intellij 14 中创建了一个新的 Android 项目,然后向其中添加了 Scala SDK 2.11.6(范围 provided 是唯一适合我的选项)。如果我不使用任何 Scala class,项目 运行 没问题。但是,一旦我使用字符串插值,一旦代码为 运行,应用程序就会崩溃并出现此错误:

06-20 18:36:27.277    1995-1995/com.pcn.android.games.jacks D/AndroidRuntime﹕ Shutting down VM
06-20 18:36:27.289    1995-1995/com.pcn.android.games.jacks E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.pcn.android.games.jacks, PID: 1995
    java.lang.NoClassDefFoundError: Failed resolution of: Lscala/StringContext;
            at com.pcn.android.games.jacks.MyActivity.onCreate(MyActivity.scala:16)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access0(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "scala.StringContext" on path: DexPathList[[zip file "/data/app/com.pcn.android.games.jacks-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at com.pcn.android.games.jacks.MyActivity.onCreate(MyActivity.scala:16)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access0(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    Suppressed: java.lang.ClassNotFoundException: scala.StringContext
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 15 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我使用 IntelliJ 14.1.3、Java 1.7.0_80。我的 proguard-project.txt 文件是空的,但无论我是否打开 Proguard,这种情况都会持续存在。

我做错了什么导致 Scala classes 在 运行 时无法被看到?

What have I done wrong that prevents Scala classes from being seen at runtime?

如果不查看您的构建文件和您的应用程序的构建方式,很难说清楚。我建议您转到 Gradle 构建系统并使用 android-scala 插件之一,例如 this 之一。大约 3-4 个月前,我在我的一个应用程序中使用了它,它非常有用。

基于

Gradle 的构建将为您节省很多时间,因为它得到了 Google 的官方支持并且被很多人使用(因此您更有可能获得帮助来自社区)。它还支持一些基于 Intellij 的构建系统不支持的功能,例如构建 flavors/splits 并且 Google 工程师不断优化以获得最快的构建时间。