Pembaruan 3. KOTLIN SEKARANG DIDUKUNG SECARA RESMI UNTUK PENGEMBANGAN ANDROID . OLEH GOOGLE. YAAAAAAAAS!
Pembaruan 2 : Sepertinya JetBrains benar-benar berkomitmen untuk mendukung Kotlin untuk Android dalam jangka panjang . Saya adalah pengguna kotlin yang bahagia :).
Update : Hadi Hariri, dari JetBrains, menyebutkan bahwa mereka akan merilis beberapa info tentang topik ini . Saya akan memperbarui posting ini setelah mereka melakukannya.
=== HAL-HAL YANG TIDAK BERLAKU BERIKUTNYA ===
Google baru saja merilis pratinjau untuk Android N mendatang dengan beberapa fitur menarik, yang paling menonjol adalah dukungan bahasa Java 8 parsial . Ini dimungkinkan karena toolchain Jack baru yang sedang dikerjakan Google.
Toolchain saat ini menggunakan javac atau kotlinc :
javac ( .java
-> .class
) -> dx ( .class
-> .dex
)
kotlinc ( .kt
-> .class
) -> dx ( .class
-> .dex
)
Toolchain Jack Baru:
Jack ( .java
-> .jack
-> .dex
)
Saya berasumsi Google akan mendorong ke depan untuk menjadikan Jack sebagai rantai alat default untuk pengembangan Android. Pembaruan: Jack sekarang tidak digunakan lagi . Yas.
Pertanyaan saya adalah bagaimana toolchain baru ini akan mempengaruhi saya, di masa depan, sebagai pengguna kotlin untuk pengembangan Android? Apakah saya akan "terjebak di masa lalu"?
sumber
Jawaban:
disclaimer: Saya menangani Jack
Ini tidak akan mempengaruhi Anda. Kompiler Kotlin menghasilkan bytecode Java 6, yang dapat diimpor oleh Jack / Jill dengan baik.
sumber
@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:
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:
sumber
Google tidak akan mendorong Jack sebagai alat default, tetapi
Jack and Jill
.Kompilasi file .class ke dex dengan Jill akan tetap ada. Jika tidak, Anda dapat mengucapkan selamat tinggal pada perpustakaan jar / aar.
Apakah Jack atau Jill akan lebih lambat masih diperdebatkan. Tim Android berharap jack akan lebih cepat daripada proses build saat ini, tetapi bukan itu masalahnya saat ini
Selain itu, Jack dan Dex tersedia di tempat terbuka, tidak ada yang mencegah tim kotlin menulis alat yang mengeluarkan file .jack atau .dex dari kotlin source code.
sumber
PEMBARUAN (03/16/2017)
Untungnya, Jack sudah mati sehingga tidak akan memengaruhi developer Kotlin.
Jika Jack adalah masa depan maka Anda akan terjebak di masa lalu dengan Kotlin. Saat ini Jack tidak mendukung plugin yang dapat mengkompilasi sumber non-Java menjadi bytecode Dalvik. Dan bahkan jika itu terjadi, JetBrains perlu menambahkan backend baru ke compiler Kotlin yang bukan merupakan tugas yang sepele. Jadi Anda harus menggunakan Kotlin dengan Jill dan itu akan menjadi sesuatu yang sangat mirip dengan toolchain yang Anda gunakan sekarang.
Seperti yang Anda lihat pada gambar di bawah ini meskipun tidak mungkin untuk mematikan Jack secara eksplisit, Anda masih dapat mengubah proyek menjadi proyek perpustakaan untuk menggunakan Jill. Dan proyek aplikasi hanya akan mereferensikan proyek perpustakaan ini.
Satu-satunya cara saya melihat bagaimana Kotlin dapat bekerja dengan Jack, yang mungkin tidak akan diterapkan, adalah menambahkan backend Java ke kompilator Kotlin, yaitu backend yang menghasilkan kode Java seperti Xtend . Dalam kasus ini, kode yang dihasilkan oleh compiler Kotlin dapat diproses oleh Jack sebagai kode Java lainnya.
Tetapi saat ini kami tidak tahu persis apa yang akan didukung Jack ketika dirilis. Mungkin sesuatu akan berubah secara dramatis dan menambahkan dukungan Kotlin ke Jack akan menjadi mungkin.
sumber
Seperti yang dikatakan dalam posting blog ( Kotlin's Android Roadmap ) yang muncul hari ini:
Jadi Kotlin pada akhirnya akan mendukung Jack & Jill dan mendapatkan keuntungan darinya.
sumber
Sesuai pengumuman google terbaru -
Jadi kita tidak perlu khawatir tentang jack toolchain menjadi toolchain default untuk pengembangan android. Anda dapat terus menggunakan kotlin atau menggunakan seperangkat alat javac / dx normal.
Sumber: Dukungan Fitur Bahasa Java 8 Masa Depan di Android
sumber
Saya sudah menemukan entri blog ini dari blog resmi Kotlin:: Peta Jalan Android Kotlin
Di sana Anda akan menemukan bagian yang mengatakan bahwa:
Jadi seperti yang dikatakan @LukasBergstrom, tidak akan ada masalah dengan "macet di masa lalu" ;-)
Anda juga dapat memeriksa
Reddit
diskusi yang terkait dengan topik ini: Bagaimana status Kotlin dengan Jack dan Jill?Selamat membuat kode.
sumber
Menurut blog Kotlin , rilis 1.1-beta2 bagian Fitur Baru:
sumber