Zastosuj niestandardową logikę kompilacji

W tej sekcji omawiamy zaawansowane tematy, które są przydatne, gdy chcesz rozszerzyć wtyczkę Androida do obsługi Gradle lub napisać własną wtyczkę.

Opublikuj zależności wariantów w logice niestandardowej

Biblioteka może zawierać funkcje, z których mogą korzystać inne projekty lub podprojekty. Opublikowanie biblioteki to proces udostępniania biblioteki konsumentom. Biblioteki mogą kontrolować, do których zależności mają dostęp użytkownicy w czasie kompilacji i w czasie działania.

Istnieją 2 osobne konfiguracje z zależnościami przechodnimi poszczególnych ścieżek klasy, które muszą być używane przez klientów do korzystania z biblioteki zgodnie z opisem poniżej:

  • variant_nameApiElements: ta konfiguracja zawiera zależności przejściowe, które są dostępne dla klientów podczas kompilacji.
  • variant_nameRuntimeElements: ta konfiguracja zawiera zależności przejściowe, które są dostępne dla klientów w czasie działania.

Więcej informacji o relacjach między różnymi konfiguracjami znajdziesz w artykule o konfiguracjach wtyczki biblioteki Java.

Niestandardowe strategie rozwiązywania problemów z zależnościami

Projekt może obejmować zależność od 2 różnych wersji tej samej biblioteki, co może prowadzić do konfliktów zależności. Jeśli na przykład Twój projekt bazuje na wersji 1 modułu A i wersji 2 modułu B, a moduł A przechodnie korzysta z wersji 3 modułu B, wystąpi konflikt wersji zależności.

Aby rozwiązać ten konflikt, wtyczka Androida do obsługi Gradle korzysta z tej strategii rozwiązywania zależności: gdy wykryje, że na wykresie zależności znajdują się różne wersje tego samego modułu, domyślnie wybiera tę o najwyższym numerze wersji.

Jednak ta strategia nie zawsze działa zgodnie z oczekiwaniami. Aby dostosować strategię rozwiązywania zależności, użyj tych konfiguracji w celu określenia określonych zależności wariantu wymaganych do Twojego zadania:

  • variant_nameCompileClasspath: ta konfiguracja zawiera strategię rozpoznawania ścieżki klasy kompilacji danego wariantu.
  • variant_nameRuntimeClasspath: ta konfiguracja zawiera strategię rozwiązywania w przypadku ścieżki klasy danego wariantu w środowisku wykonawczym.

Wtyczka Androida do obsługi Gradle zawiera metody pobierające, które umożliwiają dostęp do obiektów konfiguracji poszczególnych wariantów. Możesz więc używać interfejsu API wariantu do wysyłania zapytań dotyczących rozwiązania zależności, jak w przykładzie poniżej:

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

Odlotowy

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