ग्रेडेल compile
कीवर्ड निर्भरता को कॉन्फ़िगर करने के लिए api
और implementation
कीवर्ड के पक्ष में हटा दिया गया था ।
उपयोग करना api
पदावनत का उपयोग करने के बराबर है compile
, इसलिए यदि आप सभी compile
को api
हर चीज से प्रतिस्थापित करते हैं तो हमेशा की तरह काम करेंगे।
implementation
कीवर्ड को समझने के लिए निम्नलिखित उदाहरण पर विचार करें।
उदाहरण
मान लीजिए कि आपके पास एक पुस्तकालय है जिसे MyLibrary
आंतरिक रूप से एक अन्य पुस्तकालय कहा जाता है InternalLibrary
। कुछ इस तरह:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
मान लीजिए इस तरह से कॉन्फ़िगरेशन का MyLibrary
build.gradle
उपयोग करता api
है dependencies{}
:
dependencies {
api project(':InternalLibrary')
}
आप MyLibrary
अपने कोड में उपयोग करना चाहते हैं ताकि आपके ऐप में build.gradle
आप इस निर्भरता को जोड़ दें:
dependencies {
implementation project(':MyLibrary')
}
api
कॉन्फ़िगरेशन का उपयोग करना (या पदावनत compile
) आप InternalLibrary
अपने आवेदन कोड में पहुंच सकते हैं :
// Access 'MyLibrary' (granted)
MyLibrary myLib = new MyLibrary();
System.out.println(myLib.myString());
// Can ALSO access the internal library too (and you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
इस तरह से मॉड्यूल MyLibrary
संभावित रूप से किसी चीज के आंतरिक कार्यान्वयन को "लीक" कर रहा है। आपको इसका उपयोग नहीं करना चाहिए (क्योंकि यह आपके द्वारा सीधे आयात नहीं किया गया है)
implementation
विन्यास इसे रोकने के लिए शुरू की गई थी। तो अब अगर आप का उपयोग implementation
करने के बजाय api
में MyLibrary
:
dependencies {
implementation project(':InternalLibrary')
}
अब आप InternalLibrary.giveMeAString()
अपने ऐप कोड में कॉल नहीं कर पाएंगे ।
मुक्केबाजी रणनीति इस तरह एंड्रॉयड Gradle पता चला है कि अगर आप में कुछ संपादित प्लगइन की अनुमति देता है InternalLibrary
, यह केवल की रखता को गति प्रदान करना चाहिए MyLibrary
और नहीं अपने पूरे अनुप्रयोग के रखता है, क्योंकि आप के लिए पहुँच नहीं है InternalLibrary
।
जब आपके पास बहुत अधिक नेस्टेड निर्भरता होती है, तो यह तंत्र बिल्ड को बहुत तेज कर सकता है। (इसकी पूरी समझ के लिए वीडियो को अंत में देखें)
निष्कर्ष
जब आप नए एंड्रॉइड ग्रैगल प्लगइन 3.XX पर स्विच करते हैं, तो आपको अपने सभी compile
को implementation
कीवर्ड (1 *) से बदलना चाहिए । फिर अपने ऐप को कंपाइल और टेस्ट करने की कोशिश करें। यदि सब कुछ ठीक है तो कोड को छोड़ दें, यदि आपके पास समस्याएं हैं, तो आपके पास शायद आपकी निर्भरता के साथ कुछ गलत है या आपने कुछ ऐसा उपयोग किया है जो अब निजी है और अधिक सुलभ नहीं है। एंड्रॉइड ग्रैडल प्लगइन इंजीनियर जेरोम डोचेज़ द्वारा सुझाव (1 ) * )
यदि आप एक लाइब्रेरी मेन्टेनर हैं, तो आपको api
प्रत्येक निर्भरता के लिए उपयोग करना चाहिए जो आपके पुस्तकालय के सार्वजनिक एपीआई के लिए आवश्यक है, जबकि implementation
परीक्षण निर्भरता या निर्भरता के लिए उपयोग करें जो अंतिम उपयोगकर्ताओं द्वारा उपयोग नहीं की जानी चाहिए।
उपयोगी लेख कार्यान्वयन और एपीआई के बीच अंतर को दर्शाता है
संदर्भ
(यह समय बचाने के लिए एक ही वीडियो है)
Google I / O 2017 - ग्रैडल कैसे तेजी से बढ़ता है (पूर्ण वीडियो)
Google I / O 2017 - ग्रैडल कैसे बनता है (NEW GRADLE PLUGIN 3.0.0 PART ON मात्र)
Google I / O 2017 - ग्रैडल कैसे बनता है ( 1 * का संदर्भ )
Android प्रलेखन