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.

Untuk aplikasi baru, pilih versi terbaru yang tersedia. Untuk aplikasi yang sudah ada, update versi ini ke versi terbaru jika bisa.

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.

Untuk aplikasi baru, pilih versi terbaru yang tersedia. Untuk aplikasi yang sudah ada, update ke versi terbaru jika bisa (setelah mengupdate compileSdkVersion).

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 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.

Untuk aplikasi baru, lihat data distribusi pengguna di Wizard New Project Android Studio atau di apilevels.com. Pilih keseimbangan antara potensi pangsa pasar dan biaya pemeliharaan. Semakin rendah minSdkVersion Anda, semakin banyak waktu yang dihabiskan untuk mengatasi bug lama dan menambahkan perilaku penggantian untuk fitur yang belum diimplementasikan.

Untuk aplikasi yang sudah ada, naikkan minSdkVersion setiap kali API level lama tidak lagi sepadan dengan biaya pemeliharaan, atau turunkan jika pengguna memintanya dan sepadan dengan biaya pemeliharaan baru. Konsol Play memiliki metrik khusus untuk distribusi pengguna aplikasi.

minSdkVersion aplikasi Anda tersedia untuk preprocessor melalui makro __ANDROID_MIN_SDK_VERSION__ (__ANDROID_API__ lama identik, tetapi lebih memilih yang lama karena artinya lebih jelas). Makro ini ditentukan secara otomatis oleh Clang, sehingga header tidak perlu disertakan untuk menggunakannya. Untuk build NDK, makro ini selalu ditetapkan.