@Pavel Dka
Jack - adalah kompiler. Mirip dengan javac, tetapi fungsinya sedikit berbeda:
Seperti yang Anda lihat, Jack mengkompilasi kode sumber Java langsung ke file Dex! Kami tidak lagi memiliki file menengah * .class, jadi alat dx tidak diperlukan!
Tapi tunggu! Bagaimana jika saya menyertakan pustaka pihak ketiga dalam proyek saya (yang datang sebagai kumpulan file .class)?
Dan saat itulah Jill mulai bermain:
Jill dapat memproses file kelas dan mengubahnya menjadi format Jayce khusus yang dapat digunakan sebagai masukan untuk kompiler Jack.
Jadi sekarang mari kita minggir sejenak dan berpikir ... Apa yang akan terjadi pada semua plugin keren yang membuat kita begitu kecanduan? Mereka semua membutuhkan file .class dan kompiler Jack tidak memilikinya lagi ...
Untungnya, Jack menyediakan beberapa fitur penting bagi kami di luar kotak:
- Retrolambda - tidak diperlukan. Jack bisa menangani lambda dengan baik
- Proguard - sekarang sudah dimasukkan ke dalam Jack, jadi Anda masih dapat menggunakan obfuscation dan minimisasi
Keuntungan:
Jack mendukung bahasa pemrograman Java 1.7 dan mengintegrasikan fitur tambahan yang dijelaskan di bawah ini.
Predexing
Saat membuat file pustaka JACK, .dex pustaka dibuat dan disimpan di dalam file pustaka .jack sebagai pre-dex. Saat mengompilasi, JACK menggunakan kembali pre-dex dari setiap library. Semua perpustakaan sudah di-dex.
Kompilasi inkremental
Kompilasi inkremental berarti bahwa hanya komponen yang disentuh sejak kompilasi terakhir, dan dependensinya, yang dikompilasi ulang. Kompilasi inkremental bisa jauh lebih cepat daripada kompilasi lengkap ketika perubahan dibatasi hanya pada sekumpulan komponen yang terbatas.
Mengemas kembali
JACK menggunakan file konfigurasi jarjar untuk melakukan pengemasan ulang.
Dukungan multidex
Karena file dex dibatasi hingga 65 ribu metode, aplikasi dengan lebih dari 65 ribu metode harus dipecah menjadi beberapa file dex. (Lihat 'Membangun Aplikasi dengan Lebih dari 65K Metode' untuk informasi lebih lanjut tentang multidex.)
Kekurangan:
- Transform API tidak didukung oleh Jack - tidak ada bytecode Java perantara yang dapat Anda modifikasi, jadi beberapa plugin yang tidak saya sebutkan di sini akan berhenti berfungsi
- Pemrosesan anotasi saat ini tidak didukung oleh Jack, jadi jika Anda sangat bergantung pada pustaka seperti Dagger, AutoValue, dll., Anda harus berpikir dua kali sebelum beralih ke Jack. EDIT: Seperti yang ditunjukkan oleh Jake Wharton, Jack di N Preview memiliki dukungan pemrosesan anotasi, tetapi belum diekspos melalui Gradle.
- Pendeteksi lint yang beroperasi pada level bytecode Java tidak didukung.
- Jacoco tidak didukung - yah, menurut saya Jacoco patut dipertanyakan (tidak benar-benar menunjukkan apa yang ingin Anda lihat), jadi saya bisa hidup tanpanya
- Dexguard - Proguard versi perusahaan saat ini tidak didukung