Properti versi Android SDK

Aplikasi Android dapat menetapkan sejumlah properti versi SDK dalam file build.gradle. Dokumentasi Android build.gradle menjelaskan arti properti tersebut bagi aplikasi secara umum. Dokumen ini menjelaskan pengaruh properti tersebut terhadap build NDK.

compileSdkVersion

Properti ini tidak berpengaruh pada build NDK. Ketersediaan API untuk NDK diatur oleh minSdkVersion. Hal ini karena simbol C++ dengan cepat di-resolve pada waktu pemuatan library, bukan di-resolve dengan lambat saat pertama kali dipanggil (seperti dalam Java). Penggunaan simbol apa pun yang tidak tersedia di minSdkVersion akan menyebabkan gagalnya pemuatan library pada versi OS yang tidak memiliki API baru, terlepas dari apakah API tersebut akan dipanggil atau tidak.

targetSdkVersion

Serupa dengan Java, targetSdkVersion aplikasi dapat mengubah perilaku runtime kode native. Jika memungkinkan, perubahan perilaku dalam sistem hanya diterapkan pada aplikasi dengan targetSdkVersion yang lebih besar dari atau sama dengan versi OS yang memperkenalkan perubahan tersebut.

Meskipun developer aplikasi secara umum mengetahui targetSdkVersion aplikasinya, API ini berguna untuk developer library yang tidak dapat mengetahui targetSdkVersion yang akan dipilih pengguna.

Pada runtime, Anda dapat memperoleh targetSdkVersion yang digunakan oleh aplikasi dengan memanggil android_get_application_target_sdk_version(). API ini tersedia di API level 24 dan yang lebih baru. Fungsi ini memiliki tanda tangan berikut:

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

Perubahan perilaku lainnya mungkin bergantung pada API level perangkat. Anda dapat mengetahui API level perangkat yang menjalankan aplikasi dengan memanggil android_get_device_api_level(). Fungsi ini memiliki tanda tangan berikut:

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

Properti ini tidak berpengaruh pada build NDK.

minSdkVersion

minSdkVersion yang ditetapkan dalam file build.gradle menentukan API yang tersedia pada waktu build (lihat compileSdkVersion untuk memahami alasan hal ini berbeda dari build Java), dan menentukan versi minimum OS yang kompatibel dengan kode.

minSdkVersion aplikasi tersedia untuk preprosesor melalui makro __ANDROID_API__. Makro ini ditentukan secara otomatis oleh Clang, sehingga header tidak perlu disertakan untuk menggunakannya. Untuk build NDK, makro ini selalu ditetapkan.

minSdkVersion digunakan oleh NDK untuk menentukan fitur yang dapat digunakan saat mengompilasi kode. Misalnya, properti ini menentukan fitur FORTIFY yang digunakan dalam libc, dan juga dapat mengaktifkan penyempurnaan performa atau ukuran (seperti hash GNU atau RELLR) untuk biner yang tidak kompatibel dengan versi Android yang lebih lama. Meskipun Anda tidak menggunakan API baru apa pun, properti ini tetap mengatur versi OS minimum yang didukung untuk kode Anda. Meskipun demikian, library mungkin akan dimuat pada versi OS yang lebih lama. Jangan bergantung, karena mungkin berbeda pada versi NDK, versi OS, atau perangkat individual.