Android API Level và phiên bản hệ điều hành có mối quan hệ tương ứng trực tiếp. Mỗi phiên bản Android được đánh dấu bằng một API Level nguyên - giá trị này tăng dần theo từng bản phát hành. API Level xác định tập tính năng ứng dụng có thể truy cập và phiên bản Android tối thiểu hỗ trợ chạy ứng dụng. Ví dụ: Android 14 tương ứng API Level 34.
Khái niệm ABI trong môi trường Android
Application Binary Interface (ABI) định nghĩa giao tiếp giữa phần cứng và hệ điều hành. Với thiết bị Android, ABI xác định cách trình biên dịch tạo mã máy và sử dụng tài nguyên hệ thống. Các loại ABI phổ biến:
- arm64-v8a: Kiến trúc ARM 64-bit, tối ưu cho thiết bị cao cấp từ Android 5.0 (API 21)
- armeabi-v7a: ARM 32-bit, hỗ trợ phần cứng xử lý số thực, tương thích từ Android 2.3 (API 9)
- x86_64: Intel 64-bit, dùng cho máy tính bảng Intel, yêu cầu Android 5.0+
- x86: Intel 32-bit, thường gặp trên thiết bị cũ, hỗ trợ từ Android 4.0 (API 14)
So sánh RISC và CISC
RISC (Reduced Instruction Set Computing) và CISC (Complex Instruction Set Computing) là hai triết lý thiết kế vi xử lý khác biệt:
| Tiêu chí | RISC (ARM) | CISC (x86) |
|---|---|---|
| Độ phức tạp lệnh | Lệnh đơn giản, thực hiện một tác vụ | Lệnh phức tạp, thực hiện nhiều bước |
| Hiệu suất năng lượng | Tối ưu cho thiết bị di động | Phụ thuộc vào thiết kế |
| Ví dụ thực tế | ADD R1, R2, R3 (chỉ thao tác thanh ghi) | ADD EAX, [EBX] (truy cập bộ nhớ trực tiếp) |
Trình biên dịch Clang trong Qt Android
Qt chọn Clang làm trình biên dịch mặc định vì:
- Tích hợp chặt chẽ với LLVM - cung cấp công cụ phân tích tĩnh và gỡ lỗi nâng cao
- Được Android NDK tối ưu hóa cho mọi kiến trúc mục tiêu
- Duy trì tính nhất quán khi phát triển đa nền tảng
- Hỗ trợ đầy đủ các tính năng C++ hiện đại
Vai trò của NDK và JDK
Android NDK cho phép viết mã gốc C/C++:
- Biên dịch thư viện Qt thành mã máy cho thiết bị Android
- Xử lý tác vụ hiệu năng cao như đồ họa 3D hoặc mã hóa
Java Development Kit đảm nhiệm:
- Biên dịch lớp Java tương tác với hệ điều hành
- Đóng gói ứng dụng thành file APK
- Cung cấp công cụ debug và quản lý chứng chỉ
Công cụ xây dựng Gradle
Gradle tự động hóa quy trình xây dựng ứng dụng Android thông qua tập tin cấu hình build.gradle. Trong dự án Qt, nó thực hiện:
- Quản lý phụ thuộc Android SDK và thư viện bên thứ ba
- Xử lý tài nguyên và file manifesto
- Tối ưu hóa kích thước APK qua R8
Ví dụ cấu hình Gradle cho ứng dụng Qt:
android {
compileSdk 34
defaultConfig {
minSdk 24
targetSdk 34
ndk {
abiFilters "arm64-v8a", "x86_64"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt')
}
}
}
Cấu trúc tệp quan trọng
AndroidManifest.xml: Định nghĩa thông tin cơ bản ứng dụng như package name, quyền truy cập và activity chính. Qt tự sinh file này nhưng có thể tùy chỉnh khi cần.
settings.json: Lưu trữ thông số xây dựng do qmake tạo, chứa đường dẫn SDK/NDK và cấu hình kiến trúc mục tiêu.
gradle.properties: Thiết lập tham số JVM và phiên bản công cụ:
org.gradle.jvmargs=-Xmx4096m
android.buildToolsVersion=34.0.0
qtMinSdkVersion=24
local.properties: Chỉ định vị trí Android SDK/NDK:
sdk.dir=/opt/android-sdk
ndk.dir=/opt/android-ndk
Quy trình xây dựng ứng dụng
Các bước chính khi biên dịch ứng dụng Qt cho Android:
- qmake sinh file cấu hình từ dự án .pro
- Biên dịch mã C++ qua NDK với Clang
- Gradle xử lý thành phần Java và đóng gói tài nguyên
- androiddeployqt nhúng thư viện Qt vào APK
- Zipalign tối ưu hóa kích thước file
Thiết lập OpenSSL trong Qt
Khi ứng dụng sử dụng QSslSocket, cần cấu hình OpenSSL trong file .pro:
android {
INCLUDEPATH += /opt/openssl/include
LIBS += -L$$PWD/openssl/libs/$$ANDROID_ABI -lssl -lcrypto
}
Đường dẫn thư viện phải khớp với ABI mục tiêu (arm64-v8a, x86_64...). Qt Creator tự động xử lý việc này qua mục "OpenSSL Settings".
Quản lý phiên bản tương thích
Qt yêu cầu phiên bản SDK/NDK phù hợp với bộ công cụ. Ví dụ:
- Qt 6.7 cần Android SDK 34 và NDK 26.1
- API Level tối thiểu phải ≥ 24 cho ứng dụng 64-bit
Kiểm tra tương thích qua trang tài liệu chính thức của Qt trước khi cập nhật công cụ.