इस उत्तर के बीच अंतर का प्रदर्शन करेंगे 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')
}

आपको क्या लगता है myandroidlibrarybuild.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 पर उपलब्ध है