Na tej stronie znajdziesz opis właściwości i opcji potrzebnych do przygotowania projektu biblioteki na Androida do publikacji za pomocą wtyczki Androida do obsługi Gradle (AGP). Nawet jeśli ustawisz niektóre z tych właściwości na początku tworzenia biblioteki, zapoznaj się z poniższymi wskazówkami, aby zoptymalizować ustawienia.
Wybierz przestrzeń nazw
Biblioteki Androida muszą deklarować przestrzeń nazw, aby podczas kompilacji 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 AGP 7.0 możesz ustawić przestrzeń nazw w pliku build.gradle
aplikacji, jak pokazano w tym przykładzie kodu:
Groovy
android { namespace = 'com.example.library' }
Kotlin
android { namespace = "com.example.library" }
Przestrzeń nazw to właściwość biblioteki widoczna dla programistów. Nie jest on powiązany z tożsamością aplikacji, która jest ustawiana za pomocą właściwości applicationId
.
W poprzednich wersjach AGP zarówno właściwość applicationId
(dla aplikacji), jak i właściwość namespace
(dla biblioteki) można było ustawić za pomocą atrybutu package
w pliku manifestu, co powodowało zamieszanie.
Wybierz wartość minSdkVersion
Wybór minSdkVersion
dla biblioteki jest ważnym aspektem publikowania biblioteki. Wartość minSdkVersion
powinna odzwierciedlać minimalną wersję Androida, którą obsługuje Twój kod.
Wybierając minSdkVersion
, pamiętaj o tych kwestiach:
Wybór niskiego poziomu
minSdkVersion
zwykle 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 starszej niż wymagana przez zależność biblioteki, jeśli biblioteka nie jest niezbędna do podstawowej funkcjonalności aplikacji. W tym celu przed wywołaniem biblioteki należy przeprowadzać sprawdzanie w czasie działania. Dlatego ustaw rozmiar biblioteki na
minSdkVersion
, aby można było ją osadzać w aplikacjach i w miarę możliwości wywoływać, co pomoże Ci docierać do większej liczby użytkowników.Wybór wysokiego poziomu
minSdkVersion
może uniemożliwić aplikacjom dołączenie biblioteki.Narzędzie do łączenia plików manifestu, które jest częścią AGP, łączy pliki manifestu z aplikacji i jej zależności. Wymaga ono, aby żadna z zależności nie miała wyższego numeru
minSdkVersion
niż aplikacja.Wybór wysokiej wartości
minSdkVersion
może spowodować, że deweloperzy aplikacji wyłączą kontrole bezpieczeństwa scalania plików manifestu, co może później spowodować problemy w procesie kompilacji.Scalanie plików manifestu uniemożliwia projektom aplikacji uwzględnianie bibliotek o wyższym poziomie
minSdkVersion
niż sama aplikacja, więc deweloperzy aplikacji mogą wyłączyć kontrole bezpieczeństwa scalania plików manifestu, aby zminimalizować błędy kompilacji. Może to jednak spowodować problemy z niezgodnością w przyszłości.Wybór wysokiej wartości
minSdkVersion
moż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 wybranie wysokiej wartości
minSdkVersion
zapewnia możliwość uruchomienia kodu. Możesz też wyłączyć automatyczne działanie, aby aplikacja mogła zdecydować, czy chce wykonać bibliotekę po przeprowadzeniu odpowiednich weryfikacji.
Aby zezwolić na osadzanie w aplikacjach, użyj w bibliotece adnotacji RequiresApi
, aby poinformować wywołujące ją funkcje, że muszą przeprowadzać sprawdzanie w czasie działania. Android Lint wykorzystuje RequiresApi
informacje do przeprowadzania kontroli. Więcej informacji o używaniu adnotacji do ulepszania kodu interfejsu API i samych interfejsów API znajdziesz w artykule Ulepszanie sprawdzania kodu za pomocą adnotacji.
Konfigurowanie metadanych AAR
Biblioteka Androida jest pakowana w formie 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 w niezgodnej konfiguracji, a metadane AAR są skonfigurowane, użytkownicy zobaczą komunikat o błędzie, który pomoże im rozwiązać problem.
Wybierz wartość minCompileSdk
Od wersji 4.1 AGP obsługuje minCompileSdk
.
Wskazuje to minimalną wartośćcompileSdk
, z której mogą korzystać projekty korzystające z usługi. 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:
Groovy
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ć priorytetowo lokalizacje ustawień w tej kolejności:
buildTypes{}
productFlavors{}
defaultConfig{}
W powyższym przykładzie, w którym parametr minCompileSdk
jest zdefiniowany w elementach defaultConfig{}
i productFlavors{}
, element productFlavors{}
ma wyższy priorytet, a parametr minCompileSdk
ma wartość 30.
Więcej informacji o tym, jak Gradle ustala priorytety ustawień podczas łączenia kodu i zasobów, znajdziesz w artykule Kompilowanie za pomocą zestawów źródeł.
Włączanie elementów testowych
Test fixtures są zwykle używane do konfigurowania testowanego kodu lub ułatwiania testów komponentu. Od wersji 7.1 AGP może tworzyć testy jednostkowe dla projektów bibliotek, a także dla projektów aplikacji i funkcji dynamicznych.
Podczas publikowania biblioteki, z której będą korzystać inne osoby, warto utworzyć testowe elementy API. Elementy testowe można włączyć w pliku build.gradle
na poziomie modułu:
Groovy
android { testFixtures { enable = true } }
Kotlin
android { testFixtures { enable = true } }
Gdy włączysz elementy testowe, Gradle automatycznie utworzy zestaw źródeł src/testFixtures
, w którym możesz pisać elementy testowe.
Więcej informacji znajdziesz w dokumentacji Gradle na temat korzystania z test fixtures.