Zastosuj niestandardową logikę kompilacji

W tej sekcji opisano zaawansowane tematy, które przydają się, gdy chcesz rozszerzyć wtyczki Androida do obsługi Gradle lub napisać własną.

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

Biblioteka może mieć funkcje, które mogą stosować inne projekty lub podprojekty. których chcesz używać. Opublikowanie biblioteki jest proces jej tworzenia dostępnych dla klientów. Biblioteki mogą kontrolować, które zależności użytkownicy mają dostęp w momencie kompilacji i czasie działania.

Istnieją 2 oddzielne konfiguracje, które zawierają zależności pośrednie każdej ścieżki klasy, która ma być używana przez konsumentów do korzystania z biblioteki jako opisane poniżej:

  • variant_nameApiElements: ta konfiguracja zawiera przejściowe zależności, które są dostępne dla konsumentów w momencie kompilowania.
  • variant_nameRuntimeElements: ta konfiguracja zawiera zależności pośrednie, które są dostępne dla konsumentów w czasie działania.

Aby dowiedzieć się więcej o zależnościach między różnymi konfiguracjami, otwórz Bibliotekę Java konfiguracji wtyczek.

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

Projekt może zawierać zależność od 2 różnych wersji tej samej biblioteki co może prowadzić do konfliktów zależności. Na przykład, jeśli Twój projekt zależy od wersji 1 modułu A i wersji 2 moduł B i moduł A są przechodnie zależne od wersji 3 modułu B, w przypadku wystąpienia konfliktu wersji zależności.

Aby rozwiązać ten konflikt, wtyczka Androida do obsługi Gradle używa strategia rozwiązywania zależności: gdy wtyczka wykryje, że różne wersje są uwzględnione na wykresie zależności. Domyślnie wybiera on o najwyższym numerze wersji.

Ta strategia może jednak nie zawsze działać zgodnie z oczekiwaniami. Aby dostosować rozpoznawania zależności, użyj poniższych konfiguracji, aby rozwiąż konkretne zależności wariantu, które są potrzebne do realizacji zadania:

  • variant_nameCompileClasspath: ta konfiguracja zawiera strategię rozpoznawania ścieżki klasy kompilacji danego wariantu.
  • variant_nameRuntimeClasspath: ta konfiguracja zawiera strategię rozwiązywania problemu ze ścieżką klasy środowiska wykonawczego danego wariantu.

Wtyczka Androida do obsługi Gradle zawiera metody pobierania, dzięki którym możesz uzyskać dostęp do obiektów konfiguracji każdego wariantu. Dzięki temu możesz używać interfejsu API wariantu, aby: w którym możesz wysłać zapytanie o rozwiązanie zależności, jak pokazano w tym przykładzie:

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

Odlotowe

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