Apa perbedaan antara versi SDK min / target versi SDK vs kompilasi versi SDK?

214

Apa perbedaan antara "min sdk versi / target sdk versi" dan "compile sdk versi"? Saya tahu apa artinya min dan target SDK, tetapi apa artinya mengkompilasi versi SDK?

Di Eclipse, saya memiliki min / max dan target SDK, tetapi di android studio ada tiga pengaturan ini.

Tobias
sumber
Saat ini saya sedang mengerjakan sebuah aplikasi di mana saya menggunakan targetdkversion sebagai 12 dan semua tata letak saya sangat tidak normal maka saya mengubahnya kembali ke 23 dan itu berfungsi seperti pesona jadi saya pikir versi targetdk harus selalu sama dengan versi yang dikompilasi
Shahid Sarwar

Jawaban:

232

Versi min sdk adalah rilis Android SDK yang paling awal yang dapat dijalankan oleh aplikasi Anda. Biasanya ini karena masalah dengan API sebelumnya, kurang fungsionalitas, atau beberapa masalah perilaku lainnya.

Versi SDK target adalah versi yang ditargetkan untuk dijalankan oleh aplikasi Anda . Idealnya, ini karena semacam kondisi lari yang optimal. Jika Anda "membuat aplikasi Anda untuk versi 19", ini adalah tempat yang akan ditentukan. Ini mungkin berjalan pada rilis sebelumnya atau yang lebih baru, tetapi inilah yang Anda tuju. Ini sebagian besar untuk menunjukkan seberapa mutakhir aplikasi Anda untuk digunakan di pasar, dll.

Versi sdk kompilasi adalah versi android yang digunakan IDE Anda (atau cara kompilasi lainnya) untuk membuat aplikasi saat Anda menerbitkan .apkfile. Ini berguna untuk menguji aplikasi Anda karena itu adalah kebutuhan umum untuk mengkompilasi aplikasi Anda saat Anda mengembangkannya. Karena ini adalah versi untuk dikompilasi ke APK, itu akan menjadi versi rilis Anda. Demikian juga, disarankan agar ini cocok dengan versi SDK target Anda.

Mat
sumber
Mengkompilasi versi SDK dan versi SDK target saya adalah sama. Itu adalah 21. Aplikasi saya mogok ketika saya menjalankannya di perangkat dengan tingkat API yang lebih rendah. Saya baru mengenal Android, bagaimana seharusnya saya melanjutkan sekarang?
prgmrDev
2
@prgmrDev Jika aplikasi Anda mogok pada versi yang lebih rendah dari 21, Anda mungkin harus mengatur versi min SDK Anda menjadi 21. Ini sebenarnya tidak akan memperbaiki aplikasi Anda pada target yang lebih rendah dari 21, itu hanya akan mencatat bahwa aplikasi Anda tidak didukung pada versi yang lebih rendah. Anda juga memiliki opsi untuk menentukan apa yang sebenarnya merusak aplikasi Anda (apa yang berubah dalam versi 21,) dan menambahkan dukungan untuk menjaga ketergantungan itu, tetapi saya menduga itu akan menjadi banyak pekerjaan dan tidak dalam lingkup pemula Android. proyek.
Matt
1
Apa yang terjadi jika saya menetapkan minSdkVersion = 14; targetSdkVersion = 23; dan kompilasi SDK ke 19?
thadeuszlay
5
@ thadeuszlay pertanyaan Anda tidak relevan karena Anda harus berpikir sedikit bahwa jika Anda menargetkan untuk berjalan pada versi 23 maka bagaimana mungkin untuk mengkompilasinya dengan 19! Harap ikuti rumus minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad
@ Mat dapatkah terjadi bahwa ketika menggunakan compileVersion 26 misalnya, saya tidak sengaja menggunakan fitur atau java API yang tidak didukung pada versi 21, yang mana min sdk? maaf, tidak benar-benar mendapatkan beberapa konsep dasar di sini
haart
83

Rumusnya adalah

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - adalah penanda yang menentukan versi Android minimum yang dapat diinstal aplikasi. Juga digunakan oleh Lint untuk mencegah panggilan API yang tidak ada. Itu juga berdampak pada Build Time. Jadi, Anda dapat menggunakan rasa yang dibuat untuk mengganti minSdkVersion ke maksimum selama pengembangan. Ini akan membantu membuat pembangunan lebih cepat menggunakan semua peningkatan yang disediakan oleh tim Android untuk kita. Misalnya beberapa fitur Java 8 hanya tersedia dari versi minSdkVersion tertentu.

targetSdkVersion - mengatakan sistem Android untuk mengaktifkan perubahan perilaku tertentu.

Sebagai contoh:

  • Mulai di Android 6.0 (API level 23) Runtime Permissionsdiperkenalkan. Jika Anda menetapkan targetSdkVersionke 22 atau lebih rendah aplikasi Anda tidak meminta izin kepada pengguna dalam waktu berjalan.

  • Mulai di Android 8.0 (API level 26), semua notificationsharus ditetapkan ke saluran atau tidak akan muncul. Pada perangkat yang menjalankan Android 7.1 (API level 25) dan lebih rendah, pengguna dapat mengelola notifikasi hanya berdasarkan per-aplikasi (secara efektif setiap aplikasi hanya memiliki satu saluran pada Android 7.1 dan lebih rendah).

  • Mulai di Android 9 (API level 28) Web-based data directories separated by process,. Jika targetSdkVersion28+ dan Anda membuat beberapa WebViewdalam berbagai proses yang berbeda, Anda akan mendapatkannyajava.lang.RuntimeException

compileSdkVersion - sebenarnya ini adalah versi SDK Platform dan memberi tahu Gradle yang digunakan Android SDK untuk dikompilasi. Saat Anda ingin menggunakan fitur baru atau men-debug .javafile dari Android SDK Anda harus mengurus compileSdkVersion. Satu contoh lagi adalah menggunakan AndroidX yang memaksa untuk menggunakan compileSdkVersion- level 28. compileSdkVersion tidak termasuk dalam APK Anda : itu murni digunakan di compile time. Mengubah compileSdkVersion Anda tidak mengubah perilaku runtime. Ini dapat menghasilkan misalnya peringatan / kesalahan kompiler baru. Karena itu sangat disarankan agar Anda selalu mengkompilasi dengan SDK terbaru. Anda akan mendapatkan semua manfaat dari pemeriksaan kompilasi baru pada kode yang ada, menghindari API yang baru ditinggalkan, dan siap menggunakan API baru. Satu fakta lagicompileSdkVersion >= Support Library version

Anda dapat membaca lebih lanjut di sini . Saya juga merekomendasikan Anda untuk melihat contoh migrasi ke Android 8.0.

yoAlex5
sumber
9
Jawaban terbaik di sini karena itu sebenarnya menjelaskan perbedaan praktis antara targetSdkVersion dan compileSdkVersion
Dean Wild
@ yoAlex5 Terima kasih atas jawaban Anda. Saya melihat banyak kasus targetSdkVersion dan compileSdkVersion sama. Mengapa android menjadikan keduanya sebagai terpisah, tidak bisa satu cukup untuk menangani atau apakah ada alasan khusus di balik membuat dua bidang terpisah?
Manju
@ Manju Anda dapat menemukan lebih banyak di SO thread stackoverflow.com/questions/26694108/…
yoAlex5
@ yoAlex5 apa maksud Anda 'sistem Android untuk mengaktifkan perubahan perilaku spesifik' dapat Anda jelaskan?
k_kumar
@atishr 'perubahan perilaku spesifik' tercantum di blok 'Misalnya'
yoAlex5
74

Versi min sdk adalah versi minimum sistem operasi Android yang diperlukan untuk menjalankan aplikasi Anda.

Versi SDK target adalah versi Android tempat aplikasi Anda dibuat untuk dijalankan.

Versi sdk kompilasi adalah versi Android yang digunakan alat bangun untuk mengkompilasi dan membangun aplikasi untuk melepaskan, menjalankan, atau men-debug.

Biasanya kompilasi versi SDK dan versi Target SDK adalah sama.

anuraagy
sumber
23
Dan ketika mereka tidak pro / kontra yang sama?
powder366
4

compileSdkVersion : CompileSdkVersion adalah versi API yang dikompilasi oleh aplikasi. Ini berarti Anda dapat menggunakan fitur Android API yang termasuk dalam versi API tersebut (dan juga semua versi sebelumnya). Jika Anda mencoba dan menggunakan fitur API 16 tetapi mengatur compileSdkVersion ke 15, Anda akan mendapatkan kesalahan kompilasi. Jika Anda mengatur compileSdkVersion ke 16 Anda masih dapat menjalankan aplikasi pada perangkat API 15.

minSdkVersion : Versi min sdk adalah versi minimum sistem operasi Android yang diperlukan untuk menjalankan aplikasi Anda.

targetSdkVersion : Versi SDK target adalah versi yang akan dijalankan aplikasi Anda.

Vinay John
sumber