इस उत्तर के बीच अंतर का प्रदर्शन करेंगे implementation
, api
और compile
एक परियोजना पर।
मान लीजिए कि मेरे पास तीन ग्रेड मॉड्यूल के साथ एक परियोजना है:
- एप्लिकेशन (एक Android आवेदन)
- myandroidlibrary (एक Android लाइब्रेरी)
- myjavalibrary (एक जावा पुस्तकालय)
app
है myandroidlibrary
निर्भरता के रूप में। 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
उपभोग करने की आवश्यकता है :myandroidlibrary
, इसलिए app
बिल्ड.ग्रेड का उपयोग करें implementation
।
( नोट : आप एपीआई / संकलन का भी उपयोग कर सकते हैं। लेकिन एक क्षण के लिए उस विचार को पकड़ें।)
dependencies {
implementation project(':myandroidlibrary')
}
आपको क्या लगता है myandroidlibrary
build.gradle कैसा दिखना चाहिए? हमें किस स्कोप का उपयोग करना चाहिए?
हमारे पास तीन विकल्प हैं:
dependencies {
// Option #1
implementation project(':myjavalibrary')
// Option #2
compile project(':myjavalibrary')
// Option #3
api project(':myjavalibrary')
}
उनके बीच क्या अंतर है और मुझे क्या उपयोग करना चाहिए?
संकलन या आपी (विकल्प # 2 या # 3)
यदि आप उपयोग कर रहे हैं compile
या api
। हमारा Android एप्लिकेशन अब myandroidcomponent
निर्भरता तक पहुंचने में सक्षम है , जो एक MySecret
वर्ग है।
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can access MySecret
textView.setText(MySecret.getSecret());
कार्यान्वयन (विकल्प # 1)
यदि आप 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
।
ध्यान दें:
यह ग्रैडल कॉन्फ़िगरेशन का सिर्फ एक सार है, तालिका 49.1 का संदर्भ लें । जावा लाइब्रेरी प्लगइन - अधिक विस्तृत विवरण के लिए निर्भरता घोषित करने के लिए उपयोग किए जाने वाले कॉन्फ़िगरेशन ।
इस उत्तर के लिए नमूना परियोजना https://github.com/aldoKelvianto/ImplementationVsCompile पर उपलब्ध है