Gradle compileanahtar kelimesi, bağımlılıkları yapılandırmak için apive implementationanahtar kelimeleri lehine kullanımdan kaldırıldı .
Kullanılması apikaldırılmış kullanmanın eşdeğerdir compiletüm değiştirmek eğer öyleyse, compileile apiher şey olacak her zaman olduğu gibi çalışır.
implementationAnahtar kelimeyi anlamak için aşağıdaki örneği inceleyin.
MİSAL
Diyelim MyLibraryki dahili olarak adlandırılan başka bir kitaplık kullanan bir kitaplığınız var InternalLibrary. Bunun gibi bir şey:
// 'InternalLibrary' module
public class InternalLibrary {
public static String giveMeAString(){
return "hello";
}
}
// 'MyLibrary' module
public class MyLibrary {
public String myString(){
return InternalLibrary.giveMeAString();
}
}
Diyelim ki MyLibrary build.gradlekullanım apikonfigürasyonu dependencies{}şöyle:
dependencies {
api project(':InternalLibrary')
}
MyLibraryKodunuzda kullanmak istiyorsunuz, böylece uygulamanızda build.gradlebu bağımlılığı ekliyorsunuz:
dependencies {
implementation project(':MyLibrary')
}
Kullanılması apikonfigürasyonunu (ya kaldırılmış compileerişebileceğiniz) InternalLibraryuygulama kodunuzda:
// Access 'MyLibrary' (granted)
MyLibrary myLib = new MyLibrary();
System.out.println(myLib.myString());
// Can ALSO access the internal library too (and you shouldn't)
System.out.println(InternalLibrary.giveMeAString());
Bu şekilde modül MyLibrarypotansiyel olarak bir şeyin dahili uygulamasını "sızdırıyor". Bunu doğrudan kullanmanız gerekmediği için kullanmamalısınız (kullanamamalısınız).
Bunu implementationönlemek için yapılandırma tanıtıldı. Yani şimdi in implementationyerine kullanırsanız :apiMyLibrary
dependencies {
implementation project(':InternalLibrary')
}
InternalLibrary.giveMeAString()artık uygulama kodunuzu arayamayacaksınız .
Boks stratejinin Bu tür Android Gradle içinde düzenleme şey olmadığını bilmek eklentisi verir InternalLibrary, sadece bir recompilation tetiklemek gerekir MyLibraryve değil Erişiminizin olmadığı için, tüm uygulamanın recompilation InternalLibrary.
Çok fazla iç içe bağımlılığınız olduğunda, bu mekanizma yapıyı çok hızlandırabilir. (Bunu tam olarak anlamak için sonunda bağlanan videoyu izleyin)
SONUÇLAR
Eğer 3.xx eklentisi Yeni Android Gradle geçtiğinizde, tüm değiştirmeniz gerekir compileile implementationanahtar kelime (1 *) . Ardından uygulamanızı derlemeye ve test etmeye çalışın. Her şey yolundaysa, kodu olduğu gibi bırakın, sorunlarınız varsa muhtemelen bağımlılıklarınızda yanlış bir şeyiniz var veya şimdi özel ve daha erişilebilir olmayan bir şey kullandınız. Android Gradle eklentisi mühendisi Jerome Dochez (1 ) * ) tarafından öneri
Bir kütüphane yöneticisi iseniz , son kullanıcılar tarafından kullanılmaması gereken test bağımlılıkları veya bağımlılıkları için apikullanırken, kitaplığınızın genel API'si için gereken her bağımlılık için kullanmalısınız implementation.
Uygulama ve API arasındaki farkı gösteren faydalı makale
REFERANSLAR
(Bu, zamandan kazanmak için ayrılmış video ile aynıdır)
Google I / O 2017 - Gradle'ın hızlandırılması (TAM VİDEO)
Google I / O 2017 - Gradle'ı nasıl hızlandırır (SADECE YENİ GRADLE PLUGIN 3.0.0 BÖLÜMÜ)
Google I / O 2017 - Gradle'ın oluşturma hızını artırma ( 1 * referansı )
Android belgeleri