Obsługa różnych wersji platformy

Najnowsze wersje Androida często udostępniają świetne interfejsy API dla Twojej aplikacji, ale do czasu, aż więcej urządzeń zostanie zaktualizowanych, musisz nadal obsługiwać starsze wersje Androida. Z tej lekcji dowiesz się, jak korzystać z najnowszych interfejsów API, a jednocześnie nadal obsługiwać starsze wersje.

Użyj kreatora Nowy projekt w Android Studio, aby znaleźć rozkład aktywnych urządzeń z poszczególnymi wersjami Androida. Te dane są oparte na liczbie urządzeń, które odwiedzają Sklep Google Play. Zazwyczaj zalecamy obsługę około 90% aktywnych urządzeń, a jednocześnie kierowanie aplikacji na najnowszą wersję.

Wskazówka: aby zapewnić najlepsze funkcje i działanie w różnych wersjach Androida, używaj w aplikacji Biblioteki pomocy Androida, która umożliwia korzystanie z kilku najnowszych interfejsów API platformy w starszych wersjach.

Określanie minimalnego i docelowego poziomu interfejsu API

Plik AndroidManifest.xml zawiera szczegółowe informacje o aplikacji i określa, które wersje Androida są obsługiwane. W szczególności atrybuty minSdkVersiontargetSdkVersion elementu <uses-sdk> określają najniższy poziom interfejsu API, z którym Twoja aplikacja jest zgodna, oraz najwyższy poziom interfejsu API, pod kątem którego została zaprojektowana i przetestowana.

Na przykład:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

Wraz z wprowadzaniem nowych wersji Androida niektóre style i zachowania mogą się zmieniać. Aby umożliwić aplikacji korzystanie z tych zmian i zapewnić, że będzie pasować do stylu urządzenia każdego użytkownika, ustaw wartość targetSdkVersion na najnowszą dostępną wersję Androida.

Pomocnicze wersje pakietu SDK nie są powiązane ze zmianami w działaniu, więc nie można ustawić parametru targetSdkVersion tak, aby odzwierciedlał pomocniczą wersję pakietu SDK. Jeśli chcesz wywołać interfejs API w wersji podrzędnej pakietu SDK nowszej niż minSdkVersion, sprawdź wersję systemu w czasie działania.

Sprawdzanie wersji systemu w czasie działania

Android udostępnia unikalny kod dla każdej wersji platformy w klasie stałych Build. Używaj tych kodów w aplikacji, aby tworzyć warunki, które zapewniają, że kod zależny od wyższych poziomów interfejsu API jest wykonywany tylko wtedy, gdy te interfejsy API są dostępne w systemie.

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

Możesz użyć Build.VERSION.SDK_INT_FULL, aby sprawdzić, czy występuje główna lub pomocnicza wersja pakietu SDK.

Kotlin

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

Java

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

Uwaga: podczas analizowania zasobów XML Android ignoruje atrybuty XML, które nie są obsługiwane przez bieżące urządzenie. Dzięki temu możesz bezpiecznie używać atrybutów XML, które są obsługiwane tylko przez nowsze wersje, bez obaw, że starsze wersje przestaną działać, gdy napotkają ten kod. Jeśli na przykład ustawisz wartość targetSdkVersion="11", Twoja aplikacja będzie domyślnie zawierać ActionBar na urządzeniach z Androidem 3.0 lub nowszym. Aby dodać elementy menu do paska działań, musisz ustawić atrybut android:showAsAction="ifRoom" w pliku XML zasobu menu. Możesz to zrobić w pliku XML obejmującym różne wersje, ponieważ starsze wersje Androida po prostu ignorują atrybut showAsAction (czyli nie potrzebujesz osobnej wersji w res/menu-v11/).

Korzystanie ze stylów i motywów platformy

Android udostępnia motywy interfejsu, które nadają aplikacjom wygląd i sposób działania systemu operacyjnego. Te motywy można zastosować w aplikacji w pliku manifestu. Dzięki korzystaniu z tych wbudowanych stylów i motywów aplikacja będzie naturalnie dostosowywać się do najnowszego wyglądu Androida w każdej nowej wersji.

Aby aktywność wyglądała jak okno dialogowe:

<activity android:theme="@android:style/Theme.Dialog">

Aby aktywność miała przezroczyste tło:

<activity android:theme="@android:style/Theme.Translucent">

Aby zastosować własny motyw niestandardowy zdefiniowany w pliku /res/values/styles.xml:

<activity android:theme="@style/CustomTheme">

Aby zastosować motyw do całej aplikacji (wszystkich działań), dodaj atrybut android:theme do elementu <application>:

<application android:theme="@style/CustomTheme">

Więcej informacji o tworzeniu i używaniu motywów znajdziesz w przewodniku Style i motywy.