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.