इस उत्तर एक परियोजना पर implementation
, api
, और compile
के बीच अंतर का प्रदर्शन करेंगे।
- एप्लिकेशन
myandroidlibrary
(Android एप्लिकेशन)
- myandroidlibrary (एक Android पुस्तकालय)
- myjavalibrary (एक जावा पुस्तकालय)
app
है: मान लीजिए कि मैं तीन Gradle मॉड्यूल के साथ एक परियोजना करते हैं निर्भरता के रूप में। myandroidlibrary
में myjavalibrary
निर्भरता के रूप में है।
एप्लिकेशन -> myandroidlibrary -> myjavalibrary
myjavalibrary
है एक MySecret
वर्ग
public class MySecret {
public static String getSecret() {
return "Money";
}
}
myandroidlibrary
MyAndroidComponent
वर्ग कि MySecret
वर्ग से मूल्य में हेरफेर है।
public class MyAndroidComponent {
private static String component = MySecret.getSecret();
public static String getComponent() {
return "My component: " + component;
}
}
अन्त में, app
केवल से myandroidlibrary
TextView tvHelloWorld = findViewById(R.id.tv_hello_world);
tvHelloWorld.setText(MyAndroidComponent.getComponent());
अब मूल्य पर रुचि है, के app
build.gradle पर निर्भरता के बारे में बात करते हैं। यह बहुत सरल और सहज है।
dependencies {
implementation project(':myandroidlibrary')
}
आपको क्या लगता myandroidlibrary
build.gradle दिखेगा चाहिए? हम तीन विकल्प हैं:
dependencies {
// Option #1
implementation project(':myjavalibrary')
// Option #2
compile project(':myjavalibrary')
// Option #3
api project(':myjavalibrary')
}
उन दोनों के बीच क्या अंतर है और मैं क्या का उपयोग करना चाहिए?
संकलित करें और एपीआई
आप compile
और api
उपयोग कर रहे हैं। हमारा एंड्रॉइड एप्लिकेशन अब myandroidcomponent
निर्भरता तक पहुंचने में सक्षम है, जो MySecret
वर्ग है।
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can access MySecret
textView.setText(MySecret.getSecret());
कार्यान्वयन
आप implementation
विन्यास का उपयोग कर रहे हैं, तो MySecret
संपर्क में नहीं है।
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can NOT access MySecret
textView.setText(MySecret.getSecret()); // Won't even compile
तो, आपको कौन सी कॉन्फ़िगरेशन चुनना चाहिए? यह वास्तव में आपकी आवश्यकता पर निर्भर करता है।
यदि आप निर्भरता का पर्दाफाश करना चाहते हैं तो api
या compile
का उपयोग करें, यदि आप निर्भरता का खुलासा नहीं करना चाहते हैं (अपना आंतरिक मॉड्यूल छुपाएं) तो implementation
का उपयोग करें।
यह केवल ग्रैडल कॉन्फ़िगरेशन का एक सारांश है, Table 49.1. Java Library plugin - configurations used to declare dependencies इस बारे में अधिक विस्तृत स्पष्टीकरण है।
हैप्पी एक्सप्लोरिंग
"उपभोक्ता" कौन हैं? – Suragch
उपभोक्ता लाइब्रेरी का उपयोग कर मॉड्यूल है। एंड्रॉइड के मामले में, यह एंड्रॉइड एप्लिकेशन है। मुझे लगता है कि यह स्पष्ट है और मुझे यकीन नहीं है कि यह वही है जो आप पूछ रहे हैं। – humazed
यही वह है जो मुझे भी पसंद आया। लेकिन अगर मैं पुस्तकालय बना रहा हूं, तो निश्चित रूप से मैं चाहता हूं कि इसकी एपीआई ऐप के संपर्क में आ जाए। अन्यथा, ऐप डेवलपर मेरी लाइब्रेरी का उपयोग कैसे करेगा? यही कारण है कि मुझे निर्भरता को छिपाने के 'कार्यान्वयन' का अर्थ नहीं मिलता है। क्या मेरा प्रश्न समझ में आता है? – Suragch