8

में कंपाइलर अपवाद का कारण बनता है जब मैं एंड्रॉइड लाइब्रेरी मॉड्यूल में लैम्ब्डा अभिव्यक्ति का उपयोग करता हूं, तो मुझे एक कंपाइलर अपवाद com.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.invoke.MethodType not found मिलता है।लैम्बडा एंड्रॉइड लाइब्रेरी मॉड्यूल

एंड्रॉइड एप्लिकेशन मॉड्यूल में उपयोग किए जाने पर लैम्ब्डा अभिव्यक्ति त्रुटि के बिना संकलित कर रहे हैं।

समस्या प्रदर्शित करने के लिए एक नमूना परियोजना यहां पाया जा सकता:
https://github.com/adamdye/AndroidLambdaIssue

उदाहरण में दिलचस्प वर्गों MyLibrary.java और MainActivity.java हैं। प्रत्येक वर्ग में समान अभिव्यक्तियां होती हैं।

सेटअप

Android Studio 2.2 preview 1 
min/target SDK version = android-N 
build tools version = 24.0.0.rc4 
jack compiler enabled 
source/target compatibility = 1.8 
Gradle version = 2.10 
Android Plugin Version = 2.2.0-alpha1 
JDK = java 8 

मैं रेट्रो-लैम्ब्डा का प्रयोग करने में कोई दिलचस्पी नहीं है। मैं इसे उचित विन्यास के माध्यम से काम करना चाहता हूं। मुझे लगता है कि मैं कहीं एक कदम लापता हूँ।

+0

इसे रेफरी करें [लिंक] (http रों: //github.com/evant/gradle-retrolambda)। यह आपकी मदद कर सकता है .. – Sabari

उत्तर

7

बस वापस सर्कल करने के लिए, और जो मैंने सीखा है उसे जोड़ें।

मैं प्रोजेक्ट की build.gradle फ़ाइल में gradle के bootclasspath को माइक्रोसॉफ्ट के रनटाइम जार को जोड़कर MethodType not found त्रुटि प्राप्त करने में सक्षम था।

allprojects {  
    gradle.projectsEvaluated { 
     tasks.withType(JavaCompile) { 
      options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar" 
     } 
    } 
} 

हालांकि, अनुप्रयोग एक उपकरण या एम्युलेटर को तैनात नहीं करेंगे क्योंकि app:transformClassesWithPreJackPackagedLibrariesForDebug Gradle कार्य विफल रहता है। यह आवश्यक है कि लम्बा के रूप में उपयोग किए जाने वाले सभी इंटरफेस क्लासपाथ पर हों। बूटक्लासपैड फिक्स ने जैक कंपाइलर के लिए क्लासपाथ सेट नहीं किया है और पुस्तकालय अभी तक जैक कंपाइलर का उपयोग नहीं करते हैं।

मैं इस मुद्दे पर एक बग रिपोर्ट खोला: https://code.google.com/p/android/issues/detail?id=211386

वे टिप्पणी की कि यह निकट भविष्य में संबोधित किया जाएगा।

+0

क्या यह अभी संभव है? –

+0

Google के साथ खोला गया मुद्दा अभी भी "असाइन किए गए" राज्य में है। तो दूसरे शब्दों में, नहीं। वही प्रश्न उस धागे पर पूछा गया था। यह आपके लिए थ्रेड में जोड़ने के लिए चोट नहीं पहुंचाएगा कि यह आपके लिए भी एक महत्वपूर्ण मुद्दा है। –

0

मैंने संकलित जेएआर की बजाय जावा स्रोतों को जावा स्रोत युक्त निर्भरता के रूप में हल किया। इस तरह मैं अपनी परियोजनाओं के लिए कॉन्फ़िगर है:

में लाइब्रेरी की build.gradle:

configurations { 
    sources 
} 

task sourcesJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.java.srcDirs 
} 

artifacts { 
    sources sourcesJar 
} 

में एप्लिकेशन की build.gradle:

dependencies { 
    compile project(path: ":gdxstudio-core", configuration: "sources") 

बेशक पुस्तकालय एप्लिकेशन की में एक बाहरी परियोजना के रूप में शामिल किया गया है settings.gradle

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