หลายคนคงรู้อยู่แล้วว่า Android ก็คือ Linux ประเภทหนึ่ง แต่ในวันนี้เราจะมาทำความเข้าใจ Architecture เบื้องหลังการทำงานตั้งแต่ระดับ Kernel ไปจนถึง Application กัน
Linux kernel
เป็นส่วนที่เป็นพื้นฐานที่สุดของระบบ คอยจัดการการทำงานร่วมกับ Hardware (driver), Networking, การเข้าถึง File system และการจัดการ Process ต่าง ๆ ซึ่งจะมีส่วนสำคัญคือ Binder และ Paranoid networking ซึ่งเดียวเราจะอธิบายในภายหลัง
Hardware abstraction layer (HAL)
เป็น Interface High level ที่เขียนด้วยภาษา Java ประกอบไปด้วย Module ต่่าง ๆ เช่น กล้อง, บลูทูธ
Runtime
Dalvik Virtual Machine (DVM)
เนื่องจากโดยปกติแล้วการพัฒนาด้วยภาษา Java จะถูก Execute โดย Java virtual machine (JVM) แต่เนื่องด้วย mobile device ไม่สามารถรัน java bytecode (.class) ตรง ๆ ได้ จึงต้องทำการเปลี่ยนเป็น Dalvik Executable (DEX) แล้วจึงรันด้วย DVM ซึ่งเป็น Register-based ซึ่งต่างจาก JVM ที่เป็น Stack-based
Android runtime (ART)
ใน Android version ใหม่ ๆ ตั้งแต่ 4.4 Kitkat มีการนำ ART มาใช้ซึ่งสามารถประมวลผล bytecode และไฟล์ .dex ได้ ซึ่งมี performance ที่สูงกว่า DVM เนื่องจากมีการ compile bytecode อีกครั้งนึง ซึ่งต้องแลกมากับการใช้พื้นที่จัดเก็บมากขึ้นเล็กน้อย
Native C/C++ libraries
Core Android system เช่น ART และ HAL ถูกสร้างขึ้นจาก Native code ซึ่งต้องการ native library ที่ต้องเขียนด้วย C/C++ จากนั้นจึงทำการเรียกใช้ผ่าน Java framework API ซึ่งเป็น High level interface สำหรับใช้พัฒนา Application
Java API framework
เป็นส่วนที่ Android OS เปิดให้สามารถใช้ภาษา Java เพื่อพัฒนา Android application ให้มีความง่ายยิ่งขึ้น เช่น view system สำหรับการพัฒนา UI, notification manager สำหรับการส่ง display alert ไปยัง status bar
Inter-Process Comunication (IPC)
โดยปกติแล้ว process ที่อยู่บน Android จะมี address space เป็นของตัวเอง และไม่สามารถเข้าถึง memory ของ process อื่น ๆ ได้ เพื่อป้องกันไม่ให้ App อื่น ๆ มาก่อกวน หรือดึงข้อมูลของ App อื่นออกไปได้ จึงต้องมีการสร้างช่องทางในการสื่อสาร เช่น Binder
Binder
เป็น IPC รูปแบบหนึ่งที่อยู่ใน Kernel level ที่สามารถ expose interface ให้กับ IPC เรียกใช้งานได้ ซึ่งจะถูกจัดการโดย Kernel module ซึ่งจะทำการ allowcate space ที่ process ปลายทาง จากนั้นจึง copy data จาก sender process มายัง process ของตนเอง
System apps
Android มาพร้อมกับ core apps พื้นฐาน เช่น email, sms, calendars, internet browsing ซึ่ง app เหล่านี้ไม่ได้พิเศษกว่า app ที่ติดตั้งเอง ซึ่ง system apps มาช่วยให้ developer ไม่จำเป็นต้องเขียนการทำงานเอง สามารถเรียกใช้ app เหล่านี้เพื่อทำงานแทนได้ เช่น เรียก SMS app เพื่อส่ง SMS แทนที่จะพัฒนาการส่ง SMS เอง