Tìm Hiểu kiến trúc android

Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do Google phát triển dựa trên nền tảng của Linux. Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra. Hề điều hành Android là một ngắn xếp các thành phần phần mềm, và được chia thành các phần chính như sau:

aaaa.jpg

1.1. Tầng Application

Application.png

  • Cung cấp các ứng dụng bao gồm các phần mềm có các chức năng mặc định của thiết bị Mobile. Nó cũng có thể phát triển để sử dụng Application Framework (AOSP). Các ứng dụng này được phát triển trên Eclipse IDE hoặc Android Studio IDE, và sử dụng ARM Emulator cơ bản on QEMU (Quick EMUlator).

1.2 Tầng Application Framework

appFrame.png

  • Tầng này của hệ điều hành Android cung cấp một nền tảng phát triển ứng dụng mở qua đó cho phép nhà phát triển ứng dụng có khả năng tạo ra các ứng dụng của riêng họ. Bao gồm các package chính sau:

  • Activity Manager: quản lý vòng đời của ứng dụng.

  • Window Manager: quản lý form của các ứng dụng.

  • Package Manager: Cài đặt hoặc xóa các ứng dụng

  • Content Manager: Chia sẻ tin nhắn, dữ liệu và thông tin

  • View System: Hiển thị giao diện người dùng, Listview, TextView, Button, etc.

  • Notification Manager: Hiển thị và thông báo Arlaming như Receiving call, message, battery, changing signal network status, etc.

  • Telephone Manager: Voice và Call, MMS/SMS, SIM/USIM

  • Location Manager: Cung cấp vị trí thông tin.

  • Resource Manager: Lưu trữ đồ họa hoặc tập tin tài nguyên của ứng dụng.

1.3 Tầng Android Runtime

riblary.png

  • Được xây dựng với mục đích làm cho các thiết bị di động có thể chạy nhiều máy ảo một cách hiệu quả. Trước khi thực thi, bất kì ứng dụng Android nào cũng được convert thành file thực thi với định dạng nén Dalvik Executable (.dex). Định dạng này được thiết kế để phù hợp với các thiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý. Ngoài ra máy ảo Dalvik sử dụng bộ nhân Linux để cung cấp các tính năng như thread, low-level memory management.

  • Máy ảo VM:

    • Tối ưu hóa các nguồn tài nguyên cho thiết bị điện thoại
    • Register-based kiến trúc
    • Sử dụng DEX (Dalvik Executable) files
    • Khi tầng thư viện C/C++ được gọi trong ứng dụng Java, Runtime thư việc sẽ được gọi.
    • Bao gồm JIT (Just-in-time) biên dịch
  • Làm thế nào để load Native code trong android runtime?

  • Máy ảo DVM sẽ tìm kiếm các hàm JNI_Onload() _và hàm này sẽ được gọi tự động.

  • Nếu JNI_OnLoad() _không tồn tại, sau đó máy ảo sẽ so sánh JNI Native function mà thư việc đã được mapping tự động.

  • Nếu RegisterNative() hàm này được sử dụng thì tốc độ load sẽ nhanh hơn.

  • JNI (Java Native Interface)

  • Đăng ký và thực hiện - trong trường hợp tự động mapping

  • Sử dụng Javah: Nó có thể chứa các file header phù hợp với JNI rule từ lớp Java.

  • Nếu không có JNI_OnLoad() _máy ảo sẽ thực hiện việc xử lý mapping

  • Ví dụ:

package com.framgia.ledrpc; public class JniMethodLib{ static { system.loadLibrary("jnicalllib");} public native void ledOnNative(); }

** 1.4. Tầng Native Libraries**

librari.png

  • Android Native C/C++ Libraries
  • Java Native Interface: là một bộ framework cho phép mã lệnh viết bằng Java chạy trên

máy ảo java có thể gọi hoặc được gọi bởi một ứng dụng viết bằng native code, có nhiệm vụ:

  • Cung cấp cá hàm Native để ứng dụng gọi qua Android Runtime Enviroment

  • Kết nối giữa HAL và Native Libraries

  • Hỗ trợ nguồn tài nguyên đồ họa (SCG - 2D, OpenGL - 3D), Media Codes.

    • OpenGL ES Library: nó có thể sử dụng cho Hardware Acceleration
  • Media Framework:

    • based on OpenCORE: SUpport Audio, Video, Codes
  • Bionic libc

  • nó có thể thay đổi chế độ người dùng sang chế độ system

  • tất cả các chương trình nên biên dịch với bionic library trong Android.

** 1.5 Tầng Android Linux Kernel**

kernel.png

  • Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những dịch vụ hệ thống như:

    • Quản lý bộ nhớ, quản lý tiến trình, và cung câp các driver cho các trình điều khiển

    thiết bị, giao tiếp USB, Bluetooth, etc.

    • Nhân Linux cho phép giao tiếp giữa phần cứng và phần mềm của thiết bị.
  • Để các ứng dụng có thể truy cập đến phần cứng của thiết bị thì cần thông qua một lớp Hardware Abstraction Layer như sau:

ape_fwk_hal.png

  • Lớp này cung cấp cá giao diện cho phép các ứng dụng giao tiếp được với phần cứng, chúng có thể kết nối đến Kernel Driver thông qua việc gọi thư viện.

  • Tầng này cũng cung cấp giao diện lập trình cho phép sử dụng nguồn tài nguyên Kernel.

  • sử dụn các phương thức open(), read(), write(), ioctl(), mmap(), close()...

  • Android HAL cung cấp cách để load thư viện tự động như sau: id : Module ID yêu cầu load tự động, module - > return hw_module_t điểm của HMI (Hardware Module Information)

  • Vị trí mặc định của HAL module là:

    • HAL_LIBRARY_PATH1 "/system/lib/hw"
    • HAL_LIBRARY_PATH2 "/vendor/lib/hw"

- Tài liệu tham khảo:


All Rights Reserved