“Understanding Android” là cách mà ta tiếp cận lập trình Android và thấu hiểu kiến trúc hệ thống của nó. Bạn có thể không cần hiểu rõ cấu trúc của một hệ điều hành nhưng bạn vẫn có thể lập trình một ứng dụng trên HDH đó, đây là điều mà nhà sản xuất muốn khi release SDK với một framework có sẵn của họ. Như bạn biết điều này cũng có mặt tốt và xấu. Framework là một tầng cao cấp dành cho lập trình viên, nó đều có giới hạn của nó, bạn có thể chỉ có thể lập trình những ứng dụng phổ biến nhưng không nên tiến tới những ứng dụng cao cấp đi sâu vào hệ thống của HDH. Theo cách của mình, trước khi bắt đầu học Android, chúng ta nên nghiên cứu qua bản thân hệ điều hành Android, chúng ta không cần phải hiểu rõ nó như thể nào, mục đích quan trọng nhất của chúng ta là có cái nhìn chung và toàn diện nhất về Android.
Android là gì:
Android là một hệ điều hành mã nguồn mở, chủ yếu dành cho các thiết bị di động. Nhà phát triển có thể đem mã nguồn mở này về, modify bằng cách thêm code của họ hoặc dùngGoogle’s Java và build ra một hệ điều hành Android riêng cho mình. Đây cũng là cách mà HTC, Motorola, LG, Samsung … đang làm để đưa Android lên thiết bị của họ.
Một số tính năng của HDH Android: Handset layouts, Storage, Connectivity, Messaging, Web Browser, Java Virtual Machine, Media Support, Additional Hardware Support …
Android Platform:
Bao gồm hệ điều hành Android đầy đủ tính năng, các ứng dụng và các tầng trung gian để developer có thể mở rộng, modify hoặc thêm vào component của họ.
Có 4 tầng cơ bản trong HDH Android: Application Framework, Android Runtime, Native Libraries, Linux Kernel … Mỗi tầng làm việc đều nhờ sự giúp đỡ của tầng bên dưới.
Tầng Linux Kernel:
Đây là nhân của hệ điều hành Android, mọi xử lý của hệ thống đều phải thông qua tầng này.
Linux Kernel cung cấp các trình điều khiển thiết bị phần cứng (driver) như: camera, USB, Wifi, Bluetooth, Display, Power Management …
Android dựa trên Linux phiên bản 2.6 lựa chọn các tính năng cốt lõi như bảo mật, quản lý bộ nhớ, quản lý tiến trình, mạng stack, và các trình điều khiển phần cứng. Kernel hoạt động như một lớp trừu tượng giữa phần cứng và phần mềm còn lại của hệ thống.
Tầng Native Libraries:
* System C library – có nguồn gốc từ hệ thống thư viện chuẩn C (libc), điều chỉnh các thiết bị nhúng trên Linux.
* Media Libraries – mở rộng từ PacketVideo’s OpenCORE; thư viện hỗ trợ playback và recording của nhiều định dạng video và image phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
* Surface Manager – quản lý việc hiển thị và kết hợp đồ họa 2D và 3D.
* LibWebCore – Android dùng lại webkit engine cho việc render trình duyệt mặc định của HDH Android browser và cho dạng web nhúng (như HTML nhúng)
* SGL – 2D engine
* 3D libraries – Thư viện 3D dựa trên OpenGL ES 1.0 API, có nâng cấp tăng tốc “hardware 3D acceleration”
* FreeType – render bitmap và vector font
* SQLite – quản lý database của ứng dụng
Tầng Runtime:
Mỗi ứng dụng Android chạy trên một proccess riêng của Dalvik VM (máy ảo). Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu quả trên cùng một thiết bị.
Máy ảo Dalvik thực thi các file mang định dạng .dex (Dalvik Excutable), định dạng này là định dạng đã được tối ưu hóa để chỉ chiếm một vùng nhớ vừa đủ xài và nhỏ nhất có thể. VM chạy các class (đã được compile trước đó bởi 1trình biên dịch ngôn ngữ Java), sở dĩ VM chạy đc các class này là nhờ chương trình DX tool đã convert các class sang định dang .dex
Tầng Application Framework:
Đây là tầng mà Google xây dựng cho các developer để phát triển các ứng dụng của họ trên Android, chỉ bằng cách gọi các API có sẵn mà Google đã viết để sử dụng các tính năng của phần cứng mà không cần hiểu cấu trúc bên dưới.
Bằng cách cung cấp một nền tảng phát triển mở, Android cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo thức, thêm các thông báo để các thanh trạng thái, và nhiều, nhiều hơn nữa.
Tất cả các ứng dụng thường gồm một bộ các dịch vụ và hệ thống cơ bản sau:
*View UI dùng để xây dựng layout của ứng dụng bao gồm: list view, text field, button, dialog, form …
* Content Providers cho phép các ứng dụng có thể truy cập dữ liệu từ các ứng dụng khác (như ứng dụng của ta có thể lấy thông tin Contacts của điện thoại Android), hoặc để chia sẻ dữ liệu của riêng ứng dụng.
* Resource Manager cung cấp cách thức truy cập đến non-code resources như các asset, graphic, image, music, video …
* Notification Manager cho phép tất cả các ứng dụng hiển thị thông báo của mình trên hệ điều hành
* Activity Manager quản lý vòng đời của các ứng dụng.
Ở góc nhìn của người dùng ta có thêm tầng application (là ứng dụng do ta viết), sau đây là sơ đồ tổng quát:
Quy Trình khởi động của HDH Android
Bootloader của thiết bị sẽ load kernel và tiến hành khởi động 3 tiến trình của HDH Android: daemons, Zygote, Runtime:
-Zygote, là một tiến trình để khởi động máy ảo Java .
-Daemons quản lý phần cứng cấp thấp như USB, radio …
-Runtine proccess khởi động “Service Manager”.
Sau đó Runtime proccess yêu cầu Zygote khởi động một máy ảo mới Dalik VM cho việc khởi động “System Server”. Cả 2 tiến trình đầu tiên được khởi động sau đó là graphic va audio outputs (Audio & Surface Manager).
Kế tiếp là các tiến trình khác” Telephony, Bluetooth, Activity Manager, Package Manager …
Tất cả các tiến trình chạy ngầm được tạo ra đều phải đc đăng ký và chịu sự quản lý của Service Manager.
Note: Như vậy sau một đóng thông tin trên, bạn sẽ khó mà hấp thụ hết, nhưng đùng lo chỉ khi nào bắt tay vào viết một ứng dụng thì bạn mới bắt đầu sẽ hiểu rõ chúng có công dụng gì. Cuối cùng bạn chỉ cần ghi nhớ một số thông tin sau:
-Android là một mã nguồn mở của Google dựa trên kernel Linux 2.6 . Các nhà sản xuất phải đem mã nguồn này về và custom , rồi build ra HDH Android trên thiết bi của mình.
-Application Framework là phần mà ta sẽ nghiên cứu chủ yếu khi viết một ứng dụng Android và chúng ta không cần phải hiểu cặn kẽ các tầng khác (có thể quên nó :D)
Reference from http://developer.android.com/guide/basics/what-is-android.html
reflink: http://namheo.com/blog/android/part-1-understanding-android/