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 wtyczki 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 wtyczki Androida do obsługi Gradle 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 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
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 starszej niż wymagana przez zależność biblioteki, jeśli biblioteka nie jest niezbędna do podstawowych funkcji aplikacji. W tym celu przed wywołaniem biblioteki należy przeprowadzać sprawdzanie w czasie działania. Dlatego ustaw
minSdkVersionna wystarczająco niską wartość, aby można było osadzić bibliotekę w aplikacjach i w miarę możliwości wywoływać ją, co pomoże Ci dotrzeć do większej liczby użytkowników.Wybór wysokiego poziomu
minSdkVersionmoże uniemożliwić aplikacjom dołączenie biblioteki.Narzędzie do łączenia manifestów, które jest częścią AGP i łączy pliki manifestu z aplikacji i jej zależności, sprawdza, czy żadna z zależności nie ma wyższego numeru
minSdkVersionniż aplikacja.Wybór wysokiej wartości
minSdkVersionmoż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 wartości
minSdkVersionwyższej 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
minSdkVersionmoże być konieczny w szczególnych przypadkach, gdy manifest biblioteki zawiera odbiornik transmisji lub inny mechanizm, za pomocą którego jej kod jest wywoływany automatycznie.W takich przypadkach wybranie wysokiej wartości
minSdkVersionzapewnia możliwość uruchomienia kodu. Możesz też wyłączyć automatyczne działanie, aby aplikacja mogła zdecydować się na wykonanie biblioteki 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 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 i skonfigurowano metadane AAR, użytkownikom wyświetla się komunikat o błędzie, który pomaga rozwiązać problem.
Wybierz wartość minCompileSdk
Od wersji 4.1 AGP obsługuje minCompileSdk.
Wskazuje 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 nadaje priorytet lokalizacjom ustawień w tej kolejności:
buildTypes{}productFlavors{}defaultConfig{}
W powyższym przykładzie, w którym parametr minCompileSdk jest zdefiniowany zarówno w defaultConfig{}, jak i w productFlavors{}, parametr 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 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 na poziomie modułu:build.gradle
Groovy
android { testFixtures { enable = true } }
Kotlin
android { testFixtures { enable = true } }
Gdy włączysz test fixtures, Gradle automatycznie utworzy zestaw źródeł src/testFixtures, w którym możesz pisać test fixtures.
Więcej informacji znajdziesz w dokumentacji Gradle na temat używania testów.