Menerapkan logika build kustom

Bagian ini menjelaskan topik lanjutan yang berguna jika Anda ingin memperluas plugin Android Gradle atau menulis plugin Anda sendiri.

Memublikasikan dependensi varian ke logika kustom

Library dapat memiliki fungsionalitas yang mungkin perlu digunakan oleh project atau subproject lain. Memublikasikan library adalah proses yang menjadikan library tersebut tersedia bagi konsumennya. Library dapat mengontrol dependensi mana saja yang dapat diakses oleh konsumennya pada waktu kompilasi dan runtime.

Ada dua konfigurasi terpisah yang menyimpan dependensi transitif setiap classpath yang harus digunakan oleh konsumen untuk menggunakan library seperti yang dijelaskan di bawah ini:

  • variant_nameApiElements: Konfigurasi ini menyimpan dependensi transitif yang tersedia bagi konsumen pada waktu kompilasi.
  • variant_nameRuntimeElements: Konfigurasi ini menyimpan dependensi transitif yang tersedia bagi konsumen saat runtime.

Untuk mempelajari hubungan antara berbagai konfigurasi lebih lanjut, baca Konfigurasi plugin Library Java.

Strategi penyelesaian dependensi kustom

Suatu project mungkin menyertakan dependensi pada dua versi berbeda dari library yang sama, dan hal ini dapat mengakibatkan konflik dependensi. Misalnya, jika project Anda bergantung pada versi 1 modul A dan versi 2 modul B, dan modul A secara transitif bergantung pada versi 3 modul B, konflik versi dependensi akan muncul.

Untuk mengatasi konflik ini, plugin Android Gradle menggunakan strategi penyelesaian dependensi berikut: saat plugin mendeteksi bahwa versi berbeda dari modul yang sama terdapat dalam grafik dependensi, maka secara default plugin akan memilih dependensi dengan nomor versi tertinggi.

Namun, strategi ini mungkin tidak selalu berfungsi seperti yang Anda harapkan. Untuk menyesuaikan strategi penyelesaian dependensi, gunakan konfigurasi berikut untuk menyelesaikan dependensi khusus varian yang diperlukan untuk tugas Anda:

  • variant_nameCompileClasspath: Konfigurasi ini berisi strategi penyelesaian untuk classpath kompilasi varian tertentu.
  • variant_nameRuntimeClasspath: Konfigurasi ini berisi strategi penyelesaian untuk classpath runtime varian tertentu.

Plugin Android Gradle menyertakan pengambil yang dapat Anda gunakan untuk mengakses objek konfigurasi setiap varian. Dengan demikian, Anda dapat menggunakan API varian untuk kueri resolusi dependensi seperti yang ditunjukkan pada contoh di bawah ini:

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