Saya telah melihat dokumentasi untuk membangun dengan Gradle, tetapi saya masih tidak yakin apa bedanya compileSdkVersion
dan targetSdkVersion
apa.
Yang dikatakannya adalah:
The
compileSdkVersion
properti menetapkan target kompilasi.
Nah, apa "target kompilasi" itu?
Saya melihat dua cara yang mungkin untuk menafsirkan ini:
compileSdkVersion
adalah versi compiler yang digunakan dalam membangun aplikasi, sementaratargetSdkVersion
adalah "tingkat API bahwa target aplikasi" . (Jika ini masalahnya, saya anggapcompileSdkVersion
harus lebih besar atau sama dengantargetSdkVersion
?- Mereka berarti hal yang sama. "kompilasi target" == "tingkat API yang ditargetkan aplikasi"
- Sesuatu yang lain
Saya melihat bahwa pertanyaan ini telah ditanyakan sebelumnya, tetapi satu jawaban hanya mengutip dokter, yang tidak jelas bagi saya.
android
sdk
android-gradle-plugin
android-build
coder123
sumber
sumber
Jawaban:
compileSdkVersion
Ini
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, tentunya). Jika Anda mencoba dan menggunakan fitur API 16 tetapi diaturcompileSdkVersion
ke 15, Anda akan mendapatkan kesalahan kompilasi. Jika Anda menetapkancompileSdkVersion
ke 16 Anda masih dapat menjalankan aplikasi pada perangkat API 15 selama jalur eksekusi aplikasi Anda tidak mencoba untuk memohon API apa pun khusus untuk API 16.targetSdkVersion
Tidak
targetSdkVersion
ada hubungannya dengan bagaimana aplikasi Anda dikompilasi atau API apa yang dapat Anda manfaatkan. ThetargetSdkVersion
seharusnya menunjukkan bahwa Anda telah diuji aplikasi Anda pada (mungkin sampai dengan dan termasuk) versi yang Anda tentukan. Ini lebih seperti sertifikasi atau penandatanganan Anda memberi OS Android sebagai petunjuk bagaimana seharusnya menangani aplikasi Anda dalam hal fitur OS.Misalnya, seperti yang dinyatakan dalam dokumentasi :
OS Android, saat runtime , dapat mengubah cara aplikasi Anda bergaya atau dieksekusi dalam konteks OS berdasarkan nilai ini. Ada beberapa contoh lain yang diketahui yang dipengaruhi oleh nilai ini dan daftar itu cenderung hanya meningkat seiring waktu.
Untuk semua tujuan praktis, sebagian besar aplikasi akan ingin diatur
targetSdkVersion
ke versi terbaru dari API. Ini akan memastikan aplikasi Anda terlihat sebaik mungkin di perangkat Android terbaru. Jika Anda tidak menentukantargetSdkVersion
, itu default keminSdkVersion
.sumber
targetSdkVersion
sangat mungkin akan lebih tinggi daricompileSdkVersion
dan memang seharusnya begitu. Ini berarti bahwa meskipun Anda merancang aplikasi untuk menargetkan API 16, misalnya, aplikasi itu masih berjalan dengan baik di API 21 (Lollipop) dan Anda harus menabraktargetSdkVersion
aplikasi 21 untuk menunjukkan bahwa tidak apa-apa bagi OS Android untuk menerapkan gaya Lollipop yang mungkin ada di aplikasi Anda.compileSdkVersion
ke versi yang lebih tinggi berarti Anda ingin menggunakan beberapa API baru yang hanya termasuk dalam rilis khusus itu. Jika Anda tidak berencana menggunakan fitur khusus Lollipop di aplikasi Anda, maka sebenarnya (biasanya) tidak ada alasan untuk mengaturcompileSdkVersion
ke 21. Namun, aplikasi Anda kemungkinan akan berjalan dengan baik di API 21 apa adanya, sehingga Anda dapat mengubahtargetSdkVersion
untuk menunjukkan aplikasi Anda berjalan seperti yang Anda harapkan (target) pada API 21, tetapi Anda tidak menggunakan API apa pun yang spesifik untuk 21 (kompilasi) dan dengan demikian AndacompileSdkVersion
dapat tetap pada angka 15 dalam contoh ini.Sebagai pemandu wisata:
Idealnya:
Baca lebih lanjut dari pos hebat ini oleh Ian Lake
sumber
minSdkVersion
berarti aplikasi level api perangkat terendahcan
dijalankan? Mungkin karena menggunakan API tertentu yang tersedia sejak saat ituminSdkVersion
?minSdkVersion
15 (yaitu ICS 4.0.3), perangkat dengan API 14 (yang merupakan ICS 4.0) seharusnya tidak dapat menginstal aplikasi. Dan setidaknya untuk saat ini, aplikasi akan berjalan pada 15, 16, 17, 18, 19, (20 tapi itu untuk OS lama pakai), 21, 22, 23, 24, 25, 26, 27, 28, dan seterusnya di masa depan (mungkin)The
compileSdkVersion
harus terbaru versi stabil. ThetargetSdkVersion
harus sepenuhnya diuji dan kurang atau sama dengancompileSdkVersion
.sumber
targetSdkVersion
ke yang lebih rendah. JaditargetSdkVersion
seharusnya yang Anda uji dan tahu perilaku yang tepat, dan bisa <= stabil terbaru.compileSdkVersion
harus menjadi versi stabil terbaru' harus diakhiri dengan 'yang Anda gunakan fitur API'. Tidak masuk akal untuk melakukan kompilasi terhadap API 27 (API stabil terbaru hari ini) jika Anda hanya menggunakan fitur versi API yang lebih rendah. Namun, versi stabil terbaru dapat mencakup beberapa fitur yang secara otomatis menjadi lebih baik, misalnya keamanan yang ditingkatkan atau kompilasi yang efisien dengan kompatibilitas ke belakang. Oleh karena itu disarankan untuk menggunakan versi stabil terbaru atau setidaknya terbaru, tetapi 'seharusnya [bukan] menjadi versi terbaru per se .Terlambat ke permainan .. dan ada beberapa jawaban hebat di atas - pada dasarnya, bahwa
compileSdkVersion
ini adalah versi API yang dikompilasi oleh aplikasi, sementara itutargetSdkVersion
menunjukkan versi yang diuji terhadap aplikasi tersebut.Saya ingin melengkapi jawaban itu dengan catatan berikut:
Itu
targetSdkVersion
memengaruhi cara permintaan izin :targetSdkVersion
23 atau lebih tinggi, aplikasi meminta izin dari pengguna saat run-time.targetSdkVersion
adalah 22 atau lebih rendah, sistem meminta pengguna untuk memberikan izin ketika pengguna menginstal aplikasi.Jika
compileSdkVersion
lebih tinggi dari versi yang dinyatakan oleh aplikasi AndatargetSdkVersion
, sistem dapat mengaktifkan perilaku kompatibilitas untuk memastikan bahwa aplikasi Anda terus bekerja seperti yang Anda harapkan. ( ref )Dengan setiap rilis Android baru ...
targetSdkVersion
harus ditambahkan agar sesuai dengan level API terbaru, kemudian uji aplikasi Anda secara menyeluruh pada versi platform yang sesuaicompileSdkVersion
, di sisi lain, tidak perlu diubah kecuali Anda menambahkan fitur eksklusif ke versi platform barutargetSdkVersion
sering (awalnya) kurang daricompileSdkVersion
, tidak jarang melihat aplikasi yang dipelihara dengan baik dengantargetSdkVersion > compileSdkVersion
sumber
targetSdkVersion
Anda mungkin melihat perilaku kompatibilitas. Saya tidak percaya itu ada hubungannya dengancompileSdkVersion
.The CompileSdkVersion
adalah versi platform SDK yang digunakan aplikasi Anda untuk kompilasi, dll. SELAMA proses pengembangan (Anda harus selalu menggunakan yang terbaru) Ini dikirimkan bersama dengan versi API yang Anda gunakanAnda akan melihat ini di
build.gradle
file Anda :targetSdkVersion:
berisi info yang dikirimkan oleh aplikasi Anda SETELAH proses pengembangan ke app store yang memungkinkannyaTARGET the SPECIFIED version of the Android platform
. Bergantung pada fungsionalitas aplikasi Anda, itu dapat menargetkan versi API yang lebih rendah dari yang sekarang. Misalnya, Anda dapat menargetkan API 18 bahkan jika versi saat ini adalah 23.Lihatlah baik-baik di halaman Google resmi ini .
sumber
Saya melihat banyak perbedaan
compiledSdkVersion
dalam jawaban sebelumnya, jadi saya akan mencoba sedikit menjelaskan di sini, mengikuti halaman web android.A - Apa yang dikatakan Android
Menurut https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :
Jadi, ini adalah urutan yang benar menurut Android:
compiledSdkVersion = minSdkVersion <= targetSdkVersion
B - Apa yang orang lain katakan
Beberapa orang lebih suka untuk selalu menggunakan compileSkdVersion tertinggi yang tersedia. Itu karena mereka akan bergantung pada petunjuk kode untuk memeriksa apakah mereka menggunakan fitur API yang lebih baru daripada minSdkVersion, sehingga mengubah kode untuk tidak menggunakannya atau memeriksa versi API pengguna saat runtime untuk menggunakannya secara kondisional dengan fallback untuk versi API yang lebih lama.
Petunjuk tentang penggunaan yang sudah usang juga akan muncul dalam kode, memberi tahu Anda bahwa ada sesuatu yang sudah tidak digunakan lagi di tingkat API yang lebih baru, sehingga Anda dapat bereaksi sesuai dengan itu jika Anda mau.
Jadi, ini akan menjadi urutan yang benar menurut yang lain:
minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)
Apa yang harus dilakukan?
Itu tergantung pada Anda dan aplikasi Anda.
Jika Anda berencana untuk menawarkan fitur API yang berbeda sesuai dengan tingkat API pengguna saat runtime, gunakan opsi B. Anda akan mendapatkan petunjuk tentang fitur yang Anda gunakan saat pengkodean. Pastikan Anda tidak pernah menggunakan fitur API yang lebih baru daripada minSdkVersion tanpa memeriksa level API pengguna saat runtime, jika tidak aplikasi Anda akan macet. Pendekatan ini juga memiliki manfaat mempelajari apa yang baru dan apa yang lama saat coding.
Jika Anda sudah tahu apa yang baru atau lama dan Anda sedang mengembangkan aplikasi satu kali yang pasti tidak akan pernah diperbarui, atau Anda yakin tidak akan menawarkan fitur API baru secara kondisional, maka gunakan opsi A. Anda tidak akan terganggu dengan petunjuk yang sudah usang dan Anda tidak akan pernah dapat menggunakan fitur API yang lebih baru bahkan jika Anda tergoda untuk melakukannya.
sumber
<uses-sdk>
dokumentasi sangat kabur dan ambigu.2 sen saya: Kompilasi dengan versi SDK mana pun tetapi berhati-hatilah untuk tidak memanggil API apa pun yang "versi SDK minimum" Anda tidak mendukung. Itu berarti Anda "bisa" mengkompilasi versi SDK terbaru.
Adapun "versi target" itu hanya merujuk pada apa yang Anda rencanakan untuk menargetkan di tempat pertama dan mungkin telah diuji terhadap. Jika Anda belum melakukan uji tuntas, maka ini adalah cara untuk memberi tahu Android bahwa ia perlu melakukan beberapa pemeriksaan tambahan sebelum menyebarkannya, katakanlah aplikasi bertarget "Lollipop" di "Oreo".
Jadi "versi target" jelas tidak lebih rendah dari "versi SDK minimum" Anda tetapi tidak lebih tinggi dari "versi kompilasi" Anda.
sumber
Tidak menjawab pertanyaan langsung Anda, karena sudah ada banyak jawaban terperinci, tetapi perlu disebutkan, bahwa bertentangan dengan dokumentasi Android, Android Studio menyarankan untuk menggunakan versi yang sama untuk
compileSDKVersion
dantargetSDKVersion
.sumber
compiledSdkVersion ==> versi SDK mana yang harus mengkompilasi kode Andadengan bytecode (digunakan dalam lingkungan pengembangan) titik: lebih baik menggunakan versi terakhir SDK.
minSdkVersion ==> penggunaan item ini untuk pemasangan APK (digunakan di lingkungan produksi). Sebagai contoh:
sumber
Ringkasan cepat:
Untuk minSDKversion, lihat entri terbaru di pegangan twitter: https://twitter.com/minSdkVersion
TargetSDKversion: lihat entri terbaru di pegangan twitter: https://twitter.com/targtSdkVersion atau gunakan level API terbaru seperti yang ditunjukkan pada devel https://developer.android.com/guide/topics/manifest/uses-sdk-element. html
Versi yang dikompilasi: membuatnya sama dengan TargetSDKversion
maxSdkVersion: saran dari Android adalah untuk tidak mengatur ini karena Anda tidak ingin membatasi aplikasi Anda untuk tidak tampil di rilis android masa depan
sumber
Pengaturan Aplikasi properti proyek Android di Visual Studio 2017 (15.8.5) menggabungkan mereka:
sumber