Przygotowywanie biblioteki do publikacji

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{}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:

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

W powyższym przykładzie, w którym parametr minCompileSdk jest zdefiniowany w elementach defaultConfig{}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.