Proprietà della versione dell'SDK Android

Le applicazioni Android possono impostare una serie di proprietà delle versioni dell'SDK nel file build.gradle. La documentazione di Android build.gradle spiega il significato di queste proprietà per l'applicazione in generale. Questo documento spiega in che modo queste proprietà influiscono sulle build NDK.

compileSdkVersion

Questa proprietà non ha effetto sulle build NDK. La disponibilità dell'API per l'NDK è invece regolata da minSdkVersion. Questo perché i simboli C++ vengono risolti con entusiasmo al momento del caricamento della libreria, anziché pigramente quando vengono chiamati la prima volta (come in Java). L'utilizzo di simboli non disponibili in minSdkVersion comporterà il mancato caricamento della libreria sulle versioni del sistema operativo che non dispongono dell'API più recente, indipendentemente dal fatto che le API vengano chiamate o meno.

Per una nuova app, scegli la versione più recente disponibile. Per un'app esistente, esegui l'aggiornamento all'ultima versione quando preferisci.

Versione targetSdk

Analogamente a Java, l'elemento targetSdkVersion della tua app può modificare il comportamento di runtime del codice nativo. Le modifiche del comportamento nel sistema vengono, se possibile, applicate solo alle app con un valore targetSdkVersion maggiore o uguale alla versione del sistema operativo che ha introdotto la modifica.

Per una nuova app, scegli la versione più recente disponibile. Per un'app esistente, esegui l'aggiornamento all'ultima versione quando preferisci (dopo l'aggiornamento di compileSdkVersion).

Sebbene gli sviluppatori di applicazioni in genere conoscano il targetSdkVersion della loro app, questa API è utile per gli sviluppatori di librerie che non possono sapere quale targetSdkVersion scelgono i loro utenti.

In fase di runtime, puoi fare in modo che targetSdkVersion venga utilizzato da un'applicazione chiamando android_get_application_target_sdk_version(). Questa API è disponibile a livello API 24 e versioni successive. 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 conoscere il livello API 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 minSdkVersion nel file build.gradle determina quali API sono disponibili al momento della build (consulta la sezione compileSdkVersion per capire perché è diversa da quelle delle build Java) e determina la versione minima del sistema operativo con cui sarà compatibile il tuo codice.

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

Per una nuova app, visualizza i dati sulla distribuzione degli utenti nella procedura guidata per il nuovo progetto di Android Studio o su apilevels.com. Scegli il giusto equilibrio tra quota di mercato potenziale e costi di manutenzione. Più basso è il numero di minSdkVersion, più tempo dedicherai alla gestione dei vecchi bug e all'aggiunta di comportamenti di riserva per le funzionalità non ancora implementate.

Per un'app esistente, aumenta minSdkVersion ogni volta che i livelli API precedenti non valgono più i costi di manutenzione o riducili se gli utenti lo richiedono e vale il valore dei nuovi costi di manutenzione. Play Console offre metriche specifiche per la distribuzione utenti della tua app.

Il valore minSdkVersion della tua applicazione viene messo a disposizione del preprocessore tramite la macro __ANDROID_MIN_SDK_VERSION__ (il valore __ANDROID_API__ legacy è identico, ma preferisci la prima perché il suo significato è più chiaro). Questa macro viene definita automaticamente da Clang, quindi non è necessario includere un'intestazione per utilizzarla. Per le build NDK, questa macro è sempre definita.