2015-06-20 16 views
7

Tôi đã tạo một dự án Android mới trong Intellij 14, sau đó thêm Scala SDK 2.11.6 vào nó (phạm vi provided là tùy chọn duy nhất có hiệu quả đối với tôi). Dự án chạy tốt nếu tôi không sử dụng bất kỳ lớp Scala nào. Nhưng một khi tôi sử dụng, ví dụ, chuỗi suy, ngay khi đang chạy, ứng dụng bị treo với lỗi này:Dự án Android/Scala trong IntelliJ 14 biên dịch, nhưng bị treo khi khởi chạy không tìm thấy lớp 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 

tôi sử dụng IntelliJ 14.1.3, Java 1.7.0_80. Tệp proguard-project.txt của tôi trống, nhưng điều này vẫn còn cho dù tôi bật Proguard hay không.

Tôi đã làm gì sai khiến các lớp Scala không bị xem trong thời gian chạy?

+0

Từ trang Scala On Android, http://macroid.github.io/ScalaOnAndroid.html tạo hệ thống bạn đang sử dụng: sbt với plugin Android hoặc Gradle với gradle-android-scala-plugin; dựa trên lịch sử SO của bạn - tôi đoán sbt với plugin Android nhưng chỉ để đảm bảo. –

+0

@MorrisonChang thực sự là IntelliJ 14 (không phải Android Studio) với bất kỳ thứ gì được tích hợp sẵn, không phải sbt hoặc gradle. – Phil

+0

Bạn có quen với [project] này (https://github.com/yareally/android-scala-intellij-no-sbt-plugin) không? – Eugene

Trả lời

4

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

Khó nói mà không xem xét tệp xây dựng của bạn và cách ứng dụng của bạn đang xây dựng. Tôi đề nghị bạn chuyển sang hệ thống xây dựng Gradle và sử dụng một trong các plugin android-scala, chẳng hạn như this một. Tôi đã sử dụng nó khoảng 3-4 tháng trước trong một trong các ứng dụng của tôi và nó hoạt động như một sự quyến rũ.

Xây dựng dựa trên lớp học sẽ giúp bạn tiết kiệm rất nhiều thời gian vì nó được Google hỗ trợ chính thức và được nhiều người sử dụng (vì vậy bạn sẽ có nhiều khả năng nhận được sự trợ giúp từ cộng đồng). Nó cũng hỗ trợ một số tính năng không được hỗ trợ bởi hệ thống xây dựng dựa trên Intellij, chẳng hạn như xây dựng hương vị/chia tách và được tối ưu hóa liên tục bởi các kỹ sư của Google để có thời gian xây dựng nhanh nhất có thể.

Các vấn đề liên quan