System kompilacji Gradle w Android Studio pozwala plików binarnych lub innych modułów biblioteki do kompilacji jako zależności. mogą znajdować się na maszynie lub w zdalnym repozytorium, deklarowane przez nich zależności pośrednie też są uwzględniane automatycznie. Na tej stronie dowiesz się, jak korzystać z zależności w projekcie Androida, w tym: szczegółowe informacje o zachowaniach i konfiguracjach, które są charakterystyczne dla wtyczki Androida do obsługi Gradle (AGP). Dokładny przewodnik po Gradle musisz też zobaczyć Przewodnik Gradle dotyczący zarządzania zależnościami – ale pamiętaj, że w projekcie na Androida musisz używać tylko konfiguracje zależności zdefiniowane na tej stronie.
Dodaj zależność biblioteki lub wtyczki
Najlepszym sposobem dodawania zależności kompilacji i zarządzania nimi jest korzystanie z katalogów wersji, metody domyślnie używanej w nowych projektach. W tej sekcji omawiamy najczęstsze typy konfiguracji używane w projektach na Androida; zapoznaj się z Dokumentacja Gradle , aby wyświetlić więcej opcji. Przykład aplikacji, która korzysta z katalogów wersji, znajdziesz tutaj Teraz na Androidzie. Jeśli masz już skonfigurowane zależności kompilacji bez katalogów wersji i mają projekt wielomodułowy, Migracja.
Wskazówki dotyczące dodawania zależności natywnych i zarządzania nimi (nietypowe) znajdziesz w artykule Zależności natywne.
W poniższym przykładzie dodamy zdalny plik binarny
zależność (Jetpack Macrobenchmark
biblioteka), moduł biblioteki lokalnej
zależność (myLibrary
) i wtyczka
(wtyczka Androida do obsługi Gradle) do naszego projektu. Oto ogólne
aby dodać te zależności do projektu:
Dodaj alias wersji zależności, którą chcesz umieścić w Sekcja
[versions]
pliku katalogu wersji o nazwielibs.versions.toml
(w katalogugradle
w Widok projektu lub Skrypty Gradle w widoku Android):[versions] agp = "8.3.0" androidx-macro-benchmark = "1.2.2" my-library = "1.4" [libraries] ... [plugins] ...
Aliasy mogą zawierać myślniki i podkreślenia. Te aliasy generują zagnieżdżone wartości które znajdziesz w skryptach kompilacji. Odwołania zaczynają się od nazwy katalog, część
libs
elementulibs.versions.toml
. Kiedy w jednym katalogu wersji, zalecamy zachowanie domyślnej wartości „libs”.Dodaj alias zależności w funkcji
[libraries]
(dla zdalnych plików binarnych lub modułów biblioteki lokalnej) lub[plugins]
(dla wtyczek) w plikulibs.versions.toml
.[versions] ... [libraries] androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidx-macro-benchmark" } my-library = { group = "com.myapplication", name = "mylibrary", version.ref = "my-library" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }
Niektóre biblioteki są dostępne w opublikowanym liście materiałów (BOM), grup rodzinnych bibliotek i ich wersji. Możesz umieścić BOM w katalogu wersji i plików kompilacji, a system będzie nimi zarządzać za Ciebie. Zobacz Więcej informacji znajdziesz na liście materiałów.
Dodaj odwołanie do aliasu zależności do skryptu kompilacji moduły, które wymagają tej zależności. Przekonwertuj alias” podkreślenia i myślniki na kropki, gdy odwołujesz się do niego w skrypcie kompilacji. Skrypt kompilacji na poziomie modułu będzie wyglądać tak:
Kotlin
plugins { alias(libs.plugins.androidApplication) } dependencies { implementation(libs.androidx.benchmark.macro) implementation(libs.my.library) }
Odlotowe
plugins { alias 'libs.plugins.androidApplication' } dependencies { implementation libs.androidx.benchmark.macro implementation libs.my.library }
Odwołania do wtyczek zawierają
plugins
po nazwie katalogu i odwołania do wersji zawierająversions
po nazwie katalogu (wersja referencje są rzadkie, zobacz Zależności z takimi samymi numerami wersji). Biblioteka odwołania nie zawierają kwalifikatoralibraries
, więc nie można użyć funkcjiversions
lubplugins
na początku biblioteki alias.
Skonfiguruj zależności
W bloku dependencies
możesz zadeklarować zależność biblioteki, używając jednego z tych elementów:
kilku różnych konfiguracji zależności (takich jak implementation
wcześniej). Każda konfiguracja zależności zapewnia Gradle inny
jak korzystać z zależności. Tabela poniżej zawiera
konfiguracji, których możesz użyć w zależności w projekcie Androida.
Konfiguracja | Działanie |
---|---|
implementation |
Gradle dodaje zależność do ścieżki klasy kompilacji i
pakuje zależność do danych wyjściowych kompilacji. Gdy
konfiguruje zależność implementation , jest to
w celu poinformowania Gradle, że nie chcesz, aby moduł wyciekł
zależności od innych modułów. Oznacza to, że zależność
nie jest dostępna dla innych modułów zależnych od
.
Używam tej konfiguracji zależności zamiast
|
api |
Gradle dodaje zależność do ścieżki kompilacji i kompilacji
dane wyjściowe. Jeśli moduł zawiera zależność api ,
powiadamianie Gradle, że moduł chce eksportować dane
który jest uzależniony od innych modułów, dzięki czemu jest dla nich dostępny
w czasie działania i kompilacji.
Używaj tej konfiguracji ostrożnie i tylko z zależnościami, które
i dotychczasowego eksportowania
do innych konsumentów. Jeśli
Zależność |
compileOnly |
Gradle dodaje zależność tylko do ścieżki klasy kompilacji
(czyli nie jest dodawany do danych wyjściowych kompilacji). Jest to przydatne, gdy
tworzysz moduł Androida i potrzebujesz zależności
kompilację, ale opcjonalnie możesz umieścić ją w czasie działania. Dla:
Jeśli korzystasz z biblioteki, która zawiera tylko adnotacje podczas kompilacji (zwykle jest ona używana do generowania kodu, ale często nie jest uwzględniana w danych wyjściowych kompilacji), możesz oznaczyć ją jako compileOnly .
Jeśli używasz tej konfiguracji, moduł musi Uwzględnij warunek środowiska wykonawczego, aby sprawdzić, czy zależność a potem płynnie zmienić jego działanie, , jeśli nie jest podana. Pomaga to zmniejszyć nie dodając zależności tymczasowych, które nie są kluczowe.
Uwaga: nie możesz użyć |
runtimeOnly |
Gradle dodaje zależność tylko do danych wyjściowych kompilacji, gdzie jest używana
w trakcie działania. Oznacza to, że nie jest on dodawany do ścieżki klasy kompilacji.
Rzadko jest używana na Androidzie, ale jest często używana na serwerze
które zapewniają implementacje logowania. Na przykład plik
może użyć interfejsu API logowania, który nie zawiera atrybutu
implementacji. Użytkownicy tej biblioteki mogą dodać ją jako
implementation i uwzględnij komponent
Zależność runtimeOnly rzeczywistego logowania
implementacji.
|
ksp |
Te konfiguracje udostępniają biblioteki przetwarzające adnotacje i innych symboli w kodzie. Zwykle sprawdzać poprawność kodu lub generować dodatkowy kod, ograniczając co trzeba napisać. Aby dodać taką zależność, musisz dodać ją do ścieżki klasy procesora adnotacji przy użyciu konfiguracji Wtyczka Androida do obsługi Gradle zakłada, że zależność jest adnotacją procesora, jeśli plik JAR zawiera ten plik:
Jeśli wtyczka wykryje procesor adnotacji znajdujący się w skompiluj ścieżkę klasy, zwraca błąd kompilacji.
Wybierając konfigurację, weź pod uwagę :
Więcej informacji o korzystaniu z procesorów adnotacji znajdziesz w artykule Dodaj procesory adnotacji. |
lintChecks |
Użyj tej konfiguracji, aby dołączyć bibliotekę zawierającą lint testy, które mają być wykonywane przez Gradle podczas tworzenia aplikacji na Androida w projektach AI. Pamiętaj, że AAR, które zawierają plik |
lintPublish |
Użyj tej konfiguracji w projektach biblioteki Androida, aby uwzględnić lint
sprawdzanie, które Gradle ma skompilować w plik lint.jar
i przesyłki w AAR. Oznacza to, że projekty zużywają
AAR, aby przeprowadzić także kontrole lint. Jeśli wcześniej używasz
konfiguracja zależności lintChecks uwzględniająca lint
w opublikowanym AAR, musisz przenieść te zależności
, aby zamiast tego użyć konfiguracji lintPublish .
Kotlindependencies { // Executes lint checks from the ":checks" project at build time. lintChecks(project(":checks")) // Compiles lint checks from the ":checks-to-publish" into a // lint.jar file and publishes it to your Android library. lintPublish(project(":checks-to-publish")) } Odlotowedependencies { // Executes lint checks from the ':checks' project at build time. lintChecks project(':checks') // Compiles lint checks from the ':checks-to-publish' into a // lint.jar file and publishes it to your Android library. lintPublish project(':checks-to-publish') } |
Konfigurowanie zależności dla określonego wariantu kompilacji
Wszystkie poprzednie konfiguracje stosują zależności do wszystkich wariantów kompilacji. Jeśli lepiej zadeklarować zależność tylko dla konkretnej kompilacji wariantzbioru źródeł lub dla źródła testowego , musisz napisać wielkimi literami nazwę konfiguracji. nazwę i poprzedź ją nazwą wariantu kompilacji lub testowego zbioru źródłowego.
Aby np. dodać zdalną zależność binarną tylko do tagu „bezpłatne” produkt
rodzaj za pomocą konfiguracji implementation
, użyj tego:
Kotlin
dependencies { freeImplementation("com.google.firebase:firebase-ads:21.5.1") }
Odlotowe
dependencies { freeImplementation 'com.google.firebase:firebase-ads:21.5.1' }
Jeśli jednak chcesz dodać zależność dla wersji, która łączy produkt i typ kompilacji, musisz zainicjować nazwę konfiguracji:
Kotlin
// Initializes a placeholder for the freeDebugImplementation dependency configuration. val freeDebugImplementation by configurations.creating dependencies { freeDebugImplementation(project(":free-support")) }
Odlotowe
configurations { // Initializes a placeholder for the freeDebugImplementation dependency configuration. freeDebugImplementation {} } dependencies { freeDebugImplementation project(":free-support") }
Aby dodać zależności (implementation
) na potrzeby testów lokalnych i testów instrumentowanych
, wygląda to tak:
Kotlin
dependencies { // Adds a remote binary dependency only for local tests. testImplementation("junit:junit:4.12") // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
Odlotowe
dependencies { // Adds a remote binary dependency only for local tests. testImplementation 'junit:junit:4.12' // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
Jednak w takiej sytuacji niektóre konfiguracje nie mają sensu. Przykład:
ponieważ inne moduły nie mogą zależeć od funkcji androidTest
, otrzymasz następujący
ostrzeżenie, jeśli używasz konfiguracji androidTestApi
:
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.
Kolejność zależności
Kolejność wyświetlania zależności wskazuje ich priorytet: pierwsza biblioteka ma wyższy priorytet niż druga, a druga – niż trzeci itd. Kolejność ta jest ważna, jeśli zasoby zostały scalone lub elementy manifestu są scalane do aplikacji z bibliotek.
Jeśli na przykład projekt deklaruje te elementy:
- Zależność od
LIB_A
iLIB_B
(w tej kolejności) LIB_A
zależy od tych danych:LIB_C
iLIB_D
(w tej kolejności)LIB_B
zależy również od:LIB_C
W takiej sytuacji kolejność zależności stałych będzie wyglądać tak:
LIB_A
LIB_D
LIB_B
LIB_C
Dzięki temu zarówno LIB_A
, jak i LIB_B
mogą zastąpić
LIB_C
; a LIB_D
ma nadal wyższy priorytet niż
LIB_B
, ponieważ LIB_A
(w zależności od tego)
ma wyższy priorytet niż LIB_B
.
Aby uzyskać więcej informacji o plikach manifestu z różnych projektów źródła/zależności zostały scalone, patrz Scalanie wielu plików manifestu.
Informacje o zależności w Konsoli Play
podczas tworzenia aplikacji, AGP uwzględnia metadane opisujące bibliotekę. zawarte w niej zależności. Podczas przesyłania aplikacji link Google Play Konsola sprawdza te metadane, aby wygenerować alerty o znanych problemach z pakietami SDK oraz i w razie potrzeby przekazywać praktyczne opinie, ich rozwiązania.
Dane są kompresowane, szyfrowane kluczem podpisywania Google Play i przechowywane
do bloku podpisywania aplikacji w wersji. Zalecamy zachowanie tych zależności
aby zadbać o bezpieczeństwo i pozytywne wrażenia użytkowników. Aby zrezygnować, dodaj
obserwujesz
dependenciesInfo
w pliku build.gradle.kts
modułu.
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}
Więcej informacji o naszych zasadach i potencjalnych problemach z zależnościami znajdziesz tutaj: naszej strony pomocy używasz w aplikacji pakietów SDK innych firm.
Statystyki dotyczące pakietu SDK
Android Studio wyświetla ostrzeżenia lint w pliku katalogu wersji oraz projekcie Okno struktury publicznych pakietów SDK w Platforma Google Play SDK Index, jeśli występują te problemy:
- Pakiety SDK zostały oznaczone przez autorów jako nieaktualne.
- Naruszają zasady Google Play.
Ostrzeżenia sygnalizują, że trzeba zaktualizować te zależności, ponieważ że używanie nieaktualnych wersji może uniemożliwić publikowanie w Google Play konsoli w przyszłości.
Dodaj zależności kompilacji bez katalogów wersji
Zalecamy korzystanie z katalogów wersji do dodawania zależności i zarządzania nimi, ale jest to proste projekty mogą nie być potrzebne. Oto przykład pliku kompilacji, który nie korzysta katalogi wersji:
Kotlin
plugins { id("com.android.application") } android { ... } dependencies { // Dependency on a remote binary implementation("com.example.android:app-magic:12.3") // Dependency on a local library module implementation(project(":mylibrary")) }
Odlotowe
plugins { id 'com.android.application' } android { ... } dependencies { // Dependency on a remote binary implementation 'com.example.android:app-magic:12.3' // Dependency on a local library module implementation project(':mylibrary') }
Ten plik kompilacji deklaruje zależność od wersji 12.3 metody „app-magic” w bibliotece „com.example.android”, grupy przestrzeni nazw. Zdalny plik binarny deklaracja zależności to skrócony skrót dla:
Kotlin
implementation(group = "com.example.android", name = "app-magic", version = "12.3")
Odlotowe
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
W pliku kompilacji deklarujesz też zależność od modułu biblioteki Androida o nazwie
"mylibrary"; ta nazwa musi być zgodna z nazwą biblioteki zdefiniowaną w tagu include:
w
Twój plik settings.gradle.kts
. Podczas tworzenia aplikacji system kompilacji
skompiluje moduł biblioteki i pakuje otrzymaną zawartość w pliku
.
Plik kompilacji deklaruje również zależność od wtyczki Androida do obsługi Gradle.
(com.application.android
). Jeśli masz kilka modułów korzystających z tego samego
wtyczki, w ścieżce klasy kompilacji możesz mieć tylko jedną wersję wtyczki
we wszystkich modułach. Zamiast określać wersję w każdym module
skrypt kompilacji, umieść zależność wtyczki w głównym skrypcie kompilacji
z wersją i wskazać, by jej nie stosować. Dodaję opowiadania (apply false
)
Gradle, aby zanotować wersję wtyczki, ale nie używać jej w kompilacji głównej.
Zwykle główny skrypt kompilacji jest pusty z wyjątkiem tego bloku plugins
.
Kotlin
plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false }
Odlotowe
plugins { id ‘com.android.application’ version ‘8.3.0-rc02’ apply false }
Jeśli masz projekt z jednym modułem, możesz jawnie podać wersję skrypt kompilacji na poziomie modułu i pozostaw skrypt kompilacji na poziomie projektu pusty:
Kotlin
plugins { id("com.android.application") version "8.3.0" }
Odlotowe
plugins { id 'com.android.application' version '8.3.0-rc02' }