Áp dụng OTA update lên Xiaomi Mi A2 đã root là đau đầu lớn, thường phải un-root rồi root lại từ đầu. May mắn có phương pháp cài Magisk hỗ trợ OTA update.
Nếu muốn root Mi A2 nhưng vẫn apply OTA update không cần unroot, làm theo hướng dẫn đơn giản dưới đây cẩn thận.
Yêu cầu:
- ADB và Fastboot (Xem hướng dẫn Cài đặt ADB trên Windows)
- MiFlash Tool
Cần bootloader đã unlock – nhưng rất cẩn thận, chương trình unlock bootloader Xiaomi gần đây rất chậm. Có thể mất tuần lễ nhận unlock code. Cũng nhận biết ARB (Anti-rollback protection) trên Xiaomi.
Nếu bootloader đã unlock, tuyệt vời! Tiếp tục.
- Settings > System > About Phone > tap 'Build Number' 7 lần unlock Developer Mode.
- Settings > Developer Options > enable OEM Unlocking.
- Tắt thiết bị, giữ Volume Down + power. Thả nút khi vào menu Fastboot.
- Cắm Mi A2 vào PC qua USB, mở terminal ADB (Shift + right click folder ADB chính, chọn 'Open a command window here').
- Terminal ADB gõ:
fastboot oem unlock - Sẽ reboot phone và xóa toàn bộ data khi unlock bootloader.
Cài đặt Magisk
Tải cài Magisk Manager APK mới nhất lên điện thoại.
Tải patched boot.img từ download dưới – hoặc tự patch original boot.img (hướng dẫn dưới danh sách download).
Khi tải patched boot.img, chắc chắn nó cùng build number bạn đang dùng. Check Build Number trong Settings > About Phone trước khi tiếp tục, KHÔNG flash file trực tiếp lên bộ nhớ điện thoại, vì Magisk sẽ không chạy đúng. Làm theo hướng dẫn chính xác từng bước.
Tải patched boot.img vào folder ADB trên PC.
- patched_boot 9.6.4.0 (update 7/2018) – patched với Magisk 17.1
- patched_boot 9.6.6.0 (update 8/2018) – patched với Magisk 17.1
- patched_boot 9.6.8.0 (update 9/2018) – patched với Magisk 17.1
Nếu flash nhầm boot.img, flash original boot.img từ danh sách:
- original boot.img 9.6.4.0 (7/2018) – từ fastboot ROM
- original boot.img 9.6.6.0 (8/2018) – từ OTA update
- original boot.img 9.6.8.0 (9/2018) – từ OTA update
Lưu ý: Patch boot.img thủ công cần original boot.img – tìm trong fastboot ROM zip chính thức cho daisy. Đảm bảo ROM tải về cùng Build Number với điện thoại. Hoặc tải original boot.img cùng Build Number, hoặc upgrade/downgrade version.
Sau khi có original boot.img (trích từ fastboot ROM zip chính thức), copy vào bộ nhớ ngoài (SD card) điện thoại.
Mở Magisk Manager app, sẽ hỏi cài Magisk – chấp nhận, chọn "Patch Boot Image File", chọn file boot.img đã chuyển.
Quá trình ~1 phút, đóng khi xong. Trong bộ nhớ điện thoại thư mục Download, tìm file "patched_boot.img", chuyển về PC. Đặt trong main ADB folder.
Reboot thiết bị vào Fastboot Mode (Power + Volume Down) mở terminal ADB trên PC.
Terminal ADB gõ: fastboot boot patched_boot.img
Điện thoại boot bình thường. Quay lại Android system, mở Magisk Manager, sẽ hỏi cài Magisk lần 2. Chọn Install > Direct Install, reboot khi xong.
Lưu ý cho OTA tương lai: Settings > System > Developer Options > tắt Automatic system updates. Chỉ cài OTA thủ công. Không bao giờ cho auto OTA trên Android đã root.
Cách apply OTA update tương lai
Lưu ý: OTA chỉ chạy nếu tất cả partition trên thiết bị untouched! Magisk restore original boot.img, nhưng nếu bạn sửa partition /system (ví dụ edit build.prop thủ công), OTA sẽ từ chối cài.
Có thể thử apply OTA không cần flash toàn bộ fastboot ROM gốc nếu flash chỉ partition đã sửa, như flash /system partition từ fastboot ROM gốc, dùng file .img đúng từ original ROM .zip.
Khi OTA mới có sẵn muốn cài, mở Magisk Manager tap "Uninstall > Restore Images", chưa reboot thiết bị.
Đóng Magisk, vào Settings > System > System update, cài OTA. Khi tải xong, bắt đầu update 2 stage. Khuyên đun cà phê, chơi Madalin Stunt Cars 2 hoặc thử The Impossible Quiz (chúc may mắn!)
Sau 2 stage update, hỏi restart. KHÔNG restart thiết bị. Mở Magisk Manager lại, tap Install > Install > Install to Inactive Slot (After OTA), sau đó mới Reboot.
Sau reboot, Mi A2 sẽ có Android version mới với Magisk vẫn intact.
Khắc phục sự cố
Lưu ý: Trước mọi thao tác, tắt bảo mật màn hình (screen lock, PIN, password, fingerprint...) vì rủi ro encryption data. Khuyến khích backup trước.
Nếu không làm theo hướng dẫn kỹ, có thể gặp vấn đề.
Khi version mới tìm thấy, updater check tất cả partition untouched. Nếu partition nào modified, OTA updater không tiến hành cài đặt;
Thường 2 partition user hay sửa: boot partition (nơi cài Magisk và TWRP) và system partition (khi đổi config, add/remove system app, v.v.)
System partition chỉ sửa bằng Magisk modules thực chất untouched, vì Magisk đăng ký mọi thay đổi /system trong file ở /data partition rồi lừa Android tin thay đổi áp dụng lên /system;
Boot partition thực sự modified, nhưng cài Magisk theo hướng dẫn này, Magisk lưu bản sao boot partition untouched, restore trước khi apply OTA sẽ làm update chạy.
Nếu không làm theo hướng dẫn cài Magisk mà cài cách khác, Magisk có thể báo không restore được original boot.img (boot partition) khi apply OTA.
Fix: flash trực tiếp vanilla (original, unmodified) boot.img từ điểm 6 hướng dẫn, dùng lệnh:
fastboot getvar current-slot fastboot flash boot_? boot.img
Lệnh 1 cho biết current slot (a hoặc b), lệnh 2 flash original boot vào phone, thay "?" bằng a hoặc b (slot lệnh 1 cho).
Nhớ version boot.img phải khớp Android build version đang chạy trên điện thoại.
Nếu OTA vẫn từ chối, có thể bạn sửa trực tiếp /system partition (ví dụ đổi build.prop không dùng Magisk module).
Flash original system.img:
fastboot getvar current-slot fastboot flash system_? system.img
Lệnh 1 cho slot đúng thay "?" trong lệnh 2. Tìm system.img trích từ OTA update zip (cùng mọi .img khác):
- 9.6.8.0 (9/2018) OTA update dump as .img files
- 9.6.6.0 (8/2018) OTA update dump as .img files
Muốn tự lấy system.img, tìm trong fastboot images nhưng thường không update hàng tháng như OTA. Có thể trích system.img trực tiếp từ OTA update zip trong thread này, dùng Python script tại đây.
Để script Python chạy trên Debian/Ubuntu và derivates, tải cả extract_android_ota_payload.py và update_metadata_pb2.py, cấp quyền thực thi, cài package python-protobuf. Sau đó chạy lệnh unpack payload.bin (phải trích từ OTA update zip):
./extract_android_ota_payload.py /path/to/payload.bin
Sẽ trích tất cả .img trong payload.bin ra thư mục hiện tại, bao gồm system.img. Windows: cài latest Python2 release script có thể chạy.
Last resort: flash trực tiếp MiFlash latest fastboot image (dù cũ hơn version hiện tại). Dùng script "flash_all.bat" nhưng backup data trước, vì phone sẽ full reset.
Nếu không muốn risk không backup, dùng script "flash_all_except_storage.bat" khi flash, giữ data, nhưng cảnh báo đôi khi không truy cập được data nữa do encryption.
Sau flash, bắt đầu làm lại hướng dẫn từ điểm 5 hoặc 6.
Không vấn đề downgrade build version qua fastboot, miễn Android main version giống nhau (Oreo 8.1 lúc này).
Patched và original boot files cho Mi A2 jasmine (KHÔNG dùng cho Mi A2 Lite daisy, file cho daisy ở phần đầu hướng dẫn).
- patched_boot 9.6.9.0 (7/2018) – patched với Magisk 17.1
- patched_boot 9.6.10.0 (8/2018) – patched với Magisk 17.1
- original boot.img 9.6.9.0 (7/2018) – từ fastboot ROM
- original boot.img 9.6.10.0 (8/2018) – từ fastboot ROM