Android SDK-Versionsattribute

Für Android-Apps können verschiedene Eigenschaften der SDK-Version in ihrem build.gradle-Datei. In der Android build.gradle-Dokumentation wird erläutert, Bedeutung für die Anwendung im Allgemeinen. In diesem Dokument wird erläutert, wirken sich diese Eigenschaften auf NDK-Builds aus.

CompilSdkVersion

Diese Eigenschaft hat keine Auswirkungen auf NDK-Builds. Die API-Verfügbarkeit für das NDK ist unterliegt stattdessen minSdkVersion. Das liegt daran, dass C++-Symbole bei der Ladezeit der Bibliothek und nicht erst beim ersten Aufruf (wie sondern in Java). Die Verwendung von Symbolen, die in der minSdkVersion führt dazu, dass die Bibliothek bei Betriebssystemversionen, die nicht über die neuere API verfügen, unabhängig davon, ob diese APIs aufgerufen werden oder nicht.

Wenn Sie eine neue App verwenden möchten, wählen Sie die neueste verfügbare Version aus. Aktualisieren Sie bei einer vorhandenen App auf die neueste Version.

targetSdkVersion

Ähnlich wie bei Java kann der targetSdkVersion deiner App die Laufzeit ändern Verhalten des nativen Codes. Verhaltensänderungen im System sind, wenn möglich, nur wird auf Apps mit einer targetSdkVersion angewendet, die größer oder gleich dem Betriebssystem ist der die Änderung eingeführt hat.

Wenn Sie eine neue App verwenden möchten, wählen Sie die neueste verfügbare Version aus. Aktualisieren Sie bei einer vorhandenen App auf die neueste Version aktualisieren (nach der Aktualisierung von compileSdkVersion).

App-Entwickler kennen in der Regel die targetSdkVersion ihrer App. Dies ist jedoch Die API ist nützlich für Bibliotheksentwickler, die nicht wissen, welche targetSdkVersion die ihre Nutzenden auswählen.

Zur Laufzeit können Sie den von einer Anwendung verwendeten targetSdkVersion abrufen, indem Sie folgenden Befehl aufrufen: android_get_application_target_sdk_version(). Diese API ist in der API verfügbar ab Level 24. Diese Funktion hat die folgende Signatur:

/**
 * 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);

Andere Verhaltensänderungen können vom API-Level des Geräts abhängen. Sie können die API abrufen, Ebene des Geräts an, auf dem Ihre Anwendung ausgeführt wird, indem Sie android_get_device_api_level() Diese Funktion hat die folgende Signatur:

/**
 * 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();

maxSdkVersion

Diese Eigenschaft hat keine Auswirkungen auf NDK-Builds.

minSdkVersion

Der in Ihrer build.gradle-Datei festgelegte minSdkVersion bestimmt, welche APIs bei der Build-Erstellung verfügbar. Informationen zu den Unterschieden finden Sie unter compileSdkVersion. aus Java-Builds) und bestimmt die Mindestversion des Betriebssystems, kompatibel sein werden.

Das minSdkVersion wird vom NDK verwendet, um zu bestimmen, welche Funktionen verwendet werden können wenn Sie den Code kompilieren. Diese Property bestimmt beispielsweise, welche FORTIFY- -Funktionen werden in libc verwendet und können auch Leistungs- oder Größenverbesserungen ermöglichen (z. B. GNU-Hashes oder RELR) für Ihre Binärdateien, die nicht kompatibel sind mit ältere Android-Versionen. Auch wenn Sie keine neuen APIs verwenden, bestimmt weiterhin die unterstützte Mindestversion des Betriebssystems Ihres Codes.

Für eine neue App kannst du dir die Daten zur Nutzerverteilung im neuen Projekt von Android Studio ansehen. oder apilevels.com aufrufen. Wähle dein Guthaben aus zwischen potenziellen Marktanteil und Wartungskosten. Je niedriger der Wert für „minSdkVersion“, desto mehr Zeit verbringen Sie damit, alte Fehler zu umgehen und Fallback-Verhaltensweisen hinzuzufügen. für Funktionen, die noch nicht implementiert wurden.

Erhöhen Sie für eine vorhandene App den Wert für minSdkVersion, wenn die alten API-Ebenen nicht mehr gültig sind die Wartungskosten länger wert sind, oder senken, wenn Ihre Nutzer es fordern und es die neuen Wartungskosten zu rechtfertigen. In der Play Console findest du Messwerte, die speziell für dein die Verteilung der Nutzer der App.

Die minSdkVersion Ihrer Anwendung wird dem Präprozessor zur Verfügung gestellt über das __ANDROID_MIN_SDK_VERSION__-Makro (die alte __ANDROID_API__ ist identisch sind, bevorzugen aber die erstgenannte, da ihre Bedeutung klarer ist). Dieses Makro ist wird automatisch von Clang definiert, sodass für die Verwendung kein Header eingefügt werden muss. Für NDK erstellt, ist dieses Makro immer definiert.