ASUS 젠폰 맥스 프로(Zenfone Max Pro) M1은 올해 초 공개된 기기로, 6GB RAM과 64GB 내장 저장소를 갖추고 퀄컴 스냅드래곤 636 SoC 위에서 안드로이드 오레오 8.1을 구동합니다. 가격 대비 프리미엄과 미들레인지 사양의 균형이 잘 잡혀 있다는 평가를 받는 제품입니다.
루팅 후 OTA 업데이트가 안 되는 이유
루팅된 모든 기기와 마찬가지로, 젠폰 맥스 프로 M1 역시 루팅 상태에서는 일반적인 방법으로 OTA 업데이트를 설치할 수 없습니다. 부팅 시 시스템이 바이너리 검사를 수행하기 때문에, 강제로 업데이트하면 부트루프(무한 재부팅)에 빠지는 경우가 많습니다.
이번 가이드에서는 번거로운 언루팅(루트 해제) 없이 루팅된 젠폰 맥스 프로 M1에 OTA 업데이트를 직접 플래시하는 방법을 소개합니다. 원래라면 루트를 해제하거나 완전히 새로운 순정 ROM을 플래시한 뒤에야 OTA 업그레이드를 진행할 수 있지만, 이 방법을 활용하면 그런 과정 없이 바로 업데이트할 수 있습니다.
준비물
- 부트로더 언락이 완료된 젠폰 맥스 프로 M1 (Appuals의 '젠핀 맥스 프로 M1 언락 및 루팅 방법' 가이드 참조)
- 수정본(modified) TWRP 리커버리
- OTA 패키지
- 순정 ROM — 리커버리/패스트부트 버전은 무관하며, 이 패키지로 305 버전까지 업데이트 가능
수정된 OTA 다운로드
- 252 → 305 버전용 패키지
- 305 → 309 버전용 패키지
OTA 업데이트 수동 설치 방법
먼저 순정 ROM 전체 패키지와 OTA 업데이트 파일을 내려받아 젠폰 맥스 프로 M1에 저장합니다. 가능하면 SD 카드에 넣어두는 것이 좋습니다.
1단계. dlpkgfile 추출 및 이름 변경
/data/cache 폴더로 이동하여 dlpkgfile이라는 이름의 파일을 SD 카드 등으로 복사한 뒤, 파일명을 OTA.zip으로 변경합니다.
2단계. OTA.zip의 updater-script 수정
OTA.zip의 압축을 풉니다(MiXPlorer 같은 파일 관리자 앱을 쓰면 편리합니다). 압축 해제된 폴더에서 META-INF\com\google\android 경로로 이동한 뒤 updater-script.txt 파일을 기본 텍스트 편집기로 엽니다.
파일에서 아래 줄들을 삭제합니다:
containprop(getprop("ro.product.device")) || abort("E3004: This package is for \"ASUS_X00TD\" devices; this is a \"" + getprop("ro.product.device") + "\".");
getprop("ro.build.asus.sku") == "WW" || abort("E3009: This package is for sku: \"WW\"; this is a sku: \"" + getprop("ro.build.asus.sku") + "\".");
ui_print("Source: Android/sdm660_64/sdm660_64:8.1.0/OPM1/14.2016.1804.252-20180428:user/release-keys");
ui_print("Target: Android/sdm660_64/sdm660_64:8.1.0/OPM1/14.2016.1804.305-20180521:user/release-keys");
ui_print("Verifying current system...");
containprop(getprop("ro.build.fingerprint")) ||
abort("E3001: Package expects build fingerprint of Android/sdm660_64/sdm660_64:8.1.0/OPM1/14.2016.1804.252-20180428:user/release-keys or Android/sdm660_64/sdm660_64:8.1.0/OPM1/14.2016.1804.305-20180521:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:47510824:9ca7a29f3b90af90492bfa0c07275390f72f397d:47502632:80fbccb727c484733397429a9df38a499dee67fe") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:47510824:9ca7a29f3b90af90492bfa0c07275390f72f397d:47502632:80fbccb727c484733397429a9df38a499dee67fe\" has unexpected contents.");문서를 저장한 뒤 해당 폴더를 다시 OTA.zip으로 압축합니다.
3단계. 순정 ROM의 updater-script 수정
순정 패스트부트 이미지(fastboot image)를 갖고 있다면 이 단계는 건너뛰어도 됩니다.
순정 ROM zip 파일의 압축을 풀고 마찬가지로 META-INF\com\google\android 경로에서 updater-script 파일을 텍스트 편집기로 연 뒤, 아래 줄들을 삭제합니다:
(!less_than_int(1524926024, getprop("ro.build.date.utc"))) || abort("E3003: Can't install this package (Sat Apr 28 22:33:44 CST 2018) over newer build (" + getprop("ro.build.date") + ").");
containprop(getprop("ro.product.device")) || abort("E3004: This package is for \"ASUS_X00TD\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Target: Android/sdm660_64/sdm660_64:8.1.0/OPM1/14.2016.1804.252-20180428:user/release-keys");
show_progress(0.650000, 0);
ui_print("Patching system image unconditionally...");저장한 후 순정 ROM을 다시 zip 형식으로 압축합니다.
4단계. 플래시 및 백업
부트로더로 재부팅합니다. 올바른 버전의 패스트부트 ROM이 있다면 system.img, vendor.img, boot.img, 그리고 수정된 twrp.img를 플래시합니다. 그렇지 않다면 수정된 TWRP.img만 플래시한 후, 볼륨 다운 + 전원 버튼을 동시에 길게 눌러 리커버리로 강제 진입합니다.
리커버리에 진입했다면 먼저 수정해 둔 순정 ROM .zip을 플래시하고, 이어서 OTA.zip을 플래시합니다. 작업이 끝나면 Boot, Modem, System Image, Vendor Image를 반드시 백업해 둡니다.
5단계. 데이터 파티션 복호화 관련 처리
이전에 데이터 파티션을 복호화(decrypt)해 사용해 왔다면, 수정된 TWRP를 통해 일반 TWRP를 플래시하거나, 패스트부트로 부팅한 뒤 decrypt.zip을 다시 플래시하면 됩니다.
6단계. TWRP 없이 루트를 유지하며 OTA 받기
TWRP 없이 루트 상태를 유지하면서 앞으로도 OTA 업데이트를 손쉽게 설치하고 싶다면, 수정된 TWRP로 Magisk와 순정 리커버리를 플래시한 뒤 재부팅하세요. 이후에는 루트를 유지한 상태에서도 별다른 문제 없이 OTA 업데이트를 설치할 수 있습니다.