Właściwości wersji pakietu Android SDK

Aplikacje na Androida mogą ustawiać różne właściwości wersji pakietu SDK w pliku build.gradle. Dokumentacja Androida build.gradle wyjaśnia, co te właściwości oznaczają ogólnie dla aplikacji. Ten dokument wyjaśnia, jak te właściwości wpływają na kompilacje NDK.

wersja kompilacji

Ta właściwość nie ma wpływu na kompilacje NDK. Dostępność interfejsów API dla pakietu NDK podlega zasadom minSdkVersion. Dzieje się tak, ponieważ symbole C++ są z łatwością rozpoznawane podczas wczytywania biblioteki, a nie leniwe rozpoznawanie się przy pierwszym wywołaniu (ponieważ są w języku Java). Używanie symboli niedostępnych w interfejsie minSdkVersion spowoduje, że biblioteka nie załaduje się w systemie operacyjnym w wersji bez nowszej wersji interfejsu API, niezależnie od tego, czy zostaną one wywołane.

Jeśli chcesz zainstalować nową aplikację, wybierz jej najnowszą dostępną wersję. Jeśli masz już aplikację, zaktualizuj ją do najnowszej wersji w dogodnym momencie.

Wersja docelowaSdk

Podobnie jak w języku Java, targetSdkVersion Twojej aplikacji może zmieniać działanie kodu natywnego w czasie działania. Jeśli to możliwe, zmiany działania w systemie są stosowane tylko do aplikacji, których targetSdkVersion w wersji systemu operacyjnego, która wprowadziła zmianę, jest co najmniej równa tej wersji.

Jeśli chcesz zainstalować nową aplikację, wybierz jej najnowszą dostępną wersję. Jeśli masz już aplikację, zaktualizuj ją do najnowszej wersji w dogodnym momencie (po zaktualizowaniu compileSdkVersion).

Choć deweloperzy aplikacji zwykle znają właściwość targetSdkVersion swojej aplikacji, ten interfejs API jest przydatny dla twórców bibliotek, którzy nie wiedzą, którą targetSdkVersion wybiorą użytkownicy.

W czasie działania aplikacji możesz uzyskać targetSdkVersion, z której korzysta aplikacja, wywołując metodę android_get_application_target_sdk_version(). Ten interfejs API jest dostępny od poziomu 24. Ta funkcja ma następujący podpis:

/**
 * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if
 * there is no known target SDK version (for code not running in the context of
 * an app).
 *
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
 *
 * See also android_get_device_api_level().
 *
 * Available since API level 24.
 */
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);

Inne zmiany w działaniu mogą zależeć od poziomu interfejsu API urządzenia. Poziom interfejsu API urządzenia, na którym działa Twoja aplikacja, możesz uzyskać, wywołując metodę android_get_device_api_level(). Ta funkcja ma następujący podpis:

/**
 * Returns the API level of the device we're actually running on, or -1 on failure.
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the Java `Build.VERSION.SDK_INT` API.
 *
 * See also android_get_application_target_sdk_version().
 */
int android_get_device_api_level();

Wersja maxSdk

Ta właściwość nie ma wpływu na kompilacje NDK.

minSdkVersion

Wartość minSdkVersion ustawiona w pliku build.gradle określa, które interfejsy API są dostępne w czasie kompilacji (zobacz sekcję buildSdkVersion, aby dowiedzieć się, dlaczego ta opcja różni się od kompilacji w języku Java) oraz określa minimalną wersję systemu operacyjnego, z którą Twój kod będzie zgodny.

Pakiet minSdkVersion jest używany przez NDK do określania funkcji, które mogą być używane podczas kompilowania kodu. Na przykład ta właściwość określa, które funkcje FORTIFY są używane w bibliotece libc, a także może umożliwiać zwiększenie wydajności lub rozmiaru plików (np. szyfrów GNU lub RELR), które są niezgodne ze starszymi wersjami Androida. Nawet jeśli nie używasz żadnych nowych interfejsów API, ta właściwość nadal reguluje minimalną obsługiwaną wersję systemu operacyjnego Twojego kodu.

W przypadku nowej aplikacji sprawdź dane dotyczące dystrybucji wśród użytkowników w kreatorze nowego projektu w Android Studio lub na stronie apilevels.com. Wybierz równowagę między potencjalnym udziałem w rynku a kosztami utrzymania. Im niższa wartość minSdkVersion, tym więcej czasu poświęcisz na naprawianie starych błędów i dodawanie zachowań zastępczych w przypadku funkcji, które nie zostały jeszcze wdrożone.

W przypadku istniejącej aplikacji podnoś minSdkVersion za każdym razem, gdy stary poziom interfejsu API nie jest już wart kosztów obsługi, lub obniżaj go, jeśli użytkownicy tego potrzebują i jest to warte nowych kosztów utrzymania. W Konsoli Play znajdziesz dane dotyczące rozpowszechniania aplikacji wśród użytkowników.

Zasób minSdkVersion Twojej aplikacji jest udostępniany podmiotowi przetwarzającemu za pomocą makra __ANDROID_MIN_SDK_VERSION__ (starsza wersja __ANDROID_API__ jest identyczna, ale preferuje to pierwsze, ponieważ jej znaczenie jest bardziej zrozumiałe). To makro jest definiowane automatycznie przez Clang, więc nie trzeba go używać z nagłówkiem. W przypadku kompilacji NDK to makro jest zawsze zdefiniowane.