Mari Mengenali Dalvik!

Mari Mengenali Dalvik!

Diterbitkan pada November 2, 2013 oleh .

Android sering dikaitkan oleh pengguna-pengguna sebagai platform yang kurang laju, sentiasa mengalami lengah masa, dan kerap hang. Tibalah masanya untuk pengguna mengetahui apakah faktor yang menyebabkan prestasi Android tidak secekap iOS atau Windows Phone.

Android ni, apa sebenarnya?

Android merupakan sistem operasi untuk peranti skrin sentuh, dan dibina berdasarkan kernel Linux. Android diasaskan pada Oktober 2003 oleh Andy Rubin, Rich Miner, Nick Sears, dan Chris White dengan niat asalnya untuk membina sebuah sistem operasi bagi kamera digital. Setelah menyedari pasaran untuk kamera digital tidak begitu luas, pasukan pembangunnya memutuskan supaya Android ini dibina untuk telefon bimbit, sebagai saingan kepada Symbian dan Windows Mobile (ketika ini iPhone masih lagi belum diumumkan). Projek ini kemudiannya mendapat sokongan kewangan dari Google sehinggalah Google memutuskan untuk membelinya pada 2005, dan pada tahun 2007 Android diumumkan. Telefon pertama yang dikuasakan oleh Android berada di pasaran pada Oktober 2008, kira-kira 5 tahun selepas projek ini diasaskan.

Matlamat utama Android ialah untuk membina satu sistem operasi yang terbuka untuk telefon pintar, dengan memberikan akses terbuka kepada mana-mana syarikat dan pembangun untuk membangunkannya pada device mereka sendiri (seperti HTC, Samsung, Sony dan sebagainya).

Falsafah disebalik pembinaan Android ialah ia memfokuskan peranti yang mempunyai kekangan spesifikasi: pemprosesan ARM, RAM 128MB, storan Mini atau MicroSD, kamera CMOS 2MP, Bluetooth versi 1.2 atau 2.0 serta antaramuka USB-mini. Kebanyakan peranti yang berada di pasaran ketika ini mempunyai spesifikasi yang jauh lebih berkuasa, tetapi dengan menyatakan spesifikasi yang disebutkan tadi ia menunjukkan bahawa Android menyasarkan lingkungan peranti yang pelbagai; device yang berkuasa rendah sehinggalah peranti yang berkuasa tinggi.

Kejap.. maksudnya Android ni kalau dia nak berfungsi, bagi kat dia device yang CPU slow dan RAM sikit, still dia boleh jalan (contoh mudah, Galaxy Y). Lepas tuh Android ni nak bagi kat semua orang pakai, sebab tuh dia ni hadir sebagai sumber terbuka supaya mana-mana pihak boleh mengambil sistem operasi Android ini, dan implementasikan ia di dalam peranti keluaran mereka, disamping mengubah fungsi dan paparannya sesuka hati. Gitu?

Yerp, betul. Kemudian, terdapat satu lagi yang menjadi perhatian pembangun Android ini, dan isu ini agak teknikal: soal keselamatan. Memandangkan Android ini dibina dengan falsafah sumber terbuka, maka pembangun-pembangun aplikasi bebas untuk melakukan apa sahaja – mencipta ribuan aplikasi untuk pengguna memuat-turun dan menjalankannya pada peranti masing-masing. Untuk memastikan keselamatan setiap applikasi serta teras Android itu sendiri (iaitu kernel Linux), semua aplikasi mestilah diasingkan (sandbox) daripada aplikasi yang lain dan tidak boleh mengganggu urusan kernel.

Dalam bahasa yang mudah, Android itu mestilah dapat menyokong peranti yang mempunyai lingkungan spesifikasi yang pelbagai, serta mempunyai ciri-ciri keselamatan. Jadi, bagaimanakah Google menyelesaikan masalah ini?

Reka Bentuk Android: Memperkenalkan, Dalvik!

Wipe Dalvik Cache

Pengguna peranti Android yang pernah main tukar-tukar ROM semestinya pernah berjumpa dengan Dalvik…

Setelah anda kenal apa dia Dalvik dan fungsinya, anda akan faham kenapa prestasi Android kurang cekap sedikit berbanding dengan platform seperti iOS atau Windows Phone. Sebagai permulaan kepada penjelasan mengenai Dalvik, perkara pertama yang anda boleh jangkakan ketika ini ialah hadirnya Dalvik untuk menyelesaikan masalah yang dinyatakan sebentar tadi.

Dalvik Ialah Virtual Machine

Carta : Kernel & ProsesBersumberkan Wikipedia, dijelaskan di sini bahawa Dalvik merupakan proses virtual machine. Fungsinya ialah untuk mengasingkan aplikasi dengan memperuntukkan setiap satu aplikasi yang dijalankan pada Android satu ‘bekas’. Implementasi virtual machine ini menyelesaikan satu masalah iaitu soal keselamatan. Memandangkan setiap aplikasi diberikan ‘bekas’ miliknya sendiri (dipanggil sebagai instance) untuk ia berjalan, maka aplikasi tersebut tidak akan mengganggu proses aplikasi lain, pada masa yang sama ia tidak akan mengganggu urusan kernel.

Jika dikaji dengan lebih mendalam lagi, sekuriti dalam sistem operasi Android amat ampuh. Kernel Linux itu sendiri sudah mempunyai model sekuriti yang tinggi, antaranya melibatkan users dan permissions. Sebagai contoh, fail yang dimiliki oleh program Apache HTTPd (Apache di sini ialah user) hanya boleh dibaca dan ditulis oleh Apache sahaja. Pada sistem operasi Android, secara default, setiap aplikasi diperuntukkan satu user. Apabila aplikasi itu dijalankan, ia hanya dapat mengakses fail miliknya sahaja dan tidak boleh mengakses fail milik aplikasi lain.

Dalvik dan Java

Google memilih Java sebagai bahasa pengaturcaraan untuk membina aplikasi Android?

Meme - Java SlowKejap laa, tak habis explain lagi ni. Google memilih Java untuk bahasa pengaturcaraan kerana umum mengetahui Java merupakan bahasa yang elegan; “write once, run everywhere”. Google memilih untuk tidak menggunakan JME dan JVM, tetapi beralih kepada teknologi lain iaitu – Dalvik. David Ehringer menulis dalam jurnal The Dalvik Virtual Machine dengan menyatakan:

While Google has selected Java as the language for developing Android applications, it has chosen to abandon both JME and the JVM in favor of an alternative deployment target, the Dalvik virtual machine. Google has also chosen to use an alternative and limited implementation of the standard Java libraries. Both of these are non-standard Java, and effectively represent forking of the Java platform

Jadi, adakah Java ini lembap?

Saya berani mengatakan Java sedikit perlahan berbanding implementasi bahasa lain seperti Objective-C (bahasa ini digunakan pada aplikasi iOS). Kepada anda yang suka memuat-turun pelbagai jenis fail dari laman hos percuma (seperti RapidShare, Freakshare, UploadTo), mesti anda pernah guna jDownloader kan? jDownloader ni ditulis dalam bahasa pengaturcaraan Java. Pernah guna Internet Download Manager (IDM)? Cuba bandingkan mana lagi smooth; jDownloader, atau IDM? Harapnya gambaran yang ringkas (tapi agak kurang tepat) ini boleh membantu.

Dalvik, dan Prestasinya

Seperti yang saya tulis di atas, Dalvik menggunakan piawaian yang berlainan dengan apa yang biasa digunakan pada JVM. Dalvik dibina supaya boleh mengendalikan banyak instance pada satu-satu masa. Dalvik menggunakan struktur register-based, berlainan dengan kelaziman JVM yang menggunakan stack-based. Saya agak keberatan untuk menulis perbezaan antara register-based dan stack-based, cukuplah anda faham register-based ini digunakan oleh Dalvik untuk menjimatkan penggunaan memori (RAM). Dalam aspek yang lain pula, Java menjalankan fail .jar, manakala Dalvik menjalankan fail .dex. Kedua-duanya lebih kurang sama (ditulis dalam bahasa Java) namun yang membezakan ialah fail .dex telah dioptimasikan untuk mengurangkan penggunaan RAM.

Jadi, Dalvik ini menggunakan struktur register-based dan menjalankan fail .dex kerana nak menjimatkan penggunaan RAM? Ya, betul. Untuk menjamin prestasi Dalvik, kedua-dua modifikasi ini adalah perlu. Sebab itu Google memilih untuk menggunakan Dalvik berbanding JVM.

Apa kaitan Dalvik dengan kernel Linux?

Pengkhususan kerja bagi Dalvik ialah sektor aplikasi. Dalvik tidak boleh mengawal hardware seperti kamera, pemacu Bluetooth, pemacu WiFi dan lain-lain. Dalvik hanya boleh menghantar isyarat kepada kernel, kemudian kernel yang akan melaksanakan arahan tersebut.

Android System Architecture

Ringkasnya, bayangkan aplikasi seperti Instagram nak pakai kamera. Jadi, Instagram bagitahu kepada Dalvik untuk meminta Dalvik terjemahkan bahasa Java kepada binary. Kemudian Dalvik bagitahu kernel yang Instagram ingin menggunakan kamera.

Mekanisma Dalvik

Tiba lah bahagian yang menarik. Pada bahagian ini kita akan belajar khususnya bagaimana Dalvik berfungsi.

Carta - Workflow

Aplikasi yang ditulis untuk Android (sebagai contoh, Twitter) di-compile dalam bentuk fail .apk yang mengandungi fail .dex di dalamnya. Saya ingatkan sekali lagi aplikasi Android ditulis dalam bahasa Java, dan ia perlu melalui Dalvik terlebih dahulu sebelum diterjemahkan ke dalam binary. Dalvik kemudiannya akan berkomunikasi dengan Kernel bagi untuk menggunakan hardware tertentu. Setelah hardware faham apa yang aplikasi tersebut mahukan, ia akan menghantar isyarat kepada hardware yang tertentu.

Dengan menggunakan Twitter sebagai contoh, Dalvik ‘membaca’ aplikasi Twitter berkenaan. Ketika pengguna menekan ’Tweet’, Dalvik akan menterjemahkan permintaan tersebut. Untuk tweet tersebut dipaparkan di internet, maka aplikasi tersebut memerlukan akses kepada internet (dalam kes ni, saya andaikan pengguna tersebut menggunakan WiFi). Dalvik kemudiannya bagitahu kepada Kernel untuk menggunakan WiFi. Kernel meluluskan permintaan tersebut, lalu dihantarlah satu tweet ke internet.

Mekanisma dia mudah, kan?

[Teknikal] Bagaimana Android, dan aplikasi Android Diaktifkan?

Dalvik bekerja dengan bantuan satu lagi entiti yang dinamakan sebagai Zygote. Sebagaimana kelaziman setiap sistem operasi Linux, terdapat satu entiti yang dinamakan sebagai init. Ketika peranti Android dihidupkan kernel memanggil init, kemudian init akan menghidupkan processes atau unit seperti screen, speaker dan mana-mana unit yang berkaitan. Pada ketika ini, init juga menghidupkan Zygote.

Setelah Zygote aktif, ia akan menghidupkan Dalvik dan memuatkan Java read-only core library classes. Library classes yang dihidupkan ini merupakan sumber yang dikongsi (shared resources) oleh semua aplikasi Android. Pada masa yang sama, Zygote menghidupkan satu instance kosong. Apabila proses memuatkan keseluruhan sistem operasi selesai, Zygote akan menunggu sebarang permintaan daripada aplikasi. Apabila satu aplikasi Android meminta satu unit instance, Zygote membuat penklonan daripada instance yang kosong tadi bagi mencipta satu instance untuk aplikasi tersebut.

Pernah main Oracle VM Virtualbox tak? Untuk menghidupkan sistem operasi pada Virtualbox, ada 2 cara boleh digunakan iaitu menghidupkan sistem operasi menggunakan disk image (fail .iso), ataupun menggunakan virtual machine disk (fail .vmdk). Kalau pakai image file, samalah seperti cold boot sistem operasi tersebut, agak lambat. Kalau pakai fail vm disk, sistem operasi terus masuk ke desktop ataupun last active state. Zygote ini menggunakan implementasi vm disk untuk memastikan sistem operasi lebih responsif untuk mengaktifkan aplikasi.

Android dan Platform Pesaing

Tidak dinafikan bahawa Android agak perlahan sedikit prestasinya jika dibandingkan dengan platform pesaing seperti iOS atau Windows Phone. Analogi ringkas di bawah akan menjelaskan mengapa berlakunya perkara sedemikian.

Mana Lagi Cepat Masak?

Dalam analogi ini, andaikan kuali tersebut sebagai Dalvik. Api daripada dapur memasak itu perlu melalui kuali terlebih dahulu sebelum sampai kepada lauk. Ibaratnya kuali itu merupakan ‘perterjemah’, yang menterjemahkan haba kepada lauk. Pada ekosistem iOS pula ibaratnya memasak dengan memanggang. Lauk yang hendak dipanggang berkenaan mendapat akses terus kepada haba tanpa medium.

Kuali perlu dipanaskan dulu sebelum memasak. Lepas kuali dah panas, baru boleh masak lauk. Maksudnya di di sini, resource seperti RAM dan CPU digunakan untuk mengaktifkan Dalvik (dan Zygote), kemudian barulah resource tersebut boleh digunakan oleh aplikasi.

Android Dan Kepelbagaian

“Ok dah faham. Saya ni iFag, boleh tak saya kutuk Androidfag kaw-kaw sebab depa slow, kena pakai kuali baru jalan”

Tak boleh.

Android cemerlang pada bidang yang tidak mampu dikejar oleh iOS, iaitu keupayaan untuk menyesuaikan dirinya pada pelbagai device. Android boleh dipasang pada telefon pintar, laptop (projek Android x86), TV dan tablet. Android boleh dimodifikasi oleh mana-mana pihak tanpa sebarang masalah. Dengan kehadiran Android, lanskap telefon pintar berkembang berkali-kali ganda dengan ketersediaan peranti dalam pelbagai kategori; entry-level (Xperia x10 Mini, Galaxy Y), mid-end (Galaxy W), dan high-end (HTC One). Boleh dikatakan semua orang boleh merasai apa itu telefon pintar walaupun duit tak sampai RM2k.

Dah lah semua orang boleh pakai, boleh main tukar-tukar ROM pulak tuh. Bukan setakat boleh main tukar-tukar ROM, nak buat ROM sendiri pun boleh.

Android melakukan pengorbanan dari segi prestasi untuk membolehkan semua orang merasai apa itu smartphone. Ini merupakan satu niat yang sangat murni. Tidak perlulah berkira sangat kalau telefon pintar Android anda kurang responsif, sekurang-kurangnya ramai orang boleh pakai telefon yang canggih.

Untuk pengetahuan tambahan anda, kebanyakan smartpone Android agak kurang responsif dari segi prestasi adalah disebabkan boleh bloatwares yang sudah dipramuatkan (preinstalled apps). Sebagai contoh pada telefon keluaran Samsung, sudah ada beberapa aplikasi dipasang oleh pengilang seperti Samsung Apps, ChatOn dan lain-lain (anda boleh semak sendiri). Mengikut pengalaman sebahagian pengguna, selepas bertukar daripada menggunakan Stock ROM kepada CyanogenMod, prestasi telefon meningkat berkali ganda berbanding sebelumnya. Satu lagi contoh, bandingkan Nexus 4 dengan Galaxy S3, anda akan rasa perbezaannya; Nexus 4 yang tiada bloatwares itu lagi responsif.

Penutup

Terima kasih kerana masih lagi setia membaca. Ketika ini anda sudah faham apa itu Dalvik dan mekanisma disebaliknya. Saya ada satu gambar untuk saya kongsikan kepada anda.

bedah siasat dalvik

Gambar daripada pali7x ini adalah folder Dalvik sebelum proses compilation bermula. Saiz kernel pula sebesar 4.9MB (tiada dalam gambar). Gambar di atas merupakan kod sumber Android untuk HTC One X (saiz mungkin berbeza untuk device yang berlainan).

Nota Kaki

  1. JVM = Java Virtual Machine.
  2. Fail .apk ni sebenarnya fail arkib. Anda boleh ekstrak kandungan fail .apk dengan utiliti arkib yang anda ada seperti Winzip ataupun Winrar.
  3. Android kini bukan hanya menyokong ARM. Ia menyokong sistem yang menggunakan MIPS dan x86. Android juga bukan hanya eksklusif untuk peranti skrin sentuh atau telefon pintar, ia juga menyokong peranti seperti media center dan kadang-kadang digunakan pada Raspberry Pi. Apabila Android digunakan untuk non-touchscreen device seperti media center, fungsi skrin-sentuh tersebut boleh dibuang.

Secara ringkas, proses untuk menulis aplikasi Android boleh digambarkan secara berikut:
Android App Write Flow

Artikel ini ditulis oleh Aizan Fahri untuk Amanz. Ikuti beliau di Twitter atau blog peribadi beliau. Jangan lupa baca nota penulis ketika proses menulis artikel ini.


TIPS & ULASAN