Trên các thiết bị Android cũ hơn không có phân vùng A / B, không gian flash thường chứa các phân vùng sau:
- khởi động
- Chứa nhân Linux và hệ thống tệp gốc tối thiểu (được tải vào đĩa RAM). Nó gắn kết hệ thống và các phân vùng khác và bắt đầu thời gian chạy nằm trên phân vùng hệ thống.
- hệ thống
- Chứa các ứng dụng và thư viện hệ thống có sẵn mã nguồn trên Android Open Source Project (AOSP). Trong quá trình hoạt động bình thường, phân vùng này được gắn ở chế độ chỉ đọc; nội dung của nó chỉ thay đổi trong quá trình cập nhật OTA.
- người bán
- Chứa các ứng dụng và thư viện hệ thống không có sẵn mã nguồn trên Android Open Source Project (AOSP). Trong quá trình hoạt động bình thường, phân vùng này được gắn ở chế độ chỉ đọc; nội dung của nó chỉ thay đổi trong quá trình cập nhật OTA.
- dữ liệu người dùng
- Lưu trữ dữ liệu được lưu bởi các ứng dụng do người dùng cài đặt, v.v. Phân vùng này thường không được chạm vào trong quá trình cập nhật OTA.
- bộ nhớ đệm
- Khu vực lưu giữ tạm thời được một số ứng dụng sử dụng (truy cập phân vùng này yêu cầu quyền ứng dụng đặc biệt) và để lưu trữ các gói cập nhật OTA đã tải xuống. Các chương trình khác sử dụng không gian này với mong muốn rằng các tệp có thể biến mất bất cứ lúc nào. Một số cài đặt gói OTA có thể dẫn đến việc phân vùng này bị xóa hoàn toàn. Bộ nhớ cache cũng chứa nhật ký cập nhật từ bản cập nhật OTA.
- sự hồi phục
- Chứa một hệ thống Linux hoàn chỉnh thứ hai, bao gồm một hạt nhân và nhị phân khôi phục đặc biệt để đọc một gói và sử dụng nội dung của nó để cập nhật các phân vùng khác.
- linh tinh
- Phân vùng nhỏ được khôi phục sử dụng để lưu trữ một số thông tin về những gì nó đang làm trong trường hợp thiết bị được khởi động lại trong khi gói OTA đang được áp dụng.
Vòng đời của bản cập nhật OTA
Bản cập nhật OTA điển hình bao gồm các bước sau:
- Thiết bị thực hiện kiểm tra thường xuyên với máy chủ OTA và được thông báo về tính khả dụng của bản cập nhật, bao gồm URL của gói cập nhật và chuỗi mô tả để hiển thị cho người dùng.
- Cập nhật các bản tải xuống vào bộ nhớ cache hoặc phân vùng dữ liệu và chữ ký mật mã của nó được xác minh dựa trên các chứng chỉ trong
/system/etc/security/otacerts.zip
. Người dùng được nhắc cài đặt bản cập nhật. - Thiết bị khởi động lại vào chế độ khôi phục, trong đó hạt nhân và hệ thống trong phân vùng khôi phục được khởi động thay vì hạt nhân trong phân vùng khởi động.
- Khôi phục nhị phân được bắt đầu bởi init. Nó tìm các đối số dòng lệnh trong
/cache/recovery/command
trỏ nó đến gói đã tải xuống. - Khôi phục xác minh chữ ký mật mã của gói dựa trên các khóa công khai trong
/res/keys
(một phần của đĩa RAM chứa trong phân vùng khôi phục). - Dữ liệu được lấy từ gói và được sử dụng để cập nhật phân vùng khởi động, hệ thống và / hoặc nhà cung cấp nếu cần. Một trong các tệp mới còn lại trên phân vùng hệ thống chứa nội dung của phân vùng khôi phục mới.
- Thiết bị khởi động lại bình thường.
- Phân vùng khởi động mới cập nhật được tải, nó gắn kết và bắt đầu thực thi các tệp nhị phân trong phân vùng hệ thống mới được cập nhật.
- Là một phần của khởi động bình thường, hệ thống kiểm tra nội dung của phân vùng khôi phục so với nội dung mong muốn (trước đó đã được lưu trữ dưới dạng tệp trong
/system
). Chúng khác nhau, vì vậy phân vùng khôi phục được làm lại với nội dung mong muốn. (Trong những lần khởi động tiếp theo, phân vùng khôi phục đã chứa nội dung mới, vì vậy không cần ký hiệu lại.)
Cập nhật hệ thống đã hoàn tất! Nhật ký cập nhật có thể được tìm thấy trong /cache/recovery/last_log. #
.
Cập nhật gói
Gói cập nhật là .zip
có chứa tệp nhị phân META-INF/com/google/android/update-binary
có thể thực thi được. Sau khi xác minh chữ ký trên gói, recovery
trích xuất tệp nhị phân này sang /tmp
và chạy tệp nhị phân, chuyển các đối số sau:
- Cập nhật số phiên bản API nhị phân . Nếu các đối số được chuyển đến bản cập nhật nhị phân thay đổi, số này sẽ tăng lên.
- Bộ mô tả tệp của ống lệnh . Chương trình cập nhật có thể sử dụng đường dẫn này để gửi các lệnh trở lại nhị phân khôi phục, hầu hết cho các thay đổi giao diện người dùng, chẳng hạn như chỉ ra tiến trình cho người dùng.
- Tên tệp của gói cập nhật
.zip
.
Gói cập nhật có thể sử dụng bất kỳ tệp nhị phân nào được liên kết tĩnh làm tệp nhị phân cập nhật. Các công cụ xây dựng gói OTA sử dụng chương trình cập nhật ( bootable/recovery/updater
), chương trình này cung cấp một ngôn ngữ kịch bản đơn giản có thể thực hiện nhiều tác vụ cài đặt. Bạn có thể thay thế bất kỳ tệp nhị phân nào khác đang chạy trên thiết bị.
Để biết thông tin chi tiết về hàm nhị phân của trình cập nhật, cú pháp soạn thảo và nội trang, hãy xem Bên trong Gói OTA .
Di chuyển từ các bản phát hành trước
Khi di chuyển từ bản phát hành Android 2.3 / 3.0 / 4.0, thay đổi lớn là chuyển đổi tất cả các chức năng dành riêng cho thiết bị từ một tập hợp các hàm C có tên được xác định trước sang các đối tượng C ++. Bảng sau liệt kê các hàm cũ và các phương thức mới phục vụ một mục đích gần như tương đương:
Hàm C | Phương pháp C ++ |
---|---|
device_recovery_start () | Thiết bị :: RecoveryStart () |
device_toggle_display () device_reboot_now () | RecoveryUI :: CheckKey () (cũng RecoveryUI :: IsKeyPressed ()) |
device_handle_key () | Thiết bị :: HandleMenuKey () |
device_perform_action () | Thiết bị :: InvokeMenuItem () |
device_wipe_data () | Thiết bị :: WipeData () |
device_ui_init () | ScreenRecoveryUI :: Init () |
Việc chuyển đổi các chức năng cũ sang các phương thức mới nên đơn giản một cách hợp lý. Đừng quên thêm hàm make_device()
mới để tạo và trả về một phiên bản của lớp con Thiết bị mới của bạn.