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.