@ पावेल दुदका
जैक - एक संकलक है। जेवैक के समान, लेकिन यह थोड़ा अलग काम करता है:
जैसा कि आप देख सकते हैं, जैक जावा स्रोत कोड को सीधे Dex फाइल में संकलित करता है! हमारे पास अब मध्यवर्ती * .class फ़ाइलें नहीं हैं, इसलिए dx टूल की आवश्यकता नहीं है!
लेकिन रुकें! यदि मैं अपनी परियोजना में एक तृतीय-पक्ष पुस्तकालय (जो .class फ़ाइलों के संग्रह के रूप में आता है) को शामिल करूं तो क्या होगा?
और जब जिल खेल में आता है:
जिल क्लास फ़ाइलों को संसाधित कर सकते हैं और उन्हें विशेष जेसी प्रारूप में बदल सकते हैं जिसका उपयोग जैक कंपाइलर के लिए इनपुट के रूप में किया जा सकता है।
तो अब एक सेकंड के लिए एक तरफ कदम बढ़ाएं और सोचें ... उन सभी कूल प्लगइन्स का क्या होने वाला है, जिनकी हमें इतनी लत लग गई है? वे सभी की जरूरत है .class फ़ाइलें और जैक संकलक उन अब और नहीं है ...
सौभाग्य से, जैक हमारे लिए कुछ महत्वपूर्ण सुविधाएँ प्रदान करता है:
- Retrolambda - की जरूरत नहीं होगी। जैक लंबोदर को ठीक से संभाल सकता है
- प्रोगार्ड - यह अब जैक में बेक किया गया है, इसलिए आप अभी भी मोटापे और कम से कम उपयोग कर सकते हैं
लाभ:
जैक जावा प्रोग्रामिंग भाषा 1.7 का समर्थन करता है और नीचे वर्णित अतिरिक्त सुविधाओं को एकीकृत करता है।
Predexing
JACK लाइब्रेरी फ़ाइल बनाते समय, .dex लाइब्रेरी को प्री-डेक्स के रूप में .jack लाइब्रेरी फ़ाइल के अंदर जनरेट और स्टोर किया जाता है। संकलन करते समय, JACK प्रत्येक लाइब्रेरी से प्री-डेक्स का पुन: उपयोग करता है। सभी पुस्तकालय पूर्व -कृत हैं।
वृद्धिशील संकलन
वृद्धिशील संकलन का मतलब है कि केवल वे घटक जिन्हें अंतिम संकलन के बाद से छुआ गया था, और उनकी निर्भरताएं, पुनर्नवीनीकरण की गई हैं। वृद्धिशील संकलन पूर्ण संकलन की तुलना में काफी तेज हो सकता है जब परिवर्तन केवल घटकों के एक सीमित सेट तक सीमित होते हैं।
repackaging
JACK रेकजिंग करने के लिए jarjar कॉन्फ़िगरेशन फ़ाइलों का उपयोग करता है।
मल्टीडेक्स समर्थन
चूंकि डेक्स फाइलें 65K विधियों तक सीमित हैं, इसलिए 65K से अधिक विधियों वाले एप्लिकेशन को कई डेक्स फ़ाइलों में विभाजित किया जाना चाहिए। (मल्टीडेक्स के बारे में अधिक जानकारी के लिए 'बिल्डिंग एप्स विद 65 के मेथड्स' देखें।)
नुकसान:
- ट्रांसफ़ॉर्म एपीआई जैक द्वारा समर्थित नहीं है - कोई मध्यवर्ती जावा बाइटकोड नहीं है जिसे आप संशोधित कर सकते हैं, इसलिए कुछ प्लगइन्स जिसका मैंने यहां उल्लेख नहीं किया है वे काम करना बंद कर देंगे
- एनोटेशन प्रोसेसिंग वर्तमान में जैक द्वारा समर्थित नहीं है, इसलिए यदि आप डैगर, ऑटोवैल्यू आदि जैसे पुस्तकालयों पर बहुत अधिक निर्भर करते हैं, तो आपको जैक पर स्विच करने से पहले दो बार सोचना चाहिए। EDIT: जैसा कि जेक व्हार्टन द्वारा बताया गया है, एन प्रीव्यू में जैक के पास एनोटेशन प्रोसेसिंग सपोर्ट है, लेकिन ग्रैडल के माध्यम से यह अभी तक सामने नहीं आया है।
- एक जावा बाइटकोड स्तर पर काम करने वाले लिंट डिटेक्टर समर्थित नहीं हैं।
- जैकोको समर्थित नहीं है - ठीक है, मुझे व्यक्तिगत रूप से जैकोको संदिग्ध लगता है (यह वास्तव में वह नहीं दिखाता है जो आप देखना चाहते हैं), इसलिए इसके बिना जीवित रह सकते हैं
- डेक्सगार्ड - प्रोगार्ड का उद्यम संस्करण वर्तमान में समर्थित नहीं है