Özel derleme mantığı uygulayın

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

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

Kitaplıklarda, diğer projelerin veya alt projelerin kullanmak isteyebileceği işlevler bulunabilir. Kitaplık yayınlama, kitaplığın tüketicilere sunulması işlemidir. Kitaplıklar, derleme ve çalışma zamanında kullanıcılarının hangi bağımlılıklara erişebileceğini kontrol edebilir.

Her sınıf yolu için geçişli bağımlılıkları içeren iki ayrı yapılandırma vardır. Bu yapılandırmalar, kitaplığı kullanmak isteyen tüketiciler tarafından aşağıda açıklandığı şekilde kullanılmalıdır:

  • variant_nameApiElements: Bu yapılandırma, derleme zamanında tüketicilerin kullanabileceği geçişli bağımlılıkları içerir.
  • variant_nameRuntimeElements: Bu yapılandırma, çalışma zamanında tüketicilerin kullanabileceği geçişli bağımlılıkları içerir.

Farklı yapılandırmalar arasındaki ilişkiler hakkında daha fazla bilgi edinmek için Java kitaplığı eklenti yapılandırmaları başlıklı makaleyi inceleyin.

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

Bir proje, aynı kitaplığın iki farklı sürümüne bağımlı olabilir. Bu durum, bağımlılık uyuşmazlıklarına yol açabilir. Örneğin, projeniz A modülünün 1. sürümüne ve B modülünün 2. sürümüne bağlıysa ve A modülü, B modülünün 3. sürümüne geçişli olarak bağlıysa bir bağımlılık sürümü çakışması ortaya çıkar.

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

Ancak bu strateji her zaman istediğiniz gibi çalışmayabilir. Bağımlılık çözümleme stratejisini özelleştirmek için bir varyantın göreviniz için gereken belirli bağımlılıkları çö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 eklentisi, her varyantın yapılandırma nesnelerine erişmek için kullanabileceğiniz alıcıları içerir. Bu nedenle, aşağıdaki örnekte gösterildiği gibi bağımlılık çözümünü sorgulamak için varyant API'yi 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 {
            ...
        }
    }
}

Groovy

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 {
            ...
        }
    }
}