Bu cevap arasındaki farkı gösterecektir implementation
, api
ve compile
bir 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)
app
vardır myandroidlibrary
bağımlılıkları olarak. myandroidlibrary
vardır myjavalibrary
bağımlılıkları olarak.
myjavalibrary
bir MySecret
sınıfı var
public class MySecret {
public static String getSecret() {
return "Money";
}
}
myandroidlibrary
yer alır MyAndroidComponent
değeri işlemek sınıfı MySecret
sınıfı.
public class MyAndroidComponent {
private static String component = MySecret.getSecret();
public static String getComponent() {
return "My component: " + component;
}
}
Son olarak, app
yalnızcamyandroidlibrary
TextView tvHelloWorld = findViewById(R.id.tv_hello_world);
tvHelloWorld.setText(MyAndroidComponent.getComponent());
Şimdi bağımlılıklar hakkında konuşalım ...
app
tüketmek gerekir :myandroidlibrary
, bu yüzden app
build.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 myandroidlibrary
build.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)
compile
Veya kullanıyorsanız api
. Android Uygulamamız artık myandroidcomponent
bir MySecret
sı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)
implementation
Yapı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ı api
veya 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.