2016-01-25 12 views
5

एंड्रॉयड परियोजना (Gradle) मुख्य आवेदन मॉड्यूल है: एप्लिकेशन - एंड्रॉयड आवेदन (प्लगइन लागू होते हैं: 'com.android.application') और जावा मॉड्यूल: नेटवर्कAndroid एप्लिकेशन + जावा मॉड्यूल (जावा 1.8)

जावा मॉड्यूल नेटवर्क डिफ़ॉल्ट रूप से स्रोत कोड अनुकूलता 1.8 है और मैं वास्तव में यह क्योंकि लैम्ब्डा अभिव्यक्ति के करना चाहते हैं: - (जावा का अर्थ प्लगइन लागू)।

लेकिन एंड्रॉइड एप्लिकेशन 1.7 डिफ़ॉल्ट रूप से और मैं ऐप नहीं बना सकता। बेशक मैं अपने एप्लिकेशन में retrolambda का उपयोग करें - एंड्रॉयड मॉड्यूल, लेकिन इस परियोजना की वजह से संकलन नहीं करता है: अगर मैं अपने जावा मॉड्यूल बनाने

Error:com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)

Error:Execution failed for task ':app:transformClassesWithDexForDebug'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1 

सब कुछ अच्छा संकलित:

apply plugin: 'java' 
sourceCompatibility = 1.7 
targetCompatibility = 1.7 

लेकिन इस मामले में मैं लैम्ब्डा अभिव्यक्तियों का उपयोग नहीं कर सकता लेकिन मुझे इसकी आवश्यकता है।

मैं केवल अगले समाधान देखें:

  1. बनाओ नेटवर्क मॉड्यूल नहीं जावा लेकिन एंड्रॉयड मॉड्यूल और प्रयोग retrolambda (लेकिन मैं .jar इस मॉड्यूल तो यह से .aar नहीं बनाने के लिए जा रहा हूँ हो गया है जावा)

  2. मेरी जावा मॉड्यूल (भविष्य में .jar) (लेकिन में लैम्ब्डा भाव का प्रयोग न करें मैं इसका इस्तेमाल करने की वजह से भी लैम्ब्डा बिना rxJava में बेवकूफ कोड से मेल चाहते हैं)

मेरे लिए सबसे अच्छा समाधान मेरे जावा मॉड्यूल में रेट्रोलंबडा जैसा कुछ होगा। मैंने ऐसा कुछ करने की कोशिश की लेकिन रेट्रोम्बाडा निर्भरता (प्लगइन लागू करें: 'me.tatarka.retrolambda') संकलन के दौरान त्रुटियों को प्रभावित नहीं किया गया था। या शायद रेट्रोलंबडा जैसे कुछ के साथ जावा 1.7 का उपयोग करें। लेकिन संकुचन फ़ाइल को सेट करने के लिए फ़ाइल को क्रमशः एंड्रॉइड {...} कोई अनुभाग नहीं है।

यह कैसे करें?

+0

मेरे पास एक लाइब्रेरी है जो लैम्बडास का उपयोग करती है लेकिन रेट्रोम्बैम्बस का उपयोग करके एंड्रॉइड पर जावा 7 में उपयोग की जाती है। आप यहां ग्रेडल फ़ाइल और लाइब्रेरी देख सकते हैं: https://github.com/smaspe/FunctionalIterables – njzk2

उत्तर

3

मैं FunctionalIterables के लिए क्या किया के आधार पर, अपने Gradle फ़ाइल कि तरह दिखना चाहिए:

buildscript { 
    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'me.tatarka:gradle-retrolambda:3.2.3' 
    } 
} 

repositories { 
    jcenter() 
} 

apply plugin: 'java' 
apply plugin: 'me.tatarka.retrolambda' 

retrolambda { 
    jdk System.getenv("JAVA8_HOME") 
    oldJdk System.getenv("JAVA7_HOME") 
    javaVersion JavaVersion.VERSION_1_6 
} 

Retrolambda सब कुछ की जरूरत है (मेरे Gradle फ़ाइल के बाकी केवल पुस्तकालय प्रकाशित करने से संबंधित है) अपने आउटपुट जार को सही जावा संस्करण को लक्षित करने के लिए।

+0

टीएनएक्स! मेरे लिए यह वास्तव में काम नहीं करता है, मेरा मतलब है कि यह अभी भी संकलित नहीं है, लेकिन अगर मैं ऊपर पोस्ट करते हुए रेट्रोलंबडा के साथ .jar बना देता हूं और इस मामले में यह जार शामिल करता है तो यह काम करता है। –

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