Przygotowywanie biblioteki do publikacji

Na tej stronie opisujemy właściwości i opcje potrzebne do przygotowania projektu biblioteki Androida do publikacji za pomocą wtyczki Android Gradle (AGP). Nawet jeśli skonfigurujesz niektóre z tych właściwości na samym początku tworzenia biblioteki, zapoznaj się z poniższymi wskazówkami, aby zoptymalizować ustawienia.

Wybierz przestrzeń nazw

Biblioteki Androida muszą zadeklarować przestrzeń nazw, aby mogły wygenerować unikalną klasę R podczas kompilowania ich zasobów. Ta przestrzeń nazw powinna być ściśle zgodna z pakietem klasy głównej biblioteki, aby uniknąć nieporozumień podczas importowania przez użytkowników zwykłych klas z biblioteki i jej klasy R.

Od AGP 7.0 możesz ustawić przestrzeń nazw w pliku build.gradle aplikacji, jak w tym przykładzie kodu:

Odlotowy

android {
  namespace = 'com.example.library'
}

Kotlin

android {
  namespace = "com.example.library"
}

Przestrzeń nazw jest właściwością biblioteki przeznaczoną dla programistów. Nie jest ona związana z tożsamością aplikacji ustawianą za pomocą właściwości applicationId.

W poprzednich wersjach AGP właściwość applicationId (dla aplikacji) i namespace (w przypadku biblioteki) można było ustawiać za pomocą atrybutu package pliku manifestu, co wprowadzało w błąd.

Wybierz wartość minSdkVersion

Wybranie minSdkVersion to ważny aspekt publikowania biblioteki. Pole minSdkVersion powinno odpowiadać minimalnej wersji Androida, jaką obsługuje Twój kod.

Wybierając minSdkVersion, weź pod uwagę te informacje:

  • Ustawienie niskiej wartości minSdkVersion pozwala na częstsze rozpowszechnianie biblioteki.

    Kod biblioteki zwykle nie jest wykonywany, chyba że aplikacja go jawnie go wywoła. Aplikacja nadal może działać na urządzeniach z Androidem w wersji niższej niż wymagana przez zależność biblioteki – jeśli biblioteka nie jest kluczowa dla jej głównej funkcji – przeprowadzając sprawdzanie w czasie działania przed jej wywołaniem. Dlatego ustaw wartość minSdkVersion w bibliotece na tyle niskie, by można było umieścić ją w aplikacjach i wywołać w miarę możliwości, aby dotrzeć do większej liczby użytkowników.

  • Wybranie wysokiej wartości minSdkVersion może uniemożliwić aplikacjom uwzględnianie biblioteki.

    Fuzja plików manifestu, czyli etap w AGP, który polega na scalaniu plików manifestu z aplikacji i zależności od niej, wymusza, aby żadne zależności nie miały wyższych wartości minSdkVersion niż aplikacja.

  • Wybranie wysokiej wartości minSdkVersion może spowodować, że deweloperzy aplikacji będą musieli wyłączyć testy zabezpieczeń scalania plików manifestu, co spowoduje problemy na późniejszym etapie kompilacji.

    Ponieważ łączenie plików manifestu uniemożliwia projektom aplikacji uwzględnianie bibliotek z wartością minSdkVersion wyższą niż sama aplikacja, deweloperzy mogą wyłączyć kontrole bezpieczeństwa związane z łączeniem plików manifestu, aby zminimalizować błędy kompilacji. Ryzyko to jednak powoduje poważne problemy ze zgodnością na dalszych etapach.

  • Wybranie wysokiej wartości minSdkVersion może być konieczne w szczególnych przypadkach, gdy plik manifestu biblioteki zawiera odbiornik lub inny mechanizm, przez który jej kod jest wyzwalany automatycznie.

    W takich przypadkach wybór wysokiej wartości minSdkVersion gwarantuje uruchomienie kodu. Możesz też wyłączyć automatyczne zachowanie, aby aplikacja mogła wyrazić zgodę na uruchomienie biblioteki po przeprowadzeniu odpowiednich testów.

Aby umożliwić umieszczanie w aplikacjach, użyj adnotacji RequiresApi w bibliotece, aby wskazać elementom wywołującym, że muszą sprawdzić działanie w czasie działania. Android Lint wykorzystuje informacje z RequiresApi do inspekcji. Więcej materiałów na temat używania adnotacji do ulepszania kodu API i interfejsów API znajdziesz w artykule Usprawnij badania kodu za pomocą adnotacji.

Konfigurowanie metadanych AAR

Biblioteka Androida jest spakowana w postaci pliku archiwum Androida (AAR). Metadane AAR składają się z właściwości, które pomagają AGP w korzystaniu z bibliotek. Jeśli biblioteka jest wykorzystywana przez niezgodną konfigurację, a metadane AAR są skonfigurowane, użytkownicy zobaczą komunikat o błędzie, który pomoże im rozwiązać problem.

Wybierz wartość minCompileSdk

AGP obsługuje minCompileSdk od wersji 4.1. Wskazuje ona minimalną wartość compileSdk, z której mogą korzystać użytkownicy projektów. Jeśli Twoja 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:

Odlotowy

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 wielu miejscach, podczas procesu kompilacji Gradle określi priorytety lokalizacji ustawień w ten sposób:

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

W poprzednim przykładzie, gdzie parametr minCompileSdk jest określony zarówno w przypadku parametrów defaultConfig{}, jak i productFlavors{}, parametr productFlavors{} ma priorytet, a minCompileSdk ma wartość 30.

Więcej informacji o tym, jak Gradle traktuje priorytetowo ustawienia podczas łączenia kodu i zasobów, znajdziesz w artykule Tworzenie za pomocą zbiorów źródłowych.

Włącz osprzęt testowy

Urządzenia testowe są zwykle używane do konfigurowania testowanego kodu lub ułatwiania testowania komponentów. Od wersji 7.1 AGP może tworzyć urządzenia testowe dla projektów z biblioteki jako dodatek do projektów aplikacji i funkcji dynamicznych.

Gdy publikujesz bibliotekę do wykorzystania przez innych, rozważ utworzenie wersji testowych interfejsu API. Urządzenia testowe można włączyć w pliku build.gradle na poziomie modułu:

Odlotowy

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

Gdy włączysz osprzęt testowy, Gradle automatycznie utworzy zbiór źródłowy src/testFixtures, w którym możesz zapisywać urządzenia testowe.

Więcej informacji znajdziesz w dokumentacji Gradle dotyczącej używania osprzętu testowego.