Özel derleme mantığı uygulayın

Bu bölümde, Android Gradle eklentisini genişletmek veya kendi eklentinizi yazmak istediğinizde yararlı olabilecek ileri düzey konular açıklanmaktadır.

Varyant bağımlılıklarını özel mantıkta yayınlama

Bir kütüphane, diğer projelerin veya alt projelerin kullanmak isteyebileceği işlevlere sahip olabilir. Kitaplık yayınlama, kitaplığın tüketicilere sunma sürecidir. Kitaplıklar, derleme zamanında ve çalışma zamanında tüketicilerinin hangi bağımlılıklara erişebileceğini kontrol edebilir.

Her sınıf yolunun geçişli bağımlılıklarını içeren iki ayrı yapılandırma vardır. Bu yapılandırmaların tüketiciler tarafından aşağıda açıklandığı gibi kitaplığı tüketmesi gerekir:

  • variant_nameApiElements: Bu yapılandırma, derleme sırasında tüketicilere sunulan geçişli bağımlılıkları barındırır.
  • variant_nameRuntimeElements: Bu yapılandırma, çalışma zamanında tüketicilere sunulan geçişli bağımlılıkları barındırır.

Farklı yapılandırmalar arasındaki ilişkiler hakkında daha fazla bilgi edinmek için Java Kitaplığı eklenti yapılandırmaları bölümüne gidin.

Özel bağımlılık çözüm stratejileri

Bir projede aynı kitaplığın iki farklı sürümüne bağlı bir bağımlılık olabilir ve bu durum, bağımlılık çakışmalarına yol açabilir. Örneğin, projeniz A modülünün 1 sürümü ile B modülünün sürüm 2'sini bağdaşıyorsa ve A modülü geçişli olarak modülü B sürümünün 3 sürümüne bağımlıysa bir bağımlılık sürümü çakışması ortaya çıkar.

Android Gradle eklentisi bu çakışmayı çözmek için şu bağımlılık çözümü stratejisini kullanır: Eklenti, bağımlılık grafiğinde aynı modülün farklı sürümlerinin yer aldığını algıladığında varsayılan olarak en yüksek sürüm numarasına sahip olanı seçer.

Ancak, bu strateji her zaman istediğiniz gibi çalışmayabilir. Bağımlılık çözümü stratejisini özelleştirmek için bir varyantın göreviniz için gereken belirli bağımlılıklarını çözmek üzere aşağıdaki yapılandırmaları kullanın:

  • variant_nameCompileClasspath: Bu yapılandırma, belirli bir varyantın derleme sınıf yolu için çözüm stratejisini içerir.
  • variant_nameRuntimeClasspath: Bu yapılandırma, belirli bir varyantın çalışma zamanı sınıf yolu için çözüm stratejisini içerir.

Android Gradle eklentisinde, her bir varyantın yapılandırma nesnelerine erişmek için kullanabileceğiniz alıcılar bulunur. Bu nedenle, aşağıdaki örnekte gösterildiği gibi bağımlılık çözünürlüğünü sorgulamak için varyant API'sini kullanabilirsiniz:

Kotlin

android {
    applicationVariants.all {
        // Return compile configuration objects of a variant.
        compileConfiguration.resolutionStrategy {
        // Use Gradle's ResolutionStrategy API
        // to customize how this variant resolves dependencies.
            ...
        }
        // Return runtime configuration objects of a variant.
        runtimeConfiguration.resolutionStrategy {
            ...
        }
        // Return annotation processor configuration of a variant.
        annotationProcessorConfiguration.resolutionStrategy {
            ...
        }
    }
}

Modern

android {
    applicationVariants.all { variant ->
        // Return compile configuration objects of a variant.
        variant.getCompileConfiguration().resolutionStrategy {
        // Use Gradle's ResolutionStrategy API
        // to customize how this variant resolves dependencies.
            ...
        }
        // Return runtime configuration objects of a variant.
        variant.getRuntimeConfiguration().resolutionStrategy {
            ...
        }
        // Return annotation processor configuration of a variant.
        variant.getAnnotationProcessorConfiguration().resolutionStrategy {
            ...
        }
    }
}