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.