Przygotowywanie biblioteki do publikacji

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 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 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ść minSdkVersion biblioteki 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 minSdkVersion moż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 minSdkVersion niż aplikacja.

  • Wybór wysokiej wartości minSdkVersion moż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ą minSdkVersion niż 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 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 wybór wysokiej wartości minSdkVersion zapewnia, ż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:

  1. buildTypes{}

  2. productFlavors{}

  3. 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.