2015-06-20 41 views
7

我的IntelliJ 14創造了新的Android項目,然後添加斯卡拉SDK 2.11.6給它(範圍provided是爲我工作的唯一選擇)。如果我不使用任何Scala類,該項目運行良好。但是,一旦我使用,比如說,串插,一旦代碼運行時,應用程序崩潰,與此錯誤:的Android /斯卡拉項目14個編譯,但崩潰時推出沒有找到斯卡拉

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,爪哇1.7.0_80。我的proguard-project.txt文件爲空,但是無論我是否打開Proguard,此操作依然存在。

我做了什麼錯,防止Scala類在運行時被看到?

+0

從斯卡拉在Android網頁,http://macroid.github.io/ScalaOnAndroid.html其構建系統是你使用:使用Android插件或用搖籃的gradle-Android的斯卡拉 - 插件SBT;根據你的SO歷史記錄 - 我正在猜測Android插件,但只是爲了確保。 –

+0

@MorrisonChang實際上它是IntelliJ 14(不是Android Studio),它內置的任何東西都不是sbt或gradle。 – Phil

+0

你熟悉[項目](https://github.com/yareally/android-scala-intellij-no-sbt-plugin)? – Eugene

回答

4

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

很難說,沒有看到你的構建文件和你的應用程序的構建方式。我建議你轉移到Gradle構建系統並使用其中一個android-scala插件,例如this之一。我在3-4個月前在我的一個應用程序中使用過它,它起到了魅力的作用。

基於Gradle的版本將爲您節省大量時間,因爲它正式得到了Google的支持,並被很多人使用(因此您將更有可能從社區獲得幫助)。它還支持一些不受基於Intellij構建系統支持的功能,例如構建風格/拆分,並且不斷由Google工程師進行優化,以儘可能縮短構建時間。