2015-06-20 6 views
7

नहीं मिला जब क्रैश हो गया, मैंने इंटेलिज 14 में एक नया एंड्रॉइड प्रोजेक्ट बनाया, फिर स्कैला एसडीके 2.11.6 जोड़ा गया (स्कोप provided एकमात्र विकल्प था जो मेरे लिए काम करता था)। अगर मैं किसी भी स्काला वर्ग का उपयोग नहीं करता तो परियोजना ठीक चलती है। लेकिन एक बार मैं उपयोग करते हैं, कहते हैं, स्ट्रिंग प्रक्षेप, जैसे ही कोड चलता है, एप्लिकेशन इस त्रुटि के साथ दुर्घटनाओं:इंटेलिजे 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 फ़ाइल खाली है, लेकिन यह बनी रहती है कि मैं प्रोगुआर्ड चालू करता हूं या नहीं।

मैंने क्या गलत किया है जो स्काला कक्षाओं को रनटाइम पर देखा जा रहा है?

+0

एंड्रॉइड पेज पर स्कैला से, http://macroid.github.io/ScalaOnAndroid.html जो सिस्टम बनाते हैं, आप इसका उपयोग कर रहे हैं: एंड्रॉइड प्लगइन या ग्रैडल के साथ एसबीटी ग्रेडल-एंड्रॉइड-स्कैला-प्लगइन के साथ; आपके एसओ इतिहास के आधार पर - मैं एंड्रॉइड प्लगइन के साथ एसबीटी अनुमान लगा रहा हूं लेकिन बस यह सुनिश्चित करने के लिए। –

+0

@ मॉरिसन चांग वास्तव में यह इंटेलिजे 14 (एंड्रॉइड स्टूडियो नहीं) जो कुछ भी बनाया गया है, एसबीटी या ग्रेडल नहीं है। – 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?

अपनी बिल्ड फाइलों और जिस तरह से आपका ऐप बना रहा है, बिना देखे बताना मुश्किल है। मेरा सुझाव है कि आप ग्रैडल बिल्ड सिस्टम में जाएं और एंड्रॉइड-स्कैला प्लगइन्स में से एक का उपयोग करें, जैसे कि this एक। मैंने इसे अपने ऐप्स में से एक में लगभग 3-4 महीने पहले इस्तेमाल किया था और यह एक आकर्षण के रूप में काम करता था।

ग्रैडल-आधारित बिल्ड आपको बहुत समय बचाएंगे, क्योंकि यह आधिकारिक तौर पर Google द्वारा समर्थित है और इसका उपयोग कई लोगों द्वारा किया जाता है (इस प्रकार आप समुदाय से सहायता प्राप्त करने की अधिक संभावना रखते हैं)। यह कुछ विशेषताओं का भी समर्थन करता है जो इंटेलिज-आधारित बिल्ड सिस्टम द्वारा समर्थित नहीं हैं, जैसे स्वाद स्वाद/स्प्लिट्स और लगातार तेजी से निर्माण के समय प्राप्त करने के लिए Google इंजीनियरों द्वारा अनुकूलित किया जाता है।

संबंधित मुद्दे