Na tej stronie opisujemy właściwości i opcje potrzebne do przygotowania projektu biblioteki Androida do publikacji za pomocą wtyczki Android Gradle (AGP). Nawet jeśli skonfigurujesz niektóre z tych właściwości na samym początku tworzenia biblioteki, zapoznaj się z poniższymi wskazówkami, aby zoptymalizować ustawienia.
Wybierz przestrzeń nazw
Biblioteki Androida muszą zadeklarować przestrzeń nazw, aby mogły wygenerować unikalną klasę R
podczas kompilowania ich zasobów. Ta przestrzeń nazw powinna być ściśle zgodna z pakietem klasy głównej biblioteki, aby uniknąć nieporozumień podczas importowania przez użytkowników zwykłych klas z biblioteki i jej klasy R
.
Od AGP 7.0 możesz ustawić przestrzeń nazw w pliku build.gradle
aplikacji, jak w tym przykładzie kodu:
Odlotowy
android { namespace = 'com.example.library' }
Kotlin
android { namespace = "com.example.library" }
Przestrzeń nazw jest właściwością biblioteki przeznaczoną dla programistów. Nie jest ona związana z tożsamością aplikacji ustawianą za pomocą właściwości applicationId
.
W poprzednich wersjach AGP właściwość applicationId
(dla aplikacji) i namespace
(w przypadku biblioteki) można było ustawiać za pomocą atrybutu package
pliku manifestu, co wprowadzało w błąd.
Wybierz wartość minSdkVersion
Wybranie minSdkVersion
to ważny aspekt publikowania biblioteki. Pole minSdkVersion
powinno odpowiadać minimalnej wersji Androida, jaką obsługuje Twój kod.
Wybierając minSdkVersion
, weź pod uwagę te informacje:
Ustawienie niskiej wartości
minSdkVersion
pozwala na częstsze rozpowszechnianie biblioteki.Kod biblioteki zwykle nie jest wykonywany, chyba że aplikacja go jawnie go wywoła. Aplikacja nadal może działać na urządzeniach z Androidem w wersji niższej niż wymagana przez zależność biblioteki – jeśli biblioteka nie jest kluczowa dla jej głównej funkcji – przeprowadzając sprawdzanie w czasie działania przed jej wywołaniem. Dlatego ustaw wartość
minSdkVersion
w bibliotece na tyle niskie, by można było umieścić ją w aplikacjach i wywołać w miarę możliwości, aby dotrzeć do większej liczby użytkowników.Wybranie wysokiej wartości
minSdkVersion
może uniemożliwić aplikacjom uwzględnianie biblioteki.Fuzja plików manifestu, czyli etap w AGP, który polega na scalaniu plików manifestu z aplikacji i zależności od niej, wymusza, aby żadne zależności nie miały wyższych wartości
minSdkVersion
niż aplikacja.Wybranie wysokiej wartości
minSdkVersion
może spowodować, że deweloperzy aplikacji będą musieli wyłączyć testy zabezpieczeń scalania plików manifestu, co spowoduje problemy na późniejszym etapie kompilacji.Ponieważ łączenie plików manifestu uniemożliwia projektom aplikacji uwzględnianie bibliotek z wartością
minSdkVersion
wyższą niż sama aplikacja, deweloperzy mogą wyłączyć kontrole bezpieczeństwa związane z łączeniem plików manifestu, aby zminimalizować błędy kompilacji. Ryzyko to jednak powoduje poważne problemy ze zgodnością na dalszych etapach.Wybranie wysokiej wartości
minSdkVersion
może być konieczne w szczególnych przypadkach, gdy plik manifestu biblioteki zawiera odbiornik lub inny mechanizm, przez który jej kod jest wyzwalany automatycznie.W takich przypadkach wybór wysokiej wartości
minSdkVersion
gwarantuje uruchomienie kodu. Możesz też wyłączyć automatyczne zachowanie, aby aplikacja mogła wyrazić zgodę na uruchomienie biblioteki po przeprowadzeniu odpowiednich testów.
Aby umożliwić umieszczanie w aplikacjach, użyj adnotacji RequiresApi
w bibliotece, aby wskazać elementom wywołującym, że muszą sprawdzić działanie w czasie działania. Android Lint wykorzystuje informacje z RequiresApi
do inspekcji. Więcej materiałów na temat używania adnotacji do ulepszania kodu API i interfejsów API znajdziesz w artykule Usprawnij badania kodu za pomocą adnotacji.
Konfigurowanie metadanych AAR
Biblioteka Androida jest spakowana w postaci pliku archiwum Androida (AAR). Metadane AAR składają się z właściwości, które pomagają AGP w korzystaniu z bibliotek. Jeśli biblioteka jest wykorzystywana przez niezgodną konfigurację, a metadane AAR są skonfigurowane, użytkownicy zobaczą komunikat o błędzie, który pomoże im rozwiązać problem.
Wybierz wartość minCompileSdk
AGP obsługuje minCompileSdk
od wersji 4.1.
Wskazuje ona minimalną wartość compileSdk
, z której mogą korzystać użytkownicy projektów. Jeśli Twoja biblioteka zawiera wpisy w pliku manifestu lub zasoby, które korzystają z nowszych atrybutów platformy, musisz ustawić tę wartość.
Wartość minCompileSdk
można ustawić w blokach defaultConfig{}
, productFlavors{}
i buildTypes{}
w pliku build.gradle
na poziomie modułu:
Odlotowy
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { foo { ... aarMetadata { minCompileSdk = 30 } } } }
Kotlin
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { register("foo") { ... aarMetadata { minCompileSdk = 30 } } } }
Jeśli ustawisz minCompileSdk
w wielu miejscach, podczas procesu kompilacji Gradle określi priorytety lokalizacji ustawień w ten sposób:
buildTypes{}
productFlavors{}
defaultConfig{}
W poprzednim przykładzie, gdzie parametr minCompileSdk
jest określony zarówno w przypadku parametrów defaultConfig{}
, jak i productFlavors{}
, parametr productFlavors{}
ma priorytet, a minCompileSdk
ma wartość 30.
Więcej informacji o tym, jak Gradle traktuje priorytetowo ustawienia podczas łączenia kodu i zasobów, znajdziesz w artykule Tworzenie za pomocą zbiorów źródłowych.
Włącz osprzęt testowy
Urządzenia testowe są zwykle używane do konfigurowania testowanego kodu lub ułatwiania testowania komponentów. Od wersji 7.1 AGP może tworzyć urządzenia testowe dla projektów z biblioteki jako dodatek do projektów aplikacji i funkcji dynamicznych.
Gdy publikujesz bibliotekę do wykorzystania przez innych, rozważ utworzenie wersji testowych interfejsu API. Urządzenia testowe można włączyć w pliku build.gradle
na poziomie modułu:
Odlotowy
android { testFixtures { enable = true } }
Kotlin
android { testFixtures { enable = true } }
Gdy włączysz osprzęt testowy, Gradle automatycznie utworzy zbiór źródłowy src/testFixtures
, w którym możesz zapisywać urządzenia testowe.
Więcej informacji znajdziesz w dokumentacji Gradle dotyczącej używania osprzętu testowego.