क्या Android विकास के लिए Java 8 का उपयोग करना संभव है?


609

वेब पर खोज करना, यह स्पष्ट नहीं है कि जावा 8 एंड्रॉइड डेवलपमेंट के लिए समर्थित है या नहीं।

जावा 8 डाउनलोड / सेटअप करने से पहले, क्या कोई मुझे किसी भी "आधिकारिक" दस्तावेज पर इंगित कर सकता है जो कहता है कि जावा 8 एंड्रॉइड विकास के लिए समर्थित है या नहीं है।


21
मैं आधिकारिक बयान के बारे में नहीं जानता लेकिन मुझे जावा 8 (संपादित: जेडीके 8) मेरे लिए एंड्रॉइड एसडीके के साथ ठीक काम कर रहा है। विंडोज 8.1 64 बिट यहां।
होआंग हुइन्ह


2
@HoHHHynh आप Android विकास के लिए JDK 6 या इसके बाद के संस्करण का उपयोग कर सकते हैं। हालांकि, संकलन जावा संस्करण 6 (और किटकैट के मामले में 7) का समर्थन करता है। मुझे लगता है कि ओपी का मतलब जावा संस्करण के लिए भी है (
जेडीके

13
Java 8 को आधिकारिक रूप से Android N. android-developers.blogspot.com/2016/03/… पर
जय

2
शायद जल्द ही: developer.android.com/preview/j8-jack.html
Ray Tayek

जवाबों:


189

जावा 8

एंड्रॉइड सभी जावा 7 भाषा सुविधाओं और जावा 8 भाषा सुविधाओं के एक सबसेट का समर्थन करता है जो प्लेटफ़ॉर्म संस्करण से भिन्न होता है।

यह जाँचने के लिए कि जावा 8 की कौन-कौन सी सुविधाएँ समर्थित हैं

जावा 8 भाषा सुविधाओं का उपयोग करें

हमने जावा 8 भाषा सुविधाओं के लिए सीधे वर्तमान जेवैक और डीएक्स सेट टूल में समर्थन जोड़ने का फैसला किया है, और जैक टूलचैन को चित्रित किया है। इस नई दिशा के साथ, जावा क्लास फ़ाइल प्रारूप पर निर्भर मौजूदा उपकरण और प्लगइन्स को काम करना जारी रखना चाहिए। आगे बढ़ते हुए, जावा 8 भाषा सुविधाओं को मूल रूप से एंड्रॉइड बिल्ड सिस्टम द्वारा समर्थित किया जाएगा। हम आने वाले हफ्तों में इसे एंड्रॉइड स्टूडियो के हिस्से के रूप में लॉन्च करने का लक्ष्य बना रहे हैं, और हम इस निर्णय को आपके साथ जल्दी से साझा करना चाहते हैं।

Android पर जावा 8 भाषा फ़ीचर सपोर्ट का भविष्य

ग्रहण उपयोगकर्ता:

पुराने डेवलपर्स जो ग्रहण पसंद करते हैं, Google ग्रहण Android डेवलपर टूल का समर्थन करता है

यदि आपने Java 8 JDK स्थापित किया है, तो इसे आज़माएं, यदि कोई समस्या दिखाई देती है तो कंपाइलर को 1.6 मेनू के रूप में विंडो मेनू → प्राथमिकताएँजावाकंपाइलर से सेट करने का प्रयास करें । जावा 7 भी काम करेगा:

ग्रहण वरीयताएँ -> जावा -> संकलक

यदि आप Android 5.0 और उच्चतर लक्ष्य बना रहे हैं, तो जावा 7 या उच्चतर की आवश्यकता है।

कई JDK स्थापित करें और प्रयास करें।


2
क्या जावा 8 ने जिस तरह से बाइटकोड काम करता है उसे बदल दिया? यदि नहीं, तो जावा के किसी भी संस्करण का उपयोग करना ठीक है, सैद्धांतिक रूप से, जब तक यह संकलित होता है।
बेन लेगियरियो

6
सही सवाल यह है: क्या होगा अगर आप java 8 में नए फीचर्स का उपयोग करते हैं, तो java 7 में android ऐप बनाने के लिए मौजूद नहीं है, क्या यह ठीक है? आधिकारिक निर्देशों का पालन करें।
इंजी। समर टी

12
@ BenC.R.Leggiero वहाँ जावा 8 में कोई नया बाईटकोड है, लेकिन निर्देश 'अर्थ और संरचनाओं बदल रहे थे stackoverflow.com/questions/28228450/... stackoverflow.com/questions/16143684/...
phuclv

17
कृपया अपने उत्तर में "अपडेट एन" पोस्ट न करें। अद्यतन जानकारी के लिए इसे फिर से लिखें। अन्यथा, एसओ कुछ वर्षों में उन मंचों से जानकारी प्राप्त करना उतना ही मुश्किल हो जाएगा, जितना कि इसे अलग कर दिया गया है।
डबिन्स्की

1
उत्तर अद्यतन करने की आवश्यकता है। जावा 8 वसीयत एंड्रॉइड स्टूडियो 3.0 और ग्रेडल प्लगिन 3.0 के रूप में समर्थित है।
чрій Мазуревич

350

UPDATE 2017/11/04 - एंड्रॉइड स्टूडियो 3.0 में अब जावा 8 के लिए मूल समर्थन gradle-retrolambda है। अब इसकी आवश्यकता नहीं है। देखHttps://developer.android.com/studio/write/java8-support.html

यदि आप उपयोग कर रहे हैं तो उपरोक्त लिंक में माइग्रेशन निर्देश भी शामिल हैं gradle-retrolambda। नीचे मूल उत्तर:


एंड्रॉइड जावा 8 का समर्थन नहीं करता है। यह केवल जावा 7 (यदि आपके पास किटकैट है) तक का समर्थन करता है और फिर भी इसमें इनवोकैनामिक नहीं है, केवल नई वाक्यविन्यास चीनी है।

यदि आप एंड्रॉइड में जावा 8 की प्रमुख विशेषताओं में से एक लैम्ब्डा का उपयोग करना चाहते हैं, तो आप gradle-retrolamba का उपयोग कर सकते हैं । यह एक ग्रिल बिल्ड डिपेंडेंसी है जो रेट्रोलंबा को एकीकृत करता है, जो एक टूल है जो जावा 8 बाइटकोड को जावा 6/7 में परिवर्तित करता है। मूल रूप से, यदि आप जावा स्टूडियो को कंपाइल करने के लिए एंड्रॉइड स्टूडियो में कंपाइलर सेट करते हैं, तो इस प्रकार लैम्ब्डा की अनुमति देता है, तो यह इसे जावा 6/7 बाईटकोड में बदल देगा, जो बाद में दलविक बायटेकोड में परिवर्तित हो जाता है। यह एक हैक है अगर आप आधिकारिक समर्थन के बदले एंड्रॉइड में कुछ JDK 8 सुविधाओं को आज़माना चाहते हैं।


13
इसे काम कर पाने में थोड़ा संघर्ष करना पड़ा, लेकिन एक बार जब मैंने वास्तव में सही निर्देशों का पालन किया तो यह अच्छी तरह से काम किया। उपयोगकर्ताओं को ग्रहण करने के लिए ध्यान दें: ग्रहण इसके साथ अच्छी तरह से काम नहीं करता है, मैं सुझाव देता हूं कि मैं एंड्रॉइड स्टूडियो में पलायन कर रहा हूं (मैं ग्रहण को याद करूंगा, लेकिन अभी इसके लिए यही तरीका है!)
साइमन फोर्सबर्ग

2
नाइटपिक: जावा 7 से मल्टी-कैच क्लॉज़ एंड्रॉइड द्वारा समर्थित नहीं हैं।
सिसवन

11
मल्टी-कैच का समर्थन किया जाता है, केवल एंड्रॉइड द्वारा समर्थित नहीं JDK7 सुविधा संसाधनों के साथ कोशिश कर रही है
मैथ्यू हरले

12
जावा 7 एंड्रॉइड के सभी संस्करणों के साथ काम कर रहा है। एक अपवाद: try-with-resourcesकिटकैट के बाद से ही काम करता है।
दिमित्री ज़ेत्सेव

2
@ साइमन आंद्रे फोर्सबर्ग (सावधानी: बेशर्म प्लग!) - जावा 8 स्ट्रीम एपीआई का समर्थन नहीं करने के लिए, आप sourceforge.net/projects/streamsupport पर मेरी लाइब्रेरी का उपयोग कर सकते हैं - यह स्पष्ट रूप से एंड्रॉइड के लिए समर्थन को संबोधित करता है।
स्टीफन ज़ॉबेल

99

आप वास्तव में उपयोग कर सकते हैं gradle-retrolamba एंड्रॉइड डेवलपमेंट के लिए जावा 8 का उपयोग करने के ग्रेडल बिल्ड निर्भरता का उपयोग ।

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

इस गाइड में, एंड्रॉइड डेवलपमेंट टूल्स में कुछ जावा 8 सुविधाओं को लाने के लिए एक विधि का प्रदर्शन किया जाएगा, विशेष रूप से ग्रहण आईडीई पर लक्षित । हालाँकि, इस गाइड में जिन चरणों का वर्णन किया जाएगा, वे Google के नए बढ़ते विकास परिवेश, Android Studio के अनुकूल भी हो सकते हैं। यह JetBrains द्वारा लोकप्रिय IntelliJ Idea IDE के सामुदायिक संस्करण पर आधारित है और इसे हाल ही में जुलाई 2014 की शुरुआत में Google द्वारा इसके 'बीटा' संस्करण में अपग्रेड किया गया था, जो इस गाइड के लिखे जाने से थोड़ा पहले था। ग्रहण कम से कम थोड़ी देर के लिए प्रमुख विकास वातावरण के रूप में रहेगा, और इस तथ्य पर विचार करते हुए कि ज्यादातर एंड्रॉइड प्रोजेक्ट्स को ग्रहण का उपयोग करके विकसित किया गया है, एडीटी में लैम्ब्डा एक्सप्रेशंस जैसे नए जावा 8 फीचर लाने की एक विधि डेवलपर्स के लिए काफी उपयोगी लगती है।

Android विकास एपाचे हार्मनी प्रोजेक्ट नामक एक कस्टम जावा कार्यान्वयन पर आधारित है जिसे 2011 में वापस समाप्त कर दिया गया था। Android विकास में सबसे अधिक इस्तेमाल किया जाने वाला जावा सिंटैक्स जावा 6 (v1.6) और जावा 7 (v1.7) भी आंशिक रूप से समर्थित है किटकैट संस्करण (Android 4.4। +)। इसलिए, लैम्ब्डा एक्सप्रेशंस जैसे जावा 8 के फीचर्स को एंड्रॉइड ऐप डेवलपमेंट में सीधे इस्तेमाल नहीं किया जा सकता है, बिना विकास टूल में कुछ ट्वीक्स लगाए। सौभाग्य से, ये निर्माण मूल रूप से कुछ actic सिंटैक्टिक शुगर ’संवर्द्धन हैं जो डेवलपर्स को they अनाम वर्गों’ जैसी चीजों की कमियां देते हैं और उन्हें जावा 6 या जावा 7 कक्षाओं में अनुवादित किया जा सकता है।

जावा 8 स्रोत कोड को निचले जावा संस्करणों में अनुवाद करने के लिए एक हालिया दृष्टिकोण को रेट्रोबलाडा कहा जाता है । यह लाइब्रेरी डेवलपर्स को जावा 7 या उससे भी कम पर लैम्ब्डा एक्सप्रेशन के साथ जावा 8 कोड चलाती है। दुर्भाग्य से, Java 8 में लैम्बडा एक्सप्रेशंस के अलावा अन्य फीचर्स अभी के लिए RetroLambda द्वारा समर्थित नहीं हैं, लेकिन लैम्ब्डा एक्सप्रेशन की अवधारणा Java 8 प्लेटफॉर्म पर सबसे बड़ी छलांग है और यह वैसे भी Android डेवलपर्स के लिए एक बढ़िया टूल है।

इस पुस्तकालय के बारे में विवरण इसके गीथहब पृष्ठ पर पाया जा सकता है:

https://github.com/orfjackal/retrolambda#getting-started

इसके अलावा, किसी अन्य डेवलपर द्वारा बनाया गया रेट्रो-लैम्बडा के लिए एक ग्रैडल प्लगइन ग्रैडल-आधारित बिल्ड को जावा या एंड्रॉइड प्रोजेक्ट्स में कार्यान्वित करने की अनुमति देता है। हालांकि, डेवलपर केवल इस प्लगइन को एंड्रॉइड स्टूडियो वातावरण में एकीकृत करने के बारे में उल्लेख करता है। विवरण इसके GitHub पृष्ठ पर पाया जा सकता है:

https://github.com/evant/gradle-retrolambda

ग्रहण-आधारित विकास के वातावरण में इन अवसंरचनाओं का उपयोग करके सीधे संपर्क नहीं किया जा सकता है, लेकिन यह उल्लेखनीय है और इस पूरे गाइड में प्रदर्शित किया जाएगा।

तैयारी

यह मार्गदर्शिका मानती है कि पाठक को Android विकास की बुनियादी समझ है और यह ADT संस्करण 22.6.2 पर आधारित है क्योंकि हाल ही में ADT संस्करण 23.0.2 में लेआउट फ़ोल्डर निर्माण जैसी समस्याएं हैं। इस मुद्दे के बारे में विवरण निम्न लिंक के तहत पाया जा सकता है:

http://code.google.com/p/android/issues/detail?id=72591

इस गाइड में कदम एक विंडोज 8.1, 64-बिट विकास मशीन के लिए दिए जाएंगे लेकिन उन्हें आसानी से अन्य प्लेटफार्मों के लिए अनुकूलित किया जा सकता है। नई बिल्ड सिस्टम Gradleका उपयोग बिल्ड / क्लीन प्रक्रियाओं के लिए किया जाएगा और इसकी स्थापना प्रक्रिया भी प्रदान की जाएगी। इसके अलावा, दोनों JDK 8और JDK 7विकास मशीन पर सह-अस्तित्व होना चाहिए। उन्हें स्थापित करने के लिए नीचे दिए गए चरणों का पालन करना चाहिए:

  • JDK 8 प्रारंभिक पहुंच पूर्वावलोकन पृष्ठ http://jdk8.java.net पर जाएं
  • JDK 8u20 डाउनलोड करें और इसे स्थापित करें। JRE 8 इंस्टॉलेशन आवश्यक नहीं है और इसे छोड़ दिया जा सकता है
  • JDK 7 के नवीनतम स्थिर रिलीज़ पृष्ठ http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html पर जाएं
  • JDK 7u65 डाउनलोड करें और इसे स्थापित करें। JRE 7 इंस्टॉलेशन फिर से आवश्यक नहीं है और इसे छोड़ दिया जा सकता है
  • JDK 8 होम फोल्डर और JDK 8 binफोल्डर को अपने %PATH%वैरिएबल में जोड़ें
  • JAVA_HOMEJDK 8 होम फ़ोल्डर के पथ के मूल्य के साथ एक नया वातावरण चर बनाएं
  • JAVA8_HOMEJDK 8 होम फ़ोल्डर के पथ के मान के साथ फिर से एक नया वातावरण चर बनाएं
  • JAVA7_HOMEJDK 7 होम फ़ोल्डर के पथ के मूल्य के साथ एक नया वातावरण चर बनाएं
  • एक टर्मिनल विंडो खोलें और java -versionकमांड चलाएं और सत्यापित करें कि जावा 8 ऊपर और चल रहा है
  • javac -versionउसी विंडो में कमांड चलाएँ और सत्यापित करें कि JDK 8 जावा कंपाइलर भी ऊपर और चल रहा है

अब, ADT-22.6.2 को निम्न लिंक से डाउनलोड किया जाना चाहिए:

http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip

  • ADT डाउनलोड करें और एक फ़ोल्डर में इसकी सामग्री को अनज़िप करें, जैसे D:\adt
  • ANDROID_HOMEअपने ADT इंस्टॉलेशन फ़ोल्डर के पथ के मूल्य के साथ बुलाया गया नया वातावरण चर परिभाषित करें , उदाD:\adt\sdk
  • अपने Andoid SDK Platform Toolsऔर Andoid SDK Toolsफ़ोल्डर्स, जैसे D:\adt\sdk\toolsऔर D:\adt\sdk\platform-tools, अपने %PATH%चर में जोड़ें
  • यदि आपको पसंद है तो ग्रहण आईडीई का शॉर्टकट बनाएं। यह आपके ADT इंस्टॉलेशन फोल्डर के अंतर्गत स्थित है, जैसेD:\adt\eclipse
  • ग्रहण आईडीई चलाएं और कार्यक्षेत्र बनाएं, जैसे D:\adt\workspace
  • उस Android SDK Managerबटन पर क्लिक करें जो टूलबार पर स्थित है
  • का चयन करें Android SDK Build tools Rev. 19.1और Android Support Libraryकेवल। बाकी सबका चयन करें और इन दो पैकेजों को स्थापित करें।

यदि सब कुछ ठीक रहा, तो ADT ऊपर और चल रहा होगा।

निम्न उपकरणों की स्थापना भी अत्यधिक अनुशंसित है:

  • एक्लिप्स केपलर जावा 8 सपोर्ट: यह एक्लिप्स को नए जावा 8 सिंटेक्स एक्सटेंशन को मान्यता देता है और आपको red dotsअपने जावा कोड एडिटर में परेशान करने से छुटकारा दिलाता है। इसे Help -> Install New Softwareग्रहण के माध्यम से स्थापित किया जा सकता है । Http://download.eclipse.org/eclipse/updates/4.3-P-builds/Work with फ़ील्ड में दर्ज करें और इसे इंस्टॉल करना जारी रखें।

  • Nodeclipse / Enide Gradle: इसका उपयोग मुख्य रूप से ग्रूवी भाषा के खोजशब्दों को उजागर करने के लिए किया जाता है। ग्रूवी को ग्रैड बिल्ड स्क्रिप्ट्स के लिए DSL के रूप में उपयोग किया जाता है। इस प्लगइन के माध्यम से स्थापित किया जा सकता है Eclipse Marketplace। हालाँकि, ADT-22.6.2 के भीतर ग्रहण साथ नहीं आता है Eclipse Marketplace Client। इसलिए, आपको पहले ग्रहण में उपकरण के Eclipse Marketplace Clientमाध्यम से इंस्टॉल करना होगा Install New Software। Http //: enter.eclipse.org/mpc/kepler/ Work withफ़ील्ड में दर्ज करें और इसे स्थापित करना जारी रखें। स्थापित करने के बाद Eclipse Marketplace Client, आप के लिए खोज कर सकते Nodeclipse/Enide Gradleमें Eclipse Marketplace Clientहै और इसे स्थापित करें।

  • Genymotion Virtual Device: यह डिफ़ॉल्ट का एक बेहतरीन प्रतिस्थापन है Android Virtual Deviceजो ADT के साथ आता है। एवीडी कष्टप्रद बोझिल है और यह बिना किसी कारण के दुर्घटनाग्रस्त होता रहता है। Genymotion आपको Android VD की उन CyanogenModछवियों का उपयोग करने के लिए तैयार करता है जो कि Oracle VirtualBox द्वारा निष्पादित की जाती हैं । इसका एकल उपयोगकर्ता लाइसेंस मुफ्त में है और इसे http://www.genymotion.com से डाउनलोड किया जा सकता है । केवल एक लॉगिन की आवश्यकता है और इसे ग्रहण में भी एकीकृत किया जा सकता है। विवरण के तहत पाया जा सकता है:

https://cloud.genymotion.com/page/doc/#collapse8

नीचे Android 4.3 आधारित CyanogenMod वर्चुअल डिवाइस का स्क्रीनशॉट है,

यहाँ छवि विवरण दर्ज करें

इसे x86 या x64 आधारित व्यक्तिगत कंप्यूटर पर चलने वाला एक पूरी तरह से Android डिवाइस माना जा सकता है। जैसे Google सेवाओं का उपयोग करने के लिएGoogle PlayStoreइस वर्चुअल डिवाइस कीgapps लिए, एंड्रॉइड संस्करण के लिए एक छवि जो इसका उपयोग करता है उसे डिवाइस पर फ्लैश किया जाना चाहिए। gappsडिवाइस के लिए एक उचित छवि CyanogenMod वेबसाइट से डाउनलोड की जा सकती है:

http://wiki.cyanogenmod.org/w/Google_Apps

ग्रेड की स्थापना वैकल्पिक है क्योंकि यह एंड्रॉइड एसडीके द्वारा भी प्रदान किया गया है, लेकिन इसकी अलग स्थापना अत्यधिक अनुशंसित है। इन चरणों का पालन करके इसकी स्थापना की जा सकती है:

  • ग्रेड वेब साइट पर जाएं: जाएं http://www.gradle.org/

  • क्लिक करें Downloads

  • के अंतर्गत Previous Releases संस्करण 1.10 और डाउनलोड चुनें या तो gradle-1.10-all.zip या gradle-1.10-bin.zip
  • एक फ़ोल्डर में अपनी सामग्री खोलना, जैसे D:\adt\gradle
  • एक नए पर्यावरण चर को परिभाषित करें GRADLE_HOMEअपने ग्रैडल इंस्टॉलेशन फ़ोल्डर के पथ के मूल्य के साथ , उदाD:\adt\gradle
  • अपने ग्रेडल बायनेरी फोल्डर, जैसे D:\adt\gradle\bin, को अपने साथ जोड़ें%PATH% चर चर में जोड़ें
  • एक टर्मिनल विंडो खोलें और gradle -vकमांड चलाएं और सत्यापित करें कि यह चालू है और यदि आप सफलतापूर्वक इस बिंदु तक आ गए हैं, तो इसका मतलब है कि आप जावा 8 सुविधाओं का उपयोग करके अपना पहला एंड्रॉइड ऐप बनाने के लिए तैयार हैं।

डेमो ऐप

पिछले अनुभाग में वर्णित उपकरणों के उपयोग को प्रदर्शित करने के लिए एक सरल ऐप बनाया जाएगा। आप Android डेवलपर टूल में लंबो एक्सप्रेशन का उपयोग करने के बारे में जानकारी प्राप्त करने के लिए बस नीचे दिए गए चरणों का पालन कर सकते हैं:

  • ग्रहण आईडीई चलाएं और चयन करके एक नया एंड्रॉइड ऐप बनाएं File -> New -> Other -> Android -> Android Application Project
  • उस फॉर्म को भरें जो नीचे दिखाया गया है:

यहाँ छवि विवरण दर्ज करें

  • बस क्लिक करें Next निम्न रूपों Finishपर बटन पर क्लिक करें और पिछले एक पर बटन पर क्लिक करें। तक प्रतीक्षा करें जब तक ADT प्रोजेक्ट को लोड करना पूरा न कर दे
  • प्रोजेक्ट पर राइट-क्लिक करें New -> Folderऔर उसे चुनें और नाम देंbuilders
  • gen (Generated Java Files)फ़ोल्डर पर राइट-क्लिक करें और इसे हटा दें। ग्रैडल जल्द ही हमारे लिए एक जैसी फाइलें तैयार करेगा और हम उन्हें प्रोजेक्ट में जोड़ देंगे s build path. The। डिफ़ॉल्ट बिल्डर द्वारा बनाया गया फोल्डर चींटी बिल्डर के लिए जरूरी नहीं रह जाता है और उस फोल्डर के नीचे की कलाकृतियां अप्रचलित हो जाएंगी
  • buildersफ़ोल्डर के अंतर्गत निम्न बैच फ़ाइलें बनाएँ :

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • इन बैच फ़ाइलों को इस प्रकार भरें:

gradle_build.cmd:

यहाँ छवि विवरण दर्ज करें

gradle_post_build.cmd:

यहाँ छवि विवरण दर्ज करें

gradle_clean.cmd:

यहाँ छवि विवरण दर्ज करें

  • अन-चयन Project -> Build Automaticallyमेनू विकल्प
  • प्रोजेक्ट पर राइट-क्लिक करें और चुनें Properties -> Builders और ADT द्वारा प्रदान किए गए सभी डिफ़ॉल्ट बिल्डरों का चयन और करें
  • Newएक ही विंडो में बटन पर क्लिक करें और चुनें Programऔर क्लिक करेंOK
  • नया बिल्डर कॉन्फ़िगरेशन विंडो दिखाई देगा। इसके टैब इस प्रकार भरें:

Main नए बिल्डर कॉन्फ़िगरेशन का टैब

यहाँ छवि विवरण दर्ज करें

Refresh नए बिल्डर कॉन्फ़िगरेशन का टैब

यहाँ छवि विवरण दर्ज करें

Environment नए बिल्डर कॉन्फ़िगरेशन का टैब

यहाँ छवि विवरण दर्ज करें

Build Options नए बिल्डर कॉन्फ़िगरेशन का टैब

यहाँ छवि विवरण दर्ज करें

  • दूसरा बिल्डर बनाएं जिसे इसके प्रोग्राम के रूप में Gradle_Post_Buildउपयोग gradle_post_build.cmdकिया जाता है । इस बिल्डर की अन्य सभी सेटिंग्स पहले से निर्मित बिल्डर के साथ ठीक वैसी ही होनी चाहिए। यह बिल्डर बिल्ड प्रोसेस द्वारा बनाई गई कलाकृतियों को कॉपी करने के लिए जिम्मेदार होगाbin फ़ोल्डर ।
  • तीसरा बिल्डर बनाएं जिसे इसके प्रोग्राम के रूप में Gradle_Cleanerउपयोग gradle_clean.cmdकिया जाता है । केवल Run the builderअंतिम टैब में सेटिंग के रूप में सेट किया जाना चाहिए During a Clean। इस बिल्डर की अन्य सभी सेटिंग्स पहले बिल्डर के साथ ठीक वैसी ही होनी चाहिए। यह बिल्डर बिल्ड प्रक्रिया द्वारा बनाई गई कलाकृतियों की सफाई के लिए जिम्मेदार होगा जैसा कि नाम से पता चलता है।

HelloLambdaपरियोजना के नए बिल्डर्स

यहाँ छवि विवरण दर्ज करें

  • प्रोजेक्ट पर राइट-क्लिक करें और चुनें Export
  • का चयन करें Android -> Generate Gradle Build Filesऔर क्लिक करेंNext
  • अगली विंडो में प्रोजेक्ट चुनें और क्लिक करें Finish
  • अपनी परियोजना के रूट फ़ोल्डर में जाओ और फ़ाइलों को हटाने gradlewऔर gradlew.batgradleफोल्डर को भी डिलीट करें
  • ग्रहण पर वापस जाएँ और Project -> Cleanमेनू विकल्प चुनें। फॉर्म इस प्रकार भरें कि निम्नानुसार दिखाई दे:

Clean Project खिड़की

यहाँ छवि विवरण दर्ज करें

  • OKसफाई प्रक्रिया पूरी होने तक क्लिक करें और प्रतीक्षा करें
  • setContentViewअपनी MainActivityकक्षा में कार्य करने के लिए कॉल के ठीक बाद नीचे दिया गया जावा कोड स्निपेट जोड़ें :

यहाँ छवि विवरण दर्ज करें

  • निम्नानुसार अनुभाग build.gradleतक फ़ाइल की शुरुआत बदलें sourceCompatibility:

यहाँ छवि विवरण दर्ज करें

  • प्रोजेक्ट पर राइट-क्लिक करें और Properties -> Java Compilerविकल्प का चयन करें और सभी अनुपालन स्तर जावा 8 पर सेट करें । इससे ग्रहण नए जावा 8 कंस्ट्रक्शन जैसे लैम्ब्डा एक्सप्रेशन को पहचान सकेगा।
  • Noअधिसूचना विंडो में क्लिक करें
  • प्रोजेक्ट पर राइट-क्लिक करें और चुनें Build project। ग्रहण परियोजना का निर्माण शुरू कर देगा।

निर्माण प्रक्रिया यहाँ छवि विवरण दर्ज करें

  • प्रोजेक्ट पर राइट-क्लिक करें और जाएं Properties -> Java Build Path। निम्न फ़ोल्डरों को बिल्ड पथ में जोड़ें (नीचे दी गई छवि में भी दिखाया गया है):

    • build\source\buildConfig\debug
    • build\source\r\debug

यहाँ छवि विवरण दर्ज करें

ग्रहण अब पहचानने R.javaऔर buildConfig.javaफ़ाइलों को करने में सक्षम होगा और यह कोई भी प्रदर्शित नहीं करेगा red dotsजो परियोजना की संसाधन फ़ाइलों से संबंधित त्रुटियों को दर्शाता है।

  • Run Configurationप्रोजेक्ट पर राइट-क्लिक करके और फिर चयन करके अपने Android लक्ष्य प्लेटफ़ॉर्म के लिए एक नया बनाएँ Run As -> Run Configurations। उदाहरण के लिए, यह डेमो एप्लिकेशन जीनोमेडी वीडी पर नीचे दिखाया गया है:

HelloLambda अनुप्रयोग

यहाँ छवि विवरण दर्ज करें

आप LogCatविंडो में देख सकते हैं कि साधारण लैम्ब्डा अभिव्यक्ति वाला कोड स्निपेट ठीक से काम करता है

यहाँ छवि विवरण दर्ज करें

स्रोत: Android डेवलपर टूल में जावा 8 लैम्बडा एक्सप्रेशंस का उपयोग करना


लेकिन क्या आप एंड्रॉइड डीबगर का उपयोग करके इस कोड को डीबग कर पाएंगे? ढेर / लाइन नंबर संगत नहीं होगा मेरा अनुमान है। एंड्रॉइड पर जावा 8 के साथ विकसित होने के लिए एक बड़ी कमी की तरह लगता है।
लाश

2
@ ज़ीन हाँ आप अभी भी इसे डिबग करने में सक्षम हैं। सब कुछ ठीक काम करता है।
कोर्निल्टसेव अनातोली

42

नए अपडेट के लिए इस लिंक को फॉलो करें। जावा 8 भाषा सुविधाओं का उपयोग करें

पुराना उत्तर

के रूप में एंड्रॉयड एन पूर्वावलोकन रिलीज एंड्रॉयड समर्थन सीमित की सुविधाओं जावा 8 देख जावा 8 भाषा की सुविधाएँ

इन सुविधाओं का उपयोग शुरू करने के लिए, आपको एंड्रॉइड स्टूडियो 2.1 और एंड्रॉइड एन पूर्वावलोकन एसडीके को डाउनलोड और सेट करना होगा , जिसमें आवश्यक जैक टूलचैन और अपडेटेड एंड्रॉइड प्लगइन ग्रैडल शामिल हैं। यदि आपने अभी तक Android N पूर्वावलोकन SDK स्थापित नहीं किया है, तो Android N के लिए विकसित करने के लिए सेट अप देखें ।

समर्थित जावा 8 भाषा सुविधाएँ और एपीआई

Android वर्तमान में सभी जावा 8 भाषा सुविधाओं का समर्थन नहीं करता है। हालाँकि, Android N पूर्वावलोकन को लक्षित करने वाले ऐप्स विकसित करते समय निम्नलिखित सुविधाएँ अब उपलब्ध हैं:

डिफ़ॉल्ट और स्थिर इंटरफ़ेस विधियाँ

लैम्ब्डा भाव (एपीआई स्तर 23 और उससे कम पर भी उपलब्ध है)

दोहराए जाने वाले एनोटेशन

विधि संदर्भ (एपीआई स्तर 23 और उससे कम पर भी उपलब्ध है)

कुछ अतिरिक्त जावा 8 विशेषताएं हैं जो एंड्रॉइड का समर्थन करते हैं, आप जावा 8 भाषा सुविधाओं से पूर्ण विवरण देख सकते हैं

अपडेट करें

नोट: एंड्रॉइड एन अनाम वर्गों पर लैम्ब्डा अभिव्यक्ति के अपने कार्यान्वयन को आधार बनाता है। यह दृष्टिकोण उन्हें एंड्रॉइड के पुराने संस्करणों पर पीछे की ओर संगत और निष्पादन योग्य बनाता है। पहले के संस्करणों पर लैम्ब्डा के भावों का परीक्षण करने के लिए, अपनी बिल्ड.ग्रेड फ़ाइल पर जाना याद रखें, और कंपाइलडासवर्सन को सेट करें और 23 या उससे कम को लक्षित करें।

अपडेट २

अब एंड्रॉइड स्टूडियो 3.0 स्थिर रिलीज़ समर्थन जावा 8 लाइब्रेरी और जावा 8 भाषा सुविधाएँ (जैक कंपाइलर के बिना)।


मुझे कुछ समझ नहीं आया। क्या कोई आवश्यकता है minSdkVersion?
विंडराइडर

मुझे लगता है कि केवल लैम्ब्डा अभिव्यक्तियाँ ही पिछड़ी संगत हैं, अन्य जावा 8 सुविधाएँ केवल एन (या भविष्य के संस्करण) पर काम करेंगी। मैंने इसका परीक्षण नहीं किया है, लेकिन यह मैं एंड्रॉइड डॉक्स से समझता हूं। तो, Java 8 के लिए सुविधाएँ minSdkVersion N है, लैम्ब्डा एक्सप्रेशन के अलावा

इसलिए ... जब तक एन डैशबोर्ड में नेता नहीं बन जाता, तब तक एक और कुछ साल। :(
विंडराइडर

दुर्भाग्य से हाँ। या जब तक एंड्रॉइड किसी भी तरह से लैम्ब्डा जैसी बैकवर्ड संगतता प्रदान करता है

1
@WindRider, आप minSdkVersion 15 और इसके बाद के संस्करण का उपयोग कर सकते हैं। वर्तमान में मैं लैंबडास के साथ अपने एंड्रॉइड प्रोजेक्ट में minSdkVersion 17 का उपयोग कर रहा हूं और सब कुछ काम कर रहा है।
यायामिल

22

हाँ, Android जावा 8 का समर्थन करता है (24.1.17)

अब यह संभव है

लेकिन आपको अपने डिवाइस को जावा 1.8 पर चलाने और इसे चलाने के लिए "jackOptions" को सक्षम करने की आवश्यकता होगी। जैक नए एंड्रॉइड कंपाइलर का नाम है जो जावा 8 चलाता है

https://developer.android.com/guide/platform/j8-jack.html

इन पंक्तियों को build_gradle में जोड़ें

    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java 8 एंड्रॉइड स्टूडियो 2.0 का रनिंग जावा इंजन लगता है, लेकिन यह अभी भी जावा 8 के सिंटैक्स को स्वीकार नहीं करता है क्योंकि मैंने जाँच की थी, और आप अब एंड्रॉइड स्टूडियो से एक कंपाइलर नहीं चुन सकते हैं। हालाँकि, यदि आप अपने Android क्लाइंट में कार्यात्मक प्रोग्रामिंग तंत्र की आवश्यकता है, तो आप scala प्लगइन का उपयोग कर सकते हैं।

यहाँ छवि विवरण दर्ज करें


1
स्काला को APK
TechSpellBound

कृपया अपडेट किए गए एंड्रॉइड स्टूडियो 2.0 के लिए इस समाधान का संदर्भ लें क्योंकि उन्होंने सीमित कॉन्फ़िगरेशन विकल्पों के अपडेट किए हैं।
गौरव शर्मा

19

एंड्रॉइड एक जावा का उपयोग करता है जो जावा 6 से दूर है।

एंड्रॉयड एसडीके संस्करण 19 के रूप में, आप जावा 7 सुविधाओं का उपयोग कर सकते हैं ऐसा करने से । Java 8 (अभी तक) के लिए कोई पूर्ण समर्थन नहीं।


1
आप एक जीवन रक्षक हैं। क्या आप जानते हैं कि अगर ऐसा कुछ है जो इसी तरह से कोशिश-संसाधनों को लागू करेगा?
आकाशगंगा

@galets का अभी कोई रास्ता नहीं है, लेकिन मैं भविष्य में इसे किसी बिंदु पर जोड़ते हुए Google पर दांव लगाऊंगा। अतिरिक्त जानकारी, देखें: stackoverflow.com/questions/16921337/…
chaqke

16

Native Java 8 Android पर आता है! आखिरकार!

प्रत्येक मॉड्यूल की build.gradle फ़ाइल से Retrolambda प्लगइन और retrolambda ब्लॉक निकालें:

जैक को अक्षम करने और डिफ़ॉल्ट टूलचैन पर स्विच करने के लिए, बस अपने मॉड्यूल की बिल्ड.ग्रेड फ़ाइल से जैकऑक्शन को हटा दें

समर्थित जावा 8 भाषा सुविधाओं का उपयोग शुरू करने के लिए, एंड्रॉइड प्लगइन को 3.0.0 (या उच्चतर) में अपडेट करें।

Android स्टूडियो 3.0 के साथ शुरू, जावा 8 भाषा सुविधाएँ अब मूल रूप से Android द्वारा समर्थित हैं:

  • लम्बोदर भाव
  • विधि संदर्भ
  • टाइप एनोटेशन (वर्तमान में एनोटेशन जानकारी टाइपटाइम पर उपलब्ध नहीं है, लेकिन केवल संकलन समय पर);
  • बार-बार एनोटेशन
  • डिफ़ॉल्ट और स्थिर इंटरफ़ेस विधियाँ (एपीआई स्तर 24 या उच्चतर पर, कोई तत्काल रन समर्थन थियो);

न्यूनतम एपीआई स्तर 24 से भी निम्नलिखित जावा 8 एपीआई उपलब्ध हैं:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType (कक्षा)
  • java.lang.reflect.Method.isDefault ()

भाषा स्तर की परियोजना को सूचित करने के लिए इन पंक्तियों को अपने एप्लिकेशन मॉड्यूल के build.gradle में जोड़ें:

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

अपनी gradle.properties फ़ाइल में निम्न जोड़कर Java 8 भाषा सुविधाओं के लिए समर्थन अक्षम करें :

android.enableDesugar=false

हो गया! अब आप देशी जावा 8 का उपयोग कर सकते हैं!


14

Android आधिकारिक तौर पर Android N के रूप में Java 8 का समर्थन करता है।

फ़ीचर घोषणाएँ यहाँ हैं , जावा 8 भाषा की घोषणा है:

बेहतर जावा 8 भाषा समर्थन - हम Android के लिए जावा 8 भाषा सुविधाएँ लाने के लिए उत्साहित हैं। एंड्रॉइड के जैक कंपाइलर के साथ, अब आप कई लोकप्रिय जावा 8 भाषा सुविधाओं का उपयोग कर सकते हैं, जिसमें लैम्ब्डा और अधिक शामिल हैं, एंड्रॉइड संस्करणों पर जिंजरब्रेड के रूप में वापस। नई सुविधाएँ बॉयलरप्लेट कोड को कम करने में मदद करती हैं। उदाहरण के लिए, ईवेंट श्रोताओं को प्रदान करते समय लंबोदर गुमनाम आंतरिक वर्गों को बदल सकते हैं। कुछ जावा 8 भाषा सुविधाएँ - समान डिफ़ॉल्ट और स्थिर विधियों, धाराओं और कार्यात्मक इंटरफेस - अब N और ऊपर भी उपलब्ध हैं। जैक के साथ, हम पिछड़ी संगतता को बनाए रखते हुए जावा भाषा को अधिक बारीकी से ट्रैक करने के लिए उत्सुक हैं।


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

12

हम जावा 8 का उपयोग कर सकते हैं:

  1. Build.gradle (प्रोजेक्ट: myProject) में निम्नलिखित जोड़ें

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. Build.gradle (मॉड्यूल: myModule) में निम्नलिखित जोड़ें

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

1
पहले जवाब से अलग क्या है जो रेट्रो लैंबडा की सिफारिश करता है?
Maarten Bodewes

2
@MaartenBodewes लगता है कि यह माना जाता है कि यह स्वीकृत उत्तर की तुलना में बहुत सरल हो गया है। देखें medium.com/android-news/...
TechSpellBound

इसका उपयोग न करें। प्लगिन छोटी गाड़ी है
अक्षय मुकादम

11

UPDATE 2020/01/17

एंड्रॉइड स्टूडियो 4.0 में आपके ऐप के लिए न्यूनतम एपीआई स्तर की आवश्यकता के बिना , desugaring नामक तकनीक का उपयोग करके जावा 8 भाषा एपीआई की एक संख्या का उपयोग करने के लिए समर्थन शामिल है :
https://developer.android.com/studio/preview/features#j8-gugar

इस रिलीज़ में API का निम्नलिखित सेट समर्थित है:

  • अनुक्रमिक धाराएँ ( java.util.stream)
  • का एक उपसमूह java.time
  • java.util.function
  • के लिए हाल ही में परिवर्धन java.util.{Map,Collection,Comparator}
  • Optionals ( java.util.Optional, java.util.OptionalIntऔरjava.util.OptionalDouble ) और कुछ अन्य नए वर्गों ऊपर एपीआई के साथ उपयोगी
  • करने के लिए कुछ अतिरिक्त java.util.concurrent.atomic(पर नए तरीकों AtomicInteger, AtomicLongऔर AtomicReference)
  • ConcurrentHashMap (Android 5.0 के लिए बग फिक्स के साथ)

इन भाषा API का समर्थन करने के लिए, D8 एक अलग लाइब्रेरी DEX फ़ाइल संकलित करता है जिसमें अनुपलब्ध API का कार्यान्वयन होता है और इसे आपके ऐप में शामिल करता है। अवरोही प्रक्रिया आपके ऐप के कोड को फिर से लिखने के बजाय रनटाइम पर इस लाइब्रेरी का उपयोग करने के लिए करती है।

इन भाषा API के लिए समर्थन सक्षम करने के लिए, अपने मॉड्यूल की build.gradleफ़ाइल में निम्नलिखित को शामिल करें :

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}

2017 से मूल पोस्ट

एंड्रॉइड स्टूडियो 3.0 ने जावा 8 भाषा सुविधाओं में से कुछ के लिए अंतर्निहित समर्थन प्रदान करना शुरू किया, जो हैं:

  • लम्बोदर भाव
  • विधि संदर्भ
  • टाइप एनोटेशन (सूचना संकलन समय पर उपलब्ध है, लेकिन रनटाइम पर नहीं)
  • बार-बार एनोटेशन
  • डिफ़ॉल्ट और स्थिर इंटरफ़ेस विधियाँ

इसके अलावा एपीआई स्तर 24 से शुरू निम्नलिखित जावा 8 एपीआई उपलब्ध हैं:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

इसके अलावा, try-with-resourcesसभी एंड्रॉइड एपीआई स्तरों के लिए समर्थन बढ़ाया गया था।

अधिक जावा 8 सुविधाओं को भविष्य में जोड़ने का वादा किया गया है।

समर्थित जावा 8 भाषा सुविधाओं का उपयोग शुरू करने के लिए, एंड्रॉइड प्लगइन को 3.0.0-अल्फा 1 (या उच्चतर) में अपडेट करें और अपने मॉड्यूल की बिल्ड.ग्रेड फ़ाइल में निम्न जोड़ें:

android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

अधिक जानकारी के लिए देखें:
https://developer.android.com/studio/write/java8-support.html


मुझे क्या नहीं मिलता है, एंड्रॉइड स्टूडियो को java8 समर्थन के साथ क्या करना है (क्या intellij यह पहले नहीं था) ?! क्या इसका मतलब यह है कि अगर मैं इस संकलन को संकलित करने के लिए टर्मिनल पर ग्रेडेल का उपयोग करता हूं तो यह संकलन नहीं होगा ?!
cesarferreira

1
@cesarferreira आपको Android प्लगइन को नवीनतम संस्करण में अपडेट करने की आवश्यकता है (जो इस समय है 2.4.0-alpha6)। कृपया उत्तर में उद्धरण ब्लॉक की जाँच करें।
आइडलोन

इसे मॉड्यूल में जोड़ रहा हूं (ऐप नहीं) मैं काम कर रहा हूं। ऐप मॉड्यूल में जोड़ने से कोई मदद नहीं मिली।
सुरेखा

6

आसान तरीका

आप एंड्रॉइड प्रोजेक्ट के लिए जावा 1.8 समर्थन को सक्षम कर सकते हैं।

  • ओपन प्रोजेक्ट स्ट्रक्चर

    • या तो दबाकर Ctrl + Shift + Alt + S

    • या File > Project Structure

  • प्रोजेक्ट संरचना संवाद में स्रोत संगतता और लक्ष्य संगतता 1.8 को अपडेट करें जैसा कि दिखाया गया है (फ़ाइल> प्रोजेक्ट संरचना पर क्लिक करें)।

छवि

या आप ग्रेडेल का उपयोग कर सकते हैं

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

सिंक प्रोजेक्ट। और बस!

नोट: एंड्रॉइड स्टूडियो 3.0.0 या उच्चतर के लिए जावा 1.8 समर्थन सक्षम किया जा सकता है । आगे पढ़ने के लिए प्रलेखन देखें ।


इस समाधान ने मेरे लिए काम किया: stackoverflow.com/a/55467237/4698320
Däñish Shärmà

5

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

आज, मुझे लगता है कि "आधिकारिक" उत्तर अभी भी नहीं है, और जबकि रेट्रोलाम्बा अभी भी जाने के लिए एक अच्छा तरीका लगता है, वहाँ कुछ और "अनौपचारिक" मार्ग नीचे जाने के इच्छुक लोगों के लिए एक और विकल्प है, जिसका नाम कोटलिन हो सकता है।

आज कोटलिन 1.0.0 पर पहुंच गया। कोटलिन से परिचित नहीं लोगों के लिए, उनकी वेबसाइट पर अधिक जानकारी यहां पाई जा सकती है:

https://kotlinlang.org

या जेक व्हार्टन द्वारा दिए गए एक बात के इस वीडियो को देखें

https://www.youtube.com/watch?v=A2LukgT2mKc


4

ताज़ा खबर:

Google घोषणा करता है कि एंड्रॉइड एन और एंड्रॉइड स्टूडियो 2.1+ के साथ, प्लेटफार्म जावा 8 का समर्थन करेगा। स्टूडियो 2.1 का स्थिर संस्करण भी जारी किया गया था।

अंत में हम लैम्बडा एक्सप्रेशन का उपयोग कर सकते हैं। लूप के लिए कोई और अधिक सूची फ़िल्टर नहीं। Horeeey।


4

इस config build.gradle और सिंक ग्रेड को जोड़ें:

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}

1
एंड्रॉइड प्रोजेक्ट के लिए जावा 8 के लिए समर्थन जोड़ने का यह सही तरीका है। नकारात्मक पक्ष यह है कि जैक सक्षम होने पर तत्काल रन नहीं चलता है।
आयनॉट नेग्रू

पूरा समर्थन मत करो।
अहमद आगज़ादेह

2

Google ने अभी घोषणा की है कि जावा 8 एंड्रॉइड द्वारा मूल रूप से समर्थन किया जाएगा और जैक टूलचैन को अलग करेगा:

हमने जावा 8 भाषा सुविधाओं के लिए सीधे वर्तमान जेवैक और डीएक्स सेट टूल में समर्थन जोड़ने का फैसला किया है, और जैक टूलचैन को चित्रित किया है। इस नई दिशा के साथ, जावा क्लास फ़ाइल प्रारूप पर निर्भर मौजूदा उपकरण और प्लगइन्स को काम करना जारी रखना चाहिए। आगे बढ़ते हुए, जावा 8 भाषा सुविधाओं को मूल रूप से एंड्रॉइड बिल्ड सिस्टम द्वारा समर्थित किया जाएगा। हम आने वाले हफ्तों में इसे एंड्रॉइड स्टूडियो के हिस्से के रूप में लॉन्च करने का लक्ष्य बना रहे हैं, और हम इस निर्णय को आपके साथ जल्दी से साझा करना चाहते हैं।

अधिक जानकारी यहाँ: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

हाँ। हम जल्द ही Java 8 का उपयोग करेंगे!

हमने जावा 8 भाषा सुविधाओं के लिए सीधे वर्तमान जेवैक और डीएक्स सेट टूल में समर्थन जोड़ने का फैसला किया है, और जैक टूलचैन को चित्रित किया है। इस नई दिशा के साथ, जावा क्लास फ़ाइल प्रारूप पर निर्भर मौजूदा उपकरण और प्लगइन्स को काम करना जारी रखना चाहिए। आगे बढ़ते हुए, जावा 8 भाषा सुविधाओं को मूल रूप से एंड्रॉइड बिल्ड सिस्टम द्वारा समर्थित किया जाएगा। हम आने वाले हफ्तों में इसे एंड्रॉइड स्टूडियो के हिस्से के रूप में लॉन्च करने का लक्ष्य बना रहे हैं, और हम इस निर्णय को आपके साथ जल्दी से साझा करना चाहते हैं।

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

मॉड्यूल lvl बिल्ड ग्रेडेल में इस लाइन को जोड़ें

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


1

मैंने स्टैक ओवरफ्लो पर एक समान प्रश्न का एक समान उत्तर लिखा था , लेकिन यहां उस उत्तर का हिस्सा है।

एंड्रॉइड स्टूडियो 2.1:

एंड्रॉइड स्टूडियो के नए संस्करण (2.1) में जावा 8 सुविधाओं के लिए समर्थन है। यहाँ Android डेवलपर्स ब्लॉगस्पॉट पोस्ट से एक उद्धरण है :

... एंड्रॉइड स्टूडियो 2.1 रिलीज में नए जैक कंपाइलर के लिए समर्थन और जावा 8 के लिए समर्थन शामिल है ।

...

N डेवलपर प्रीव्यू के साथ विकसित होने पर जावा 8 भाषा की विशेषताओं का उपयोग करने के लिए, आपको जैक कंपाइलर का उपयोग करना होगा। नया प्रोजेक्ट विज़ार्ड [फ़ाइल → नया → प्रोजेक्ट] एन को लक्षित करने वाली परियोजनाओं के लिए सही कॉन्फ़िगरेशन बनाता है।


Android Studio 2.1 से पहले:

Android अभी तक जावा 1.8 का समर्थन नहीं करता है (यह केवल 1.7 तक समर्थन करता है), इसलिए आप लैम्ब्डा जैसे जावा 8 सुविधाओं का उपयोग नहीं कर सकते।

यह उत्तर एंड्रॉइड स्टूडियो की संगतता पर अधिक विवरण देता है ; य़ह कहता है:

यदि आप एंड्रॉइड में जावा 8 की प्रमुख विशेषताओं में से एक लैम्ब्डा का उपयोग करना चाहते हैं, तो आप ग्रेडल-रिट्रोलाम्बा का उपयोग कर सकते हैं

यदि आप उपयोग करने के बारे में अधिक जानना चाहते हैं gradle-retrolambda, तो यह उत्तर ऐसा करने पर बहुत विस्तार देता है


हाय फारबोड! मैं AndroidStudio 2.2.2 का उपयोग कर रहा हूं। मेरा "SDK Location"(यह मैक "/Users/me/Library/Android/sdk" एफडब्ल्यूआईडब्ल्यू पर है) सिर्फ कहता हूं कि क्या मैं जावा 8 का उपयोग कर रहा हूं - जावा का उपयोग कैसे करें ?? धन्यवाद!
फेटी

1

मुझे लगा कि मैं उन लोगों के लिए एक अद्यतन उत्तर पोस्ट करूंगा जो कुछ अधिक वर्तमान हैं।

वर्तमान में Android और Android Studio Java 8 सुविधाओं के सबसेट का समर्थन कर रहे हैं। उनकी वेबसाइट पर स्थित Android प्रलेखन के अनुसार , Google कहता है:

जावा 8 भाषा सुविधाओं के लिए जैक नामक एक नए संकलक की आवश्यकता है। जैक केवल एंड्रॉइड स्टूडियो 2.1 और उच्चतर पर समर्थित है। इसलिए यदि आप जावा 8 भाषा सुविधाओं का उपयोग करना चाहते हैं, तो आपको अपना ऐप बनाने के लिए एंड्रॉइड स्टूडियो 2.1 का उपयोग करना होगा।

यदि आपके पास पहले से एंड्रॉइड स्टूडियो स्थापित है, तो सुनिश्चित करें कि आप मदद> चेक फॉर अपडेट (मैक, एंड्रॉइड स्टूडियो> अपडेट के लिए चेक करें) पर क्लिक करके नवीनतम संस्करण में अपडेट करें। यदि आपके पास पहले से ही अपने वर्कस्टेशन पर आईडीई स्थापित नहीं है, तो यहां एंड्रॉइड स्टूडियो डाउनलोड करें।

समर्थित जावा 8 भाषा सुविधाएँ और एपीआई

Android सभी जावा 8 भाषा सुविधाओं का समर्थन नहीं करता है। हालाँकि, एंड्रॉइड 7.0 (एपीआई स्तर 24) को लक्षित करने वाले एप्लिकेशन विकसित करते समय निम्नलिखित विशेषताएं उपलब्ध हैं:

  • डिफ़ॉल्ट और स्थिर इंटरफ़ेस विधि लैम्ब्डा एक्सप्रेशन (एपीआई स्तर 23 और उससे कम पर भी उपलब्ध है)
  • दोहराए जाने वाले एनोटेशन
  • विधि संदर्भ (एपीआई स्तर 23 और उससे कम पर भी उपलब्ध है)
  • टाइप एनोटेशन (एपीआई स्तर 23 और उससे कम पर भी उपलब्ध)

इसके अतिरिक्त, निम्नलिखित जावा 8 भाषा एपीआई भी उपलब्ध हैं:

परावर्तन और भाषा से संबंधित एपीआई:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault () और परावर्तन एपीआई दोहराए गए एनोटेशन से जुड़े होते हैं, जैसे एनोटेटमेंटमेंट.गेटनोटेशनबाय टाइप (क्लास)

उपयोगिता एपीआई:

  • java.util.function
  • java.util.stream

नए जावा 8 भाषा सुविधाओं का उपयोग करने के लिए, आपको जैक टूलचिन का भी उपयोग करना होगा । यह नया एंड्रॉइड टूलचेन जावा भाषा के स्रोतों को एंड्रॉइड-रीडेबल डीईएक्स बायटेकोड में संकलित करता है, इसका अपना .jack लाइब्रेरी प्रारूप है, और एकल टूल के भाग के रूप में अधिकांश टूलचैन सुविधाएँ प्रदान करता है: रीपैकेजिंग, सिकुड़न, ओफ़्स्क्यूशन और मल्टीडेक्स।

यहां Android DEX फ़ाइलों को बनाने के लिए उपयोग किए जाने वाले दो टूलचिन की तुलना है:

Legacy javac toolchain:
    javac (.java  .class)  dx (.class  .dex)
    New Jack toolchain:
    Jack (.java  .jack  .dex)

1

मैंने यह प्रश्न 3 साल पहले पूछा था और जाहिर है कि उत्तर वर्षों में बदल गए हैं। जैसा कि ऊपर कुछ उत्तर दे चुके हैं, कुछ समय पहले, उत्तर हां हो गया । मैंने कभी स्वीकार किए गए उत्तर को अपडेट नहीं किया क्योंकि यह उस समय सही उत्तर था। (मुझे यकीन नहीं है कि स्टैक ओवरफ्लो नीति उस पर क्या है)

मैं सिर्फ उन लोगों के लिए एक और उत्तर जोड़ना चाहता था जो अभी भी इस विषय को खोजते हैं। 5/17/2017 तक Google ने यह भी घोषणा की कि कोटलिन भी एंड्रॉइड विकास के लिए एक आधिकारिक भाषा है।

मुझे आधिकारिक प्रेस रिलीज़ नहीं मिली है, लेकिन मैंने Google I / O के कुछ वीडियो देखे, जहां इसकी घोषणा की गई थी। यहां घोषणा पर कोटलिन टीम द्वारा एक ब्लॉग पोस्ट का लिंक दिया गया है।


1

मेरे लिए निम्न समस्या को जोड़ना (Android स्टूडियो 2.3.2):

build.gradle (परियोजना)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle (मॉड्यूल: एप्लिकेशन)

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } // SET JAVA VERSION
    ...
}

1

जावा 8 का एक सबसेट अब एंड्रॉइड स्टूडियो पर समर्थित है। बस नीचे दिए गए विंडो से स्रोत और लक्ष्य संगतता समायोजन करें:

फ़ाइल -> परियोजना संरचना

समायोजन विंडो

अधिक जानकारी नीचे दिए गए लिंक में दी गई है।

https://developer.android.com/studio/write/java8-support.html


1

UPDATE 2019/10/28

Android Studio 4.0 इस समस्या को हल करता है

D8 संकलक आपके एपीके में जावा 8 देशी एपीआई के बैकपैक को संकलित समय पर संकलित करता है और आपका ऐप मूल एपीआई के बजाय रनटाइम पर उस कोड का उपयोग करेगा। प्रक्रिया को डीसुगरिंग कहा जाता है ।


0

उपरोक्त सभी समाधान 2019 में नवीनतम एंड्रॉइड स्टूडियो 3.4+ के साथ काम नहीं कर रहे हैं ।

मैंने अपने एंड्रॉइड प्रोजेक्ट को जावा 8 में माइग्रेट या अपग्रेड करने के लिए एक सही और अद्यतित समाधान का अनुमान लगाया है ।

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

बदलें

यहाँ छवि विवरण दर्ज करें


0

हां, आप एंड्रॉइड स्टूडियो में जावा 8 भाषा सुविधाओं का उपयोग कर सकते हैं लेकिन संस्करण 3.0 या उच्चतर होना चाहिए। एंड्रॉइड स्टूडियो में जावा 8 सुविधाओं का उपयोग करने के लिए इस लेख को पढ़ें।

https://bijay-budhathoki.blogspot.com/2020/01/use-java-8-language-features-in-android-studio.html


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.