जेटिफायर क्या है?


97

जेटिफायर क्या है? उदाहरण के लिए, androidx- पैक निर्भरता का उपयोग करके एक नई परियोजना बनाने के लिए, इस नई परियोजना को gradle.properties फ़ाइल में निम्न पंक्ति जोड़ने की आवश्यकता है :

android.enableJetifier=true

तो इसका क्या मतलब है - "जेटीफ़ायर सक्षम करें"?


29
IIRC, Jetifier Googly तकनीक का एक अविभाजित बिट है जो कि AndroidX लाइब्रेरी का उपयोग करने के लिए स्वचालित रूप से सकर्मक निर्भरता में परिवर्तित होने वाला है। उदाहरण के लिए, मान लीजिए कि आपके पास implementation "com.commonsware.cwac:document:0.3.0"है dependencies। उस लाइब्रेरी संस्करण पर एक सकरात्मक निर्भरता है com.android.support:support-annotations:27.0.2। हालाँकि, आप androidx.annotation:annotationअन्य AndroidX निर्भरता के उपयोग के भाग के रूप में उपयोग करना चाहते हैं । Jetifier किसी तरह com.commonsware.cwac:documentउपयोग के लिए अद्यतन करेगा androidx.annotation:annotation
कॉमन्सवेयर

जवाबों:


67

इस साल के Google I / O (18), Google ने Jetpack की घोषणा की है जो डेवलपर के जीवन को आसान बनाने के लिए पुस्तकालयों का सेट / संग्रह है।

जेटपैक में पहले पेश किए गए एंड्रॉइड आर्किटेक्चर घटक (ViewModel, Room, Paging, LiveData आदि) के साथ-साथ WorkManager, नेविगेशन जैसे नए शुरू किए गए आर्किटेक्चर घटक शामिल हैं। इसके अलावा जेटपैक में एंड्रॉइड, एंड्रॉइडकेटीएक्स आदि जैसे पुस्तकालयों के अन्य सेट भी हैं।

AndroidX Android समर्थन पुस्तकालयों जैसे समर्थन, डेटाबाइंडिंग, डिज़ाइन आदि के लिए नया पैकेज संरचना है

जैसे अब वार्ड के डेवलपर androidx.databinding का उपयोग करेंगे। android.databinding के बजाय हमारी परियोजनाओं में पुस्तकालयों का आयात करते समय

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

डेवलपर्स के लिए एक और लाभ यह है कि हमें अपनी परियोजना में सभी समर्थन लाइब्रेरी के लिए एक ही संस्करण बनाए रखने की परवाह नहीं है।

Jetifier के बारे में, यह बिल्ड टाइम पर निर्भरता के सभी समर्थन पैकेज को परिवर्तित करता है। जेटिफायर के आधिकारिक प्रलेखन के अनुसार

जेटीफ़ायर टूल इसके बजाय समकक्ष AndroidX पैकेजों पर भरोसा करने के लिए समर्थन-पुस्तकालय-निर्भर पुस्तकालयों को माइग्रेट करता है। उपकरण आपको एंड्रॉइड स्टूडियो के साथ बंडल किए गए एंड्रॉइड ग्रेडल प्लगइन का उपयोग करने के बजाय सीधे एक व्यक्तिगत लाइब्रेरी को माइग्रेट करने देता है।

किसी प्रोजेक्ट में AndroidX का उपयोग करने के लिए हमें अपने प्रोजेक्ट के लिए 28 के लिए targetSdkVersion सेट करना होगा और gradle.properties फ़ाइल में 2 लाइनों को जोड़ना होगा

android.useAndroidX=true

android.enableJetifier=true

मुझे उम्मीद है कि यह आपकी क्वेरी का जवाब देगा।

संपादित करें

इस लिंक में उनके AndroidX काउंटर भाग के साथ सभी समर्थन पुस्तकालय घटक की मैपिंग है।

AndroidX के बारे में विस्तृत विवरण के लिए कृपया इस ब्लॉग को देखें


34
आप वास्तव में इस सवाल का जवाब नहीं दे रहे हैं कि "जेटिफायर क्या है?", बस एंड्रॉइड और जेटपैक के बारे में ले रहा है।
डेविड मिगुएल

2
@DavidMiguel मैंने मुख्य प्रश्न का उत्तर दिया है जिसमें पूछा गया है कि इसका क्या अर्थ है - "जेटीफ़ायर सक्षम करें"। यद्यपि यदि आपको लगता है कि मेरा उत्तर आंशिक है, तो मैं अपने उत्तर को तदनुसार अद्यतन करूँगा।
सिल्वर

71

यह मानते हुए कि आप परिचित हैं AndroidX। यदि नहीं, तो कृपया इस पोस्ट को देखें @ ।

Jetifiersupport librariesआपकी सभी निर्भरताओं को AndroidXस्वचालित रूप से परिवर्तित कर देगा , यदि आप इसे सेट नहीं करते हैं, trueतो आपकी परियोजना में दोनों होंगे, समर्थन ( 28.0.0 संस्करण के बाद पदावनत हो गया ) और AndroidX पैकेज, जो बेमानी है।

उदाहरण के लिए

यदि आपके पास PhotoView.javaअपनी निर्भरता है। वह समर्थन पुस्तकालय का उपयोग करता है AppCompatImageView

import android.support.v7.widget.AppCompatImageView;

इस वर्ग को अब androidxपैकेज में बदल दिया गया है, तो PhotoViewandroidx कैसे मिलेगा AppCompatImageView? और ऐप अभी भी डिवाइस में चलता है।

यह रन किसने बनाया?

जेटिफायर , जो बिल्ड टाइम पर निर्भरता के सभी समर्थन पैकेज को परिवर्तित करता है।

Jetifier प्रोजेक्ट android.support.v7.widget.AppCompatImageViewबनाते androidx.appcompat.widget.AppCompatImageViewसमय परिवर्तित हो जाएगा ।

निष्कर्ष

जब आप समर्थन लायब्रेरी से AndroidX पर माइग्रेट करते हैं, तो Jetifier को सक्षम करना महत्वपूर्ण है

AndroidX के बारे में अधिक समझने के लिए इस पोस्ट को देखें ।

जानकारी

निर्भरता कक्षाओं का उपयोग करते समय Jetifier को सक्षम करने के बाद आपका कोड संकलन समय त्रुटियों को दिखा सकता है। जो आप को हटाने के द्वारा निकाल सकते हैं .idea, .gradleऔर फिर से समन्वयन परियोजना।

Image2

Image1


10
आप .idea / पुस्तकालयों को हटाकर और ग्रेड को पुन: सिंक्रनाइज़ करके संकलन-समय की त्रुटियों से छुटकारा पा सकते हैं।
क्लो नाइबिब

1
मुझे लगता है कि Jetifier बिल्ड टाइम पर काम करता है न कि रनटाइम पर जैसा कि यहाँ बताया गया है। आप या तो android.enableJetifier = gradle पर true का उपयोग कर सकते हैं या androidx पर माइग्रेट करने के लिए स्टैंडअलोन जेटफ़ायर टूल डेवलपर . android.com/studio/command-line/jetifier का उपयोग कर सकते हैं । ये दोनों विकल्प बिल्ड समय पर पैकेज नामों को प्रतिस्थापित करते हैं, इसलिए पुराने समर्थन पुस्तकालय पैकेजिंग का हिस्सा भी नहीं हैं।
निशांथ

6

Jetifier के लिए एक एंड्रॉयड परियोजना पलायन करने में मदद करता है AndroidX

Jetifier आपके AndroidX प्रोजेक्ट के साथ 3rd पार्टी लाइब्रेरी को संगत बनाने में मदद करता है ।

यदि आप अपने एंड्रॉइड प्रोजेक्ट में किसी भी 3 पार्टी लाइब्रेरी का उपयोग नहीं कर रहे हैं, तो आपको Jetifier का उपयोग करने की आवश्यकता नहीं है क्योंकि Jetifier केवल आपकी परियोजना के साथ "3rd पार्टी लाइब्रेरी" बनाने में मदद करता है, यदि आप AndroidX में माइग्रेट कर रहे हैं। तो अपने प्रोजेक्ट को Jetifier का उपयोग करने के लिए, आप gradle.properties में कोड के नीचे लिखें

android.enableJetifier=true
android.useAndroidX=true

यदि आप AndroidX पर नहीं जा रहे हैं और Android पुस्तकालयों (जैसे: com.android.support ) का उपयोग करने के पिछले तरीके का उपयोग कर रहे हैं , तो इन 3 पार्टी पुस्तकालयों को संगत बनाने की आवश्यकता नहीं है क्योंकि ये 3 पार्टी पुस्तकालय पहले से ही पिछले तरीके से संगत हैं Android पुस्तकालयों का उपयोग करना। उस स्थिति में, आपको Jetifier का उपयोग करने की आवश्यकता नहीं है, इसलिए अब, आपको ऊपर दी गई लाइनें लिखने की आवश्यकता नहीं है या आप androidx में जाने के लिए भविष्य में मूल्यों को बदलने के लिए नीचे लिख सकते हैं: -

android.enableJetifier=false
android.useAndroidX=false

4

Jetifier

Jetifier कि स्वचालित रूप से आपके माइग्रेट करती है एक आसान उपकरण है dependenciesकरने के लिए AndroidXका निर्माण समय में। इसके बिना, आपको माइग्रेट करने से पहले AndroidX संस्करण का उपयोग करने के लिए आपके द्वारा उपयोग की जाने वाली प्रत्येक निर्भरता की आवश्यकता होगी, और शायद कुछ समय के लिए ऐसा नहीं होगा।

नोट करने के लिए एक महत्वपूर्ण सीमा है: जेटिफायर केवल पैकेज्ड कलाकृतियों पर काम करता है। यह आपके स्रोत कोड पर काम नहीं करता है, जिससे आपको अपने आप को अपडेट करने की उम्मीद है

AndroidX को सक्षम करने के लिए, आपको अपनी gradle.propertiesफ़ाइल में 2 ध्वज जोड़ने होंगे । पहला ध्वज एंड्रॉइड प्लगइन को AndroidXइसके बजाय पैकेज का उपयोग करने के लिए कहता है AppCompat, और दूसरा ध्वज सक्षम करेगा Jetifier:

android.useAndroidX=true
android.enableJetifier=true

देखें इस , इस पद AndroidX के बारे में अधिक समझने के लिए


3

से आधिकारिक दस्तावेज़

जब यह ध्वज सत्य पर सेट होता है, तो एंड्रॉइड प्लगइन स्वचालित रूप से अपने बायनेरिज़ को फिर से लिखकर AndroidX निर्भरता का उपयोग करने के लिए मौजूदा तीसरे पक्ष के पुस्तकालयों को स्थानांतरित कर देता है। यदि यह निर्दिष्ट नहीं है तो ध्वज डिफ़ॉल्ट रूप से गलत है।

यह अनुकूलता के लिए उपयोगी है। जब कोई कंज्यूमर उपयोग करता है androidXऔर कोई प्रोड्यूसर उपयोग करता है support। उदाहरण के लिए जब आपका प्रोजेक्ट AndroidXनिर्भरता का उपयोग करना चाहता है जो [उदाहरण] केsupport library बजाय उपयोग करता हैAndroidX


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