Saya telah membaca beberapa artikel tentang adopsi baru Gradle sebagai sistem build standar untuk aplikasi Android. Nah, berasal dari pengembangan Java standar saya biasanya bergantung pada file jar untuk membangun proyek saya. Namun tampaknya Android juga memiliki paket aar , yang setara dengan file dll di OS Windows, seperti yang disebutkan di sini :
Pertama, Anda harus menyadari bahwa platform Android tidak memungkinkan "pustaka bersama" tingkat aplikasi. Dalam platform bahasa pemrograman "tradisional", C, C ++, Java, sebut saja, kami memiliki mekanisme berbagi pustaka runtime ini. (Misalnya, DLL pada Windows, DSO pada Unix, Jar pada JVM, dll.). Di Android, bagaimanapun, Anda tidak dapat melakukan itu, kecuali jika Anda adalah Google atau produsen handset (Lihat Catatan Kaki 1 di bawah). Sebagai pengembang aplikasi, ini bisa menjadi batasan mendasar. "Berbagi" atau "menggunakan kembali" kode, baik pada waktu membangun dan waktu berjalan, adalah bagian yang sangat penting dari praktik rekayasa perangkat lunak. Ini agak sulit (bukan tidak mungkin, hanya lebih sulit) di Android karena keterbatasan yang disebutkan di atas.
Namun, saya ragu dengan konsep ini. Maksudku, ketika harus pengembang akan tertarik termasuk aar dependensi dalam penerapannya? Apakah ketergantungan ini diperketat ke beberapa versi minimum SDK?
Misalnya, dalam satu proyek saya mengakses port COM, yang saya gunakan NDK dikompilasi .so perpustakaan untuk. Apakah saya harus membuat aar jika saya ingin membagikan utilitas ini?
Pernyataan " Perbedaan utama antara Jar dan AAR adalah bahwa AAR termasuk sumber daya seperti tata letak, drawables dll. " Tidak sesuai dengan spesifikasi file JAR dan karenanya bukan kebenaran. Menurut spesifikasi file JAR :
Seperti yang Anda lihat, tidak ada batasan konten yang melarang termasuk sumber daya seperti tata letak, gambar dll. Dalam file JAR. Untuk detail lebih lanjut lihat artikel 5.3 "Pembuatan dan Memuat" Spesifikasi Mesin Virtual Java®.
Jadi pada pertanyaan Android Archive Library (aar) vs jar standar. Jawabannya tergantung pada alat build apa yang Anda gunakan.
Jika Anda menggunakan Android Studio sebagai alat bangun (masing-masing sebagai pengelola proyek), Anda lebih baik menggunakan file * .ar untuk berbagi sumber daya enkapsulasi antara proyek Android. Format file AAR adalah bagian dari Android Studio build dan seperti yang dikomentari di komentar lain di sini antarmuka penggunanya mendukung format aar untuk Android Libraries.
Tetapi kecuali Android Studio, seluruh dunia tidak tahu apa itu file aar (artefak). Misalnya, jika Android build Anda didasarkan pada Maven, file pilihan untuk berbagi sumber daya akan menjadi jar karena itu adalah artefak proyek java Maven asli dan tidak ada batasan apa yang akan dimasukkan ke dalam file jar standar. Selain itu, ada cara untuk menjelaskan Maven format file apa pun, termasuk aar dengan menggunakan peningkatan siklus hidup dengan komponen baru. Contoh sederhana tersedia di sini. Bagaimana cara membuat jenis kemasan baru untuk Maven?
sumber
Kutipan dalam pertanyaan tidak memiliki kesamaan dengan kenyataan saat ini. Tentu saja dimungkinkan untuk menggunakan perpustakaan eksternal di Android dan ada banyak perpustakaan yang tersedia. Mungkin mereka ingin mengatakan bahwa setiap aplikasi harus membundel semua pustaka yang dibutuhkan, tetapi menggunakan kembali pustaka pada saat build (static linking) benar-benar tidak menjadi masalah.
.aar
berbeda dari.jar
tidak lebih dari.jar
berbeda dari.zip
. Ini memiliki konsep-konsep tertentu tentang jenis konten yang harus diharapkan di sana, tetapi keduanya.jar
dan.aar
paling sering berisi kelas yang dikompilasi dan sumber dayanya..aar
hanya menetapkan bahwa pustaka itu spesifik untuk Android dan memiliki beberapa struktur yang diharapkan, masuk akal untuk pustaka semacam itu (well,.jar
juga memiliki beberapa struktur yang diharapkan).Pandangan bahwa .aar hanya didukung oleh Android studio juga sudah usang. Perpustakaan seperti itu dapat digunakan untuk Maven Central, dan alat-alat seperti gradle dapat merujuk mereka menggunakan akhiran @aar, misalnya:
untuk referensi penyebaran pusat Maven ini .
sumber