Bu cevap arasındaki farkı gösterecektir implementation, apive compilebir proje üzerinde.
Diyelim ki üç Gradle modülüne sahip bir projem var:
- uygulaması (bir Android uygulaması)
- myandroidlibrary (bir Android kütüphanesi)
- myjavalibrary (bir Java kütüphanesi)
appvardır myandroidlibrarybağımlılıkları olarak. myandroidlibraryvardır myjavalibrary bağımlılıkları olarak.

myjavalibrarybir MySecretsınıfı var
public class MySecret {
public static String getSecret() {
return "Money";
}
}
myandroidlibraryyer alır MyAndroidComponentdeğeri işlemek sınıfı MySecretsınıfı.
public class MyAndroidComponent {
private static String component = MySecret.getSecret();
public static String getComponent() {
return "My component: " + component;
}
}
Son olarak, appyalnızcamyandroidlibrary
TextView tvHelloWorld = findViewById(R.id.tv_hello_world);
tvHelloWorld.setText(MyAndroidComponent.getComponent());
Şimdi bağımlılıklar hakkında konuşalım ...
apptüketmek gerekir :myandroidlibrary, bu yüzden appbuild.gradle kullanımı implementation.
( Not : api / compile komutunu da kullanabilirsiniz. Ama bu düşünceyi bir anlığına saklayın.)
dependencies {
implementation project(':myandroidlibrary')
}

Ne düşünüyorsunuz myandroidlibrarybuild.gradle gibi görünmelidir? Hangi kapsamı kullanmalıyız?
Üç seçeneğimiz var:
dependencies {
// Option #1
implementation project(':myjavalibrary')
// Option #2
compile project(':myjavalibrary')
// Option #3
api project(':myjavalibrary')
}

Aralarındaki fark nedir ve ne kullanmalıyım?
Derleme veya Api (seçenek # 2 veya # 3)

compileVeya kullanıyorsanız api. Android Uygulamamız artık myandroidcomponentbir MySecretsınıf olan bağımlılığa erişebiliyor .
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can access MySecret
textView.setText(MySecret.getSecret());
Uygulama (seçenek # 1)

implementationYapılandırmayı kullanıyorsanız , gösterilmez 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
Peki, hangi yapılandırmayı seçmelisiniz? Bu gerçekten gereksiniminize bağlıdır.
Eğer varsa bağımlılıkları sergilemek istediğiniz kullanımını apiveya compile.
Eğer varsa bağımlılıkları ortaya çıkarmak istemiyoruz (dahili modül gizleme) daha sonra kullanmak implementation.
Not:
Bu sadece Gradle yapılandırmalarının bir özeti, bkz. Tablo 49.1. Java Library eklentisi - daha ayrıntılı açıklama için bağımlılıkları bildirmek üzere kullanılan yapılandırmalar .
Bu cevap için örnek proje https://github.com/aldoKelvianto/ImplementationVsCompile adresinde mevcuttur.