Proprietà della versione dell'SDK Android

Le app per Android possono impostare una serie di proprietà della versione dell'SDK build.gradle. La documentazione per Android build.gradle spiega cosa queste proprietà rappresentano l'applicazione in generale. Questo documento spiega come queste proprietà influiscono sulle build NDK.

compileSdkVersion

Questa proprietà non ha effetto sulle build NDK. La disponibilità dell'API per l'NDK è regolata invece da minSdkVersion. Questo perché i simboli C++ sono risolti in fase di caricamento della libreria anziché rallentati alla prima chiamata (come sono in Java). Utilizzare simboli non disponibili nel minSdkVersion causerà il mancato caricamento della libreria sulle versioni del sistema operativo che non dispongono della nuova API, indipendentemente dal fatto che vengano chiamate o meno.

Per una nuova app, scegli la versione più recente disponibile. Per un'app esistente, aggiorna all'ultima versione quando ti è più comodo.

VersioneSdk target

Come per Java, l'elemento targetSdkVersion della tua app può modificare il runtime comportamento del codice nativo. I cambiamenti di comportamento nel sistema sono, quando fattibile, solo applicata alle app con targetSdkVersion superiore o uguale al sistema operativo che ha introdotto la modifica.

Per una nuova app, scegli la versione più recente disponibile. Per un'app esistente, aggiorna all'ultima versione quando opportuno (dopo aver aggiornato compileSdkVersion).

Gli sviluppatori di applicazioni in genere conoscono il targetSdkVersion della loro app, L'API è utile per gli sviluppatori di librerie che non possono sapere quali targetSdkVersion sarà la scelta degli utenti.

In fase di runtime, puoi ottenere il valore targetSdkVersion utilizzato da un'applicazione chiamando android_get_application_target_sdk_version(). Questa API è disponibile in API livello 24 e successivi. Questa funzione ha la seguente firma:

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

Altre modifiche del comportamento potrebbero dipendere dal livello API del dispositivo. Puoi ottenere l'API livello del dispositivo su cui è in esecuzione la tua applicazione chiamando android_get_device_api_level(). Questa funzione ha la seguente firma:

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

versione maxSdk

Questa proprietà non ha effetto sulle build NDK.

Versione minSdk

Il set di minSdkVersion nel file build.gradle determina quali API sono disponibile al momento della build (vedi compileSdkVersion per capire le ragioni della differenza da build Java) e determina la versione minima del sistema operativo che il tuo codice con cui sarà compatibile.

minSdkVersion viene utilizzato dall'NDK per determinare quali funzionalità possono essere usate durante la compilazione del codice. Ad esempio, questa proprietà determina quale FORTIFY le funzionalità vengono usate in libc e possono anche consentire miglioramenti delle prestazioni o delle dimensioni (come GNU hash o RELR) per i tuoi file binari non compatibili con versioni precedenti di Android. Anche se non utilizzi nuove API, questa proprietà regola comunque la versione minima del sistema operativo supportata del tuo codice.

Per una nuova app, visualizza i dati sulla distribuzione degli utenti nel Nuovo progetto di Android Studio guidata o sul sito apilevels.com. Scegli il saldo tra la potenziale quota di mercato e i costi di manutenzione. Più basso è il valore di minSdkVersion, più tempo dedicherai a risolvere i vecchi bug e ad aggiungere comportamenti di fallback per le funzionalità non ancora implementate.

Per un'app esistente, aumenta il minSdkVersion ogni volta che i livelli API precedenti non sono vale la pena prolungare i costi di manutenzione o se i tuoi utenti lo richiedono vale la pena sostenere i nuovi costi di manutenzione. Play Console offre metriche specifiche per il tuo la distribuzione utenti dell'app.

Il valore minSdkVersion della tua applicazione viene messo a disposizione del pre-responsabile tramite la macro __ANDROID_MIN_SDK_VERSION__ (la versione __ANDROID_API__ precedente è identici, ma preferiscono il primo perché il suo significato è più chiaro). Questa macro è definiti automaticamente da Clang, quindi non è necessario includere intestazione per utilizzarlo. Per build NDK, questa macro è sempre definita.