Tingkat API Android, kompatibilitas mundur dan maju

Selamat malam teman Kami telah menyiapkan terjemahan yang bermanfaat untuk siswa masa depan Pengembang Android. Kursus Lanjutan . " Kami senang membagikan materi ini dengan Anda.




Jika Anda membaca artikel ini, itu berarti Anda mungkin tertarik pada hal-hal seperti:

  • Apa arti level API?
  • Bagaimana cara menggunakan compileSdkVersion , minSdkVersion atau targetSdkVersion ?
  • Bagaimana saya bisa menjamin bahwa aplikasi akan bekerja dengan benar pada perangkat dengan versi OS yang berbeda?



Semua konsep ini saling terkait satu sama lain, dan saya akan mencoba menjelaskannya kepada Anda dalam artikel ini dengan cara yang sederhana namun efektif.

Untuk melakukan ini, Anda perlu memahami perbedaan antara SDK dan API dan mengetahui apa level API dalam ekosistem Android.

Memang benar bahwa di Android ada hubungan 1: 1 antara SDK dan API, dan seringkali kedua istilah ini digunakan secara sinonim, tetapi penting untuk dipahami bahwa ini bukan hal yang sama.

Lebih tepat untuk mengatakan bahwa untuk setiap versi Android ada SDK dan API yang setara, serta tingkat API ini.

SDK


Itu singkatan dari Software Development Kit . Perhatikan kata "kit" (kit) ... itu hanya terdiri dari satu set berbagai alat, perpustakaan, dokumentasi, contoh yang membantu pengembang membuat, men-debug dan menjalankan aplikasi Android. API disediakan dengan SDK.

Jika Anda membuka SDK Manager di Android Studio, Anda dapat melihat lebih jelas tentang apa yang terdiri dari SDK Android.

Tab pertama dari Platform SDK mencantumkan SDK dari setiap versi Android.

Seperti yang ditunjukkan pada gambar di bawah, Android 9.0 SDK (juga dikenal sebagai Pie) mengandung:

  • Android SDK Platform 28 (ini adalah kerangka API ).
  • Kode sumber untuk Android 28 (ini adalah implementasi dari API, seperti yang Anda lihat, itu opsional ... ingat ini).
  • dan banyak hal lainnya ... misalnya, berbagai gambar sistem untuk emulator Android.


Gambaran umum SDK di Android Studio SDK Manager.

Tab kedua dari Alat SDK menunjukkan alat lain yang juga merupakan bagian dari SDK tetapi tidak tergantung pada versi platform. Ini berarti bahwa mereka dapat dirilis atau diperbarui secara terpisah.

API


Singkatan dari Application Programming Interface . Ini hanya sebuah antarmuka, lapisan abstraksi yang menyediakan tautan antara dua β€œbagian” perangkat lunak yang berbeda. Ini berfungsi seperti kontrak antara penyedia (misalnya, perpustakaan) dan konsumen (misalnya, aplikasi).

Ini adalah sekumpulan definisi formal, seperti kelas, metode, fungsi, modul, konstanta, yang dapat digunakan oleh pengembang lain untuk menulis kode mereka. Namun, API tidak termasuk implementasi.

Tingkat API


Level API adalah nilai integer yang secara unik mengidentifikasi versi kerangka API yang ditawarkan oleh platform Android.

Biasanya, pembaruan kerangka kerja platform dirancang agar versi baru API tetap kompatibel dengan versi sebelumnya, sehingga sebagian besar perubahan pada API baru bersifat aditif, dan bagian lama API menjadi usang tetapi tidak dihapus.

Dan sekarang seseorang mungkin bertanya-tanya ...

jika Android API tidak menyediakan implementasi, dan SDK Manager menawarkan kode sumber API yang dapat diunduh opsional sebagai bagian dari SDK, lalu di mana implementasi yang sesuai?

Jawabannya sederhana. Di perangkat.

Mari kita cari tahu ...

Dari kode sumber ke file APK


Biasanya, proyek Android terdiri dari kode yang ditulis oleh pengembang menggunakan API Android (modul aplikasi), serta beberapa perpustakaan / dependensi lainnya (file .jar, AAR, modul, dll.) Dan sumber daya.

Proses kompilasi mengkonversi kode yang ditulis dalam Java atau Kotlin, termasuk dependensi (salah satu alasan untuk mengurangi kode Anda!), Into DEX bytecode, dan kemudian kompres semuanya menjadi file APK bersama dengan sumber daya. Pada tahap ini, implementasi API tidak termasuk dalam APK final!


Proses Pembuatan - Pengembang Android

File DEX dan Android Runtime



Arsitektur Android - Pengembang Android

Android Runtime adalah tempat di mana semua pekerjaan kotor dilakukan dan di mana file DEX dijalankan. Ini terdiri dari dua komponen utama:

  • Mesin virtual untuk memanfaatkan portabilitas kode dan kemandirian platform. Dimulai dengan Android 5.0 (Lollipop), runtime yang lama, Dalvik Virtual Machine, telah sepenuhnya digantikan oleh Android RunTime (ART) yang baru. Dalvik menggunakan kompiler JIT, sementara ART menggunakan kompilasi AOT (Ahead of time) plus JIT untuk profil kode saat runtime.
  • Pustaka dasar adalah pustaka Java dan Android standar. Sederhananya, ini adalah tempat implementasi API berada.

Versi API yang tersedia di level ini sesuai dengan versi platform Android tempat aplikasi tersebut berjalan.
Misalnya, jika Android 9 (Pai) diinstal pada perangkat yang sebenarnya, semua API hingga level 28 tersedia.

Jika Anda memahami poin-poin kunci dari Android Runtime dan apa peran API itu, maka seharusnya mudah untuk memahami kompatibilitas mundur dan maju , serta penggunaan compileSdkVersion , minSdkVersion , dan targetSdkVersion .

compileSdkVersion


Nilai ini hanya digunakan untuk memberi tahu Gradle versi SDK yang akan dikompilasi dengan aplikasi Anda. Ini memungkinkan pengembang untuk mengakses semua API yang tersedia hingga tingkat API yang ditetapkan untuk compileSdkVersion .

Kompilasi dengan SDK terbaru sangat disarankan:

  • API tingkat tinggi memungkinkan pengembang untuk memanfaatkan API terbaru dan peluang yang disediakan oleh platform baru.
  • Untuk menggunakan versi terbaru dari compileSdkVersion , compileSdkVersion harus cocok dengan versi SupportLibrary .

Misalnya, untuk menggunakan SupportLibrary-28.xx , compileSdkVersion juga harus 28.

  • Untuk beralih ke AndroidX atau menggunakannya, compileSdkVersion harus diatur setidaknya 28.
  • untuk siap memenuhi persyaratan level API target dari Google Play . Google mengumumkan bahwa setiap tahun akan menetapkan level target API minimum untuk aplikasi baru dan pembaruan untuk menyebarkan versi Android baru ke pasar Google lebih cepat. Anda dapat menemukan informasi lebih lanjut di sini dan di sini .

Aplikasi Android kompatibel dengan versi baru platform Android, karena perubahan pada API biasanya bersifat tambahan, dan API lama mungkin menjadi usang, tetapi tidak dihapus.

Ini berarti bahwa kompatibilitas langsung dijamin oleh platform, dan ketika Anda menjalankan aplikasi pada perangkat dengan tingkat API yang lebih tinggi daripada yang ditentukan dalam compileSdkVersion , tidak ada masalah saat runtime, aplikasi akan berfungsi seperti yang diharapkan pada versi platform yang lebih baru.

Sebagai contoh:

Aplikasi + compileSdkVersion = 26 dan metode API xyz() , yang diperkenalkan di API level 26 , dapat bekerja pada perangkat dengan Android 8 Oreo (API level 26).

Aplikasi yang sama dapat berfungsi pada perangkat dengan Android 9 Pie (API level 28), karena metode API xyz() masih tersedia di API level 28.

minSdkVersion


Nilai ini menunjukkan level API minimum tempat aplikasi dapat berjalan. Ini adalah persyaratan minimum. Jika tidak ditentukan, nilai default adalah 1 .

Pengembang harus menetapkan nilai yang benar dan memastikan operasi aplikasi yang benar hingga tingkat API ini. Ini disebut kompatibilitas ke belakang .

Selama pengembangan, Lint juga Lint memperingatkan pengembang ketika mereka mencoba menggunakan API apa pun di bawah ini yang ditentukan dalam minSdkVersion . Sangat penting untuk tidak mengabaikan peringatan dan memperbaikinya!

Untuk memastikan kompatibilitas ke belakang , pengembang dapat memeriksa versi platform saat berjalan dan menggunakan API baru di versi platform yang lebih baru dan API lama di versi yang lebih lama atau, tergantung pada kasusnya, menggunakan beberapa perpustakaan statis yang menyediakan kompatibilitas mundur.

Penting juga untuk menyebutkan bahwa Google Play Store menggunakan nilai ini untuk menentukan apakah aplikasi dapat diinstal pada perangkat tertentu dengan membandingkan versi platform perangkat dengan aplikasi minSdkVersion .

Pengembang harus sangat berhati-hati ketika memilih nilai ini, karena kompatibilitas ke belakang tidak dijamin oleh platform.

Memilih nilai "tepat" untuk suatu proyek juga merupakan keputusan bisnis, karena hal itu memengaruhi seberapa besar audiens aplikasi tersebut. Lihatlah distribusi platform .

Sebagai contoh:

Aplikasi + compileSdkVersion = 26 + minSdkVersion = 22 dan metode API xyz() yang diperkenalkan di API level 26 dapat bekerja pada perangkat dengan Android 8 Oreo (API level 26).

Aplikasi yang sama dapat diinstal dan dijalankan pada perangkat yang lebih lama dengan Android 5.1 Lollipop (API level 22), di mana metode API xyz() tidak ada. Jika pengembang tidak memberikan kompatibilitas ke belakang baik melalui pemeriksaan runtime atau melalui pustaka apa pun, maka aplikasi akan macet segera setelah mencoba mengakses metode API xyz() .

targetSdkVersion


Nilai ini menunjukkan tingkat API tempat aplikasi dikembangkan.

Jangan bingung dengan compileSdkVersion . Yang terakhir hanya digunakan pada waktu kompilasi dan membuat API baru tersedia untuk pengembang. Yang pertama, sebaliknya, adalah bagian dari APK (serta minSdkVersion ) dan mengubah perilaku runtime. Ini adalah cara pengembang dapat mengontrol kompatibilitas langsung .

Terkadang mungkin ada beberapa perubahan API di sistem dasar yang dapat memengaruhi perilaku aplikasi saat bekerja di lingkungan runtime baru.

Level aplikasi target termasuk perilaku runtime yang spesifik untuk versi platform. Jika aplikasi tidak siap untuk mendukung perubahan ini pada perilaku runtime, kemungkinan akan gagal.

Contoh sederhana adalah Izin Runtime , yang diperkenalkan di Android 6 Marshmallow (API level 23).

Aplikasi dapat dikompilasi menggunakan API level 23, tetapi memiliki API level 22 target jika belum siap untuk mendukung model izin runtime baru.

Dengan demikian, aplikasi masih dapat kompatibel tanpa menyertakan perilaku runtime baru.

Bagaimanapun, sebagaimana telah disebutkan, Google membutuhkan aplikasi untuk memenuhi persyaratan baru tingkat API target, jadi Anda harus selalu memiliki prioritas tinggi untuk memperbarui nilai ini.

Sekarang dengan menyatukan semuanya, kita melihat hubungan yang jelas

minSdkVersion ≀ targetSdkVersion ≀ compileSdkVersion

Ingatlah bahwa Anda sangat disarankan untuk mengkompilasi dengan level API terbaru dan mencoba menggunakan targetSdkVersion == compileSdkVersion .

Sumber


Source: https://habr.com/ru/post/id466367/


All Articles