我在Intellij 14中创建了一个新的Android项目,然后向它添加了Scala SDK 2.11.6(范围provided
是唯一对我有用的选项)。如果我不使用任何Scala类,该项目运行正常。但是,一旦我使用字符串插值,一旦代码运行,应用程序就会崩溃并出现此错误:
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.access$800(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.access$800(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类在运行时出现?
答案 0 :(得分:4)
我做错了什么阻止Scala类在运行时出现?
如果不查看构建文件和应用程序构建方式,很难说清楚。我建议你转移到Gradle构建系统并使用一个android-scala插件,例如this一个。我大约3-4个月前在我的一个应用程序中使用它,它作为一个魅力。
基于Gradle的构建将为您节省大量时间,因为它得到了Google的正式支持,并被许多人使用(因此您更有可能获得帮助来自社区)。它还支持基于Intellij的构建系统不支持的一些功能,例如构建风格/拆分,并且Google工程师不断优化这些功能以获得最快的构建时间。