Ta strona zawiera opis właściwości i opcji potrzebnych do przygotowania projektu biblioteki Androida do publikacji za pomocą wtyczki Androida do obsługi Gradle (AGP). Nawet jeśli niektóre z tych właściwości ustawisz na początku tworzenia biblioteki, zapoznaj się z poniższymi wskazówkami, aby zoptymalizować ustawienia.
Wybieranie przestrzeni nazw
Biblioteki Androida muszą deklarować przestrzeń nazw, aby podczas kompilowania zasobów mogły generować unikalną klasę R. Ta przestrzeń nazw powinna być zbliżona do pakietu klasy głównej biblioteki, aby uniknąć nieporozumień, gdy użytkownicy importują zwykłe klasy z biblioteki i jej klasy R.
Od wersji AGP 7.0 możesz ustawić
przestrzeń nazw
w pliku build.gradle aplikacji, jak pokazano w tym przykładzie kodu:
Dynamiczny
android { namespace = 'com.example.library' }
Kotlin
android { namespace = "com.example.library" }
Przestrzeń nazw to właściwość biblioteki widoczna dla dewelopera. Nie jest ona
powiązana z tożsamością aplikacji, którą ustawia się za pomocą
applicationId
właściwości.
W poprzednich wersjach AGP zarówno właściwość applicationId (w przypadku aplikacji), jak i właściwość namespace (w przypadku biblioteki) można było ustawić za pomocą atrybutu package w manifeście, co powodowało nieporozumienia.
Wybieranie wartości minSdkVersion
Wybór wartości minSdkVersion dla
biblioteki jest ważnym aspektem jej publikowania. Wartość minSdkVersion powinna odzwierciedlać minimalną wersję Androida, którą może obsługiwać Twój kod.
Podczas wybierania wartości minSdkVersion pamiętaj o tych kwestiach:
Wybór niskiej wartości
minSdkVersionzwykle pozwala na szersze rozpowszechnianie biblioteki.Kod biblioteki zwykle nie jest wykonywany, chyba że aplikacja wywoła go bezpośrednio. Aplikacja może nadal działać w wersji Androida niższej niż wymagana przez zależność biblioteki – jeśli biblioteka nie jest niezbędna do podstawowych funkcji aplikacji – przez sprawdzanie w czasie działania przed wywołaniem biblioteki. Dlatego ustaw wartość
minSdkVersionbiblioteki na wystarczająco niską, aby można było ją osadzić w aplikacjach i wywoływać, gdy jest to możliwe, aby dotrzeć do większej liczby użytkowników.Wybór wysokiej wartości
minSdkVersionmoże uniemożliwić aplikacjom uwzględnienie biblioteki.Łączenie manifestów, które jest etapem AGP, który łączy pliki manifestu z aplikacji i jej zależności, wymusza, aby żadna zależność nie miała wyższej wartości
minSdkVersionniż aplikacja.Wybór wysokiej wartości
minSdkVersionmoże spowodować, że deweloperzy aplikacji wyłączą sprawdzanie bezpieczeństwa łączenia manifestów, co spowoduje problemy na późniejszym etapie procesu kompilacji.Ponieważ łączenie plików manifestu uniemożliwia projektom aplikacji uwzględnianie bibliotek z wyższą wartością
minSdkVersionniż sama aplikacja, deweloperzy aplikacji mogą wyłączyć sprawdzanie zabezpieczeń łączenia plików manifestu, aby zminimalizować błędy kompilacji. Może to jednak spowodować problemy z niezgodnością.Wybór wysokiej wartości
minSdkVersionmoże być konieczny w szczególnych przypadkach, gdy manifest biblioteki zawiera odbiornik transmisji lub inny mechanizm, za pomocą którego jej kod jest uruchamiany automatycznie.W takich przypadkach wybór wysokiej wartości
minSdkVersionzapewnia, że kod może działać. Możesz też wyłączyć automatyczne działanie, aby aplikacja mogła zdecydować się na wykonanie biblioteki po przeprowadzeniu odpowiednich kontroli.
Aby umożliwić osadzanie w aplikacjach, użyj w
bibliotece adnotacji
RequiresApi, aby poinformować jej wywołujących, że muszą przeprowadzić sprawdzanie w czasie działania. Android Lint używa informacji RequiresApi do sprawdzania. Więcej informacji o używaniu adnotacji do ulepszania kodu i interfejsów API znajdziesz w artykule Ulepszanie sprawdzania kodu za pomocą adnotacji.
Konfigurowanie metadanych AAR
Biblioteka Androida jest spakowana w postaci pliku Android Archive (AAR). Metadane AAR składają się z właściwości, które pomagają AGP korzystać z bibliotek. Jeśli biblioteka jest używana przez niezgodną konfigurację i skonfigurowano metadane AAR, użytkownicy zobaczą komunikat o błędzie, który pomoże im rozwiązać problem.
Wybieranie wartości minCompileSdk
Od wersji 4.1 AGP obsługuje
minCompileSdk.
Wskazuje to minimalną wartość
compileSdk
, której mogą używać projekty korzystające z biblioteki. Jeśli 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:
Dynamiczny
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 kilku miejscach, Gradle podczas procesu kompilacji będzie traktować lokalizacje ustawień w tej kolejności:
buildTypes{}productFlavors{}defaultConfig{}
W poprzednim przykładzie, w którym minCompileSdk jest zdefiniowany zarówno w defaultConfig{}, jak i productFlavors{}, priorytet ma productFlavors{}, a minCompileSdk jest ustawiony na 30.
Więcej informacji o tym, jak Gradle traktuje ustawienia priorytetowo podczas łączenia kodu i zasobów, znajdziesz w artykule Kompilowanie za pomocą zestawów źródeł.
Włączanie testowych elementów stałych
Testowe elementy stałe są zwykle używane do konfigurowania testowanego kodu lub ułatwiania testów komponentu. Od wersji 7.1 AGP może tworzyć testowe elementy stałe dla projektów bibliotek, a także dla projektów aplikacji i funkcji dynamicznych.
Publikując bibliotekę, z której będą korzystać inni, rozważ utworzenie testowych elementów stałych dla interfejsu API. Testowe elementy stałe można włączyć w pliku build.gradle na poziomie modułu:
Dynamiczny
android { testFixtures { enable = true } }
Kotlin
android { testFixtures { enable = true } }
Gdy włączysz testowe elementy stałe, Gradle automatycznie utworzy zbiór źródeł src/testFixtures, w którym możesz pisać testowe elementy stałe.
Więcej informacji znajdziesz w dokumentacji Gradle na temat używania testowych elementów stałych.