2015-06-20 10 views
7

Ho creato un nuovo progetto Android in Intellij 14, quindi ho aggiunto Scala SDK 2.11.6 (lo scope provided era l'unica opzione che funzionava per me). Il progetto funziona bene se non utilizzo alcuna classe di Scala. Ma una volta che io uso, per esempio, di interpolazione di stringhe, non appena il codice viene eseguito, l'applicazione si blocca con questo errore:Il progetto Android/Scala in IntelliJ 14 compila, ma si arresta quando viene avviato non trova la classe 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 

Io uso IntelliJ 14.1.3, Java 1.7.0_80. Il mio file proguard-project.txt è vuoto, ma questo persiste anche se accendo Proguard o meno.

Cosa ho fatto male che impedisce alle classi di Scala di essere viste in fase di runtime?

+0

Dalla pagina Scala su Android, http://macroid.github.io/ScalaOnAndroid.html quale sistema di generazione stai usando: sbt con plug-in Android o Gradle con gradle-android-scala-plugin; in base alla tua cronologia SO: sto indovinando sbt con il plug-in Android, ma per sicurezza. –

+0

@MorrisonChang in realtà è IntelliJ 14 (non Android Studio) con tutto ciò che è incorporato, non sbt o gradle. – Phil

+0

Conosci questo [progetto] (https://github.com/yareally/android-scala-intellij-no-sbt-plugin)? – Eugene

risposta

4

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

Difficile da dire senza guardare i file di build e il modo in cui la tua app sta costruendo. Ti suggerisco di passare al sistema di build Gradle e utilizzare uno dei plugin di Android-scala, come ad esempio this. L'ho usato circa 3-4 mesi fa in una delle mie app e ha funzionato come un fascino.

Le build basate sul gradiente ti faranno risparmiare un sacco di tempo, perché è ufficialmente supportato da Google ed è utilizzato da molte persone (quindi avrai maggiori probabilità di ottenere l'aiuto dalla comunità). Supporta anche alcune funzionalità non supportate dal sistema di build basato su Intellij, come il build flavor/split ed è costantemente ottimizzato dagli ingegneri di Google per ottenere i tempi di compilazione più veloci possibili.

Problemi correlati