Computer >> 컴퓨터 >  >> 문제 해결 >> Android

Magisk로 루팅한 샤오미 Mi A2, 언루트 없이 OTA 업데이트 적용하는 방법

루팅된 샤오미 Mi A2에 OTA 업데이트를 적용하는 일은 꽤 번거로운 작업입니다. 보통은 기기를 언루트한 뒤 업데이트를 설치하고, 다시 처음부터 루팅 과정을 반복해야 하기 때문입니다. 다행히 OTA 업데이트를 지원하도록 Magisk를 설치하면 이런 불편함을 피할 수 있습니다.

이 가이드를 따라 하면 샤오미 Mi A2를 루팅하면서도, 언루트 없이 OTA 업데이트를 그대로 적용할 수 있습니다. 아래 내용을 순서대로 꼼꼼하게 따라와 주세요.

준비물

  • ADB 및 Fastboot (윈도우에 ADB를 설치하는 방법은 별도 가이드 참고)
  • MiFlash 툴

1단계: 부트로더 언락

가장 먼저 부트로더를 언락해야 합니다. 다만 주의할 점이 있습니다. 최근 샤오미의 부트로더 언락 승인 절차가 매우 느려져서, 언락 코드를 받는 데 몇 주씩 걸릴 수 있습니다. 또한 샤오미 기기에는 ARB(Anti-Rollback, 롤백 방지 메커니즘)가 적용되어 있으므로 펌웨어 버전을 함부로 다운그레이드하지 않도록 각별히 주의해야 합니다.

이미 부트로더가 언락되어 있다면 바로 다음 단계로 넘어가면 됩니다.

  1. 설정 > 시스템 > 휴대전화 정보로 이동한 뒤 '빌드 번호'를 7번 연속으로 탭하여 개발자 옵션을 활성화합니다.
  2. 설정 > 개발자 옵션에서 OEM 잠금 해제(OEM Unlocking)를 켭니다.
  3. 기기 전원을 끈 후 볼륨 down + 전원 버튼을 동시에 길게 눌러 Fastboot 모드로 진입합니다(메뉴가 나타나면 버튼을 놓습니다).
  4. USB 케이블로 PC와 연결하고 ADB 터미널을 실행합니다. (ADB 폴더에서 Shift + 우클릭 후 '여기에 명령 창 열기' 선택)
  5. 터미널에 다음 명령어를 입력합니다:
    fastboot oem unlock

부트로더가 언락되면서 휴대폰이 재부팅되고, 모든 데이터가 삭제됩니다. 미리 백업을 해두는 것이 좋습니다.

2단계: Magisk 설치

먼저 최신 버전의 Magisk Manager APK를 휴대폰에 다운로드하여 설치합니다.

다음으로 패치된 boot.img 파일이 필요합니다. 아래 목록에서 자신의 빌드 번호에 맞는 파일을 받거나, 목록 아래의 안내에 따라 원본 boot.img를 직접 패치할 수도 있습니다.

주의: 패치된 boot.img를 다운로드할 때는 반드시 현재 기기의 빌드 번호와 동일한 버전인지 확인하세요. 설정 > 휴대전화 정보에서 빌드 번호를 먼저 확인한 후 진행해야 합니다. 또한 파일을 휴대폰 저장소에 직접 플래싱하지 마세요. Magisk가 정상적으로 작동하지 않습니다. 아래 안내를 정확히 그대로 따라야 합니다.

패치된 boot.img는 PC의 ADB 폴더에 저장해 둡니다.

패치된 boot.img (daisy / Mi A2)

  • patched_boot 9.6.4.0 (2018년 7월 업데이트) – Magisk 17.1로 패치됨
  • patched_boot 9.6.6.0 (2018년 8월 업데이트) – Magisk 17.1로 패치됨
  • patched_boot 9.6.8.0 (2018년 9월 업데이트) – Magisk 17.1로 패치됨

원본 boot.img (잘못 플래싱했을 때 복구용)

  • original boot.img 9.6.4.0 (2018년 7월 업데이트) – fastboot ROM에서 추출
  • original boot.img 9.6.6.0 (2018년 8월 업데이트) – OTA 업데이트에서 추출
  • original boot.img 9.6.8.0 (2018년 9월 업데이트) – OTA 업데이트에서 추출

boot.img 직접 패치하기

직접 패치하려면 원본 boot.img가 필요합니다. 공식 fastboot ROM zip 파일(daisy용) 안에서 찾을 수 있습니다. 이때 다운로드한 ROM의 빌드 번호가 휴대폰의 빌드 번호와 동일해야 합니다. 빌드 번호가 같은 boot.img를 받거나, 기기를 해당 버전으로 업데이트/다운그레이드하세요.

원본 boot.img(공식 fastboot ROM zip에서 추출)를 준비했다면, 이 파일을 휴대폰의 외장 메모리(SD 카드)로 복사합니다.

이후 과정은 다음과 같습니다:

  1. Magisk Manager 앱을 실행하면 Magisk 설치 여부를 묻습니다. 설치를 수락한 뒤 'Boot Image File 패치(Patch Boot Image File)'를 선택하고, 복사해 온 boot.img 파일을 지정합니다.
  2. 패치에는 약 1분 정도 소요됩니다. 완료되면 앱을 닫고, 휴대폰 저장소의 Download 폴더에서 생성된 patched_boot.img 파일을 PC의 ADB 폴더로 옮깁니다.
  3. 휴대폰을 다시 Fastboot 모드로 재부팅합니다(전원 + 볼륨 down)하고, PC에서 ADB 터미널을 실행합니다.
  4. 터미널에 다음 명령어를 입력합니다:
    fastboot boot patched_boot.img

휴대폰이 정상적으로 부팅되면 Android 시스템으로 돌아온 상태에서 Magisk Manager를 다시 실행합니다. Magisk 설치를 다시 요청하면 설치 > Direct Install을 선택하고, 완료 후 재부팅합니다.

마지막으로, 향후 OTA 업데이트를 위한 예방 조치로 설정 > 시스템 > 개발자 옵션에서 자동 시스템 업데이트를 비활성화하세요. 루팅된 Android 기기에서는 OTA 업데이트를 반드시 수동으로만 설치해야 합니다. 자동 OTA는 절대 허용하지 마세요.

3단계: 향후 OTA 업데이트 적용 방법

중요: OTA 업데이트는 기기의 모든 파티션이 원본 상태일 때만 정상적으로 설치됩니다. Magisk는 원본 boot.img를 복원할 수 있지만, build.prop을 직접 수정하는 등 /system 파티션을 변경했다면 OTA 설치가 거부됩니다.

fastboot ROM 전체를 다시 플래싱하지 않고도, 변경된 파티션만 원본 ROM의 .img 파일로 개별 플래싱하면 OTA를 적용할 수 있습니다.

새로운 OTA 업데이트가 배포되면 다음 순서로 진행합니다:

  1. Magisk Manager를 실행하고 '제거(Uninstall) > Restore Images'를 탭합니다. 단, 아직 재부팅하지 마세요.
  2. Magisk를 종료하고 설정 > 시스템 > 시스템 업데이트로 이동해 OTA 업데이트를 설치합니다.
  3. 업데이트 다운로드가 완료되면 2단계(two-stage) 업데이트가 시작됩니다. 시간이 다소 걸리므로 커피 한 잔 준비하고 기다리는 것도 좋습니다.
  4. 업데이트 단계가 모두 끝나면 재시작을 요청합니다. 여기서 절대 재부팅하지 말고, Magisk Manager를 다시 실행한 뒤 설치 > 설치 > 비활성 슬롯에 설치(Inactive Slot After OTA)를 선택합니다.
  5. 이 과정이 끝난 후에야 재부팅합니다.

재부팅이 완료되면 최신 Android 버전에 Magisk가 그대로 유지된 상태로 돌아옵니다.

문제 해결

참고: 아래 작업을 진행하기 전에 화면 잠금, PIN, 비밀번호, 지문 등 모든 화면 보안 기능을 비활성화해야 합니다. 그렇지 않으면 데이터 암호화 문제가 발생할 수 있습니다. 작업 전 백업을 강력히 권장합니다.

이 가이드를 충실히 따르지 않으면 몇 가지 문제가 발생할 수 있습니다.

새 버전이 감지되면 업데이터는 기기의 모든 파티션이 원본 상태인지 검사합니다. 수정된 파티션이 하나라도 있으면 OTA 설치가 진행되지 않습니다.

일반적으로 사용자 모딩으로 인해 변경되는 파티션은 두 가지입니다. 첫째는 boot 파티션(Magisk와 TWRP가 설치되는 곳), 둘째는 system 파티션(설정 파일 변경, 시스템 앱 추가/삭제 등)입니다.

다만 Magisk 모듈만으로 수정된 system 파티션은 사실상 원본 상태로 간주됩니다. Magisk는 /system에 대한 모든 변경 사항을 /data 파티션의 파일에 기록하고, Android가 실제로 /system이 변경된 것처럼 속이는 방식으로 동작하기 때문입니다.

반면 boot 파티션은 실제로 수정됩니다. 하지만 이 가이드대로 Magisk를 설치했다면 Magisk가 원본 boot 파티션의 사본을 보관하고 있으므로, OTA 적용 전에 복원하면 업데이트가 정상적으로 진행됩니다.

boot.img 복원이 안 될 때

이 가이드 외의 방법으로 Magisk를 설치한 경우, OTA 적용 시 Magisk가 원본 boot.img를 복원할 수 없다는 경고를 표시할 수 있습니다. 이 경우 가이드 6번 항목의 순정(원본, 무변경) boot.img를 직접 플래싱하면 해결됩니다:

fastboot getvar current-slot

fastboot flash boot_? boot.img

첫 번째 명령어는 현재 사용 중인 슬롯(a 또는 b)을 알려줍니다. 두 번째 명령어의 '?' 부분을 첫 번째 명령어가 알려준 슬롯 값(a 또는 b)으로 바꿔 입력하면 원본 boot가 플래싱됩니다.

boot.img 파일의 버전은 반드시 휴대폰에서 현재 실행 중인 Android 빌드 버전과 일치해야 한다는 점을 잊지 마세요.

system 파티션을 직접 수정한 경우

OTA 업데이트가 여전히 설치되지 않는다면, /system 파티션을 직접 변경했을 가능성이 큽니다(예: Magisk 모듈 없이 build.prop을 직접 수정). 이 경우 원본 system.img를 플래싱해야 합니다:

fastboot getvar current-slot

fastboot flash system_? system.img

앞서와 마찬가지로 첫 번째 명령어로 확인한 슬롯 값을 두 번째 명령어의 '?' 대신 입력하면 됩니다.

OTA 업데이트 zip에서 추출한 system.img를 포함한 .img 파일들은 아래에서 구할 수 있습니다:

  • 9.6.8.0 (2018년 9월) OTA 업데이트 덤프 (.img 파일)
  • 9.6.6.0 (2018년 8월) OTA 업데이트 덤프 (.img 파일)

system.img 직접 추출하기

fastboot 이미지 안에도 system.img가 포함되어 있지만, OTA 업데이트만큼 매달 갱신되지는 않는 경우가 많습니다. 대신 OTA 업데이트 zip에서 Python 스크립트를 이용해 system.img를 직접 추출할 수 있습니다.

Debian/Ubuntu 계열에서 스크립트를 사용하려면 'extract_android_ota_payload.py'와 'update_metadata_pb2.py' 두 파일을 다운로드하고 실행 권한을 부여한 뒤, 'python-protobuf' 패키지를 설치합니다. 이후 OTA zip에서 추출한 payload.bin 파일을 다음 명령어로 언팩합니다:

./extract_android_ota_payload.py /path/to/payload.bin

이 명령을 실행하면 현재 디렉터리에 payload.bin 내부의 모든 .img 파일(system.img 포함)이 추출됩니다. 윈도우에서는 최신 Python2 릴리스만 설치하면 스크립트가 동작할 것으로 보입니다.

최후의 수단: MiFlash 전체 플래싱

위 방법으로도 해결되지 않으면, MiFlash로 사용 가능한 최신 fastboot 이미지를 통째로 플래싱하는 것이 마지막 방법입니다(현재 버전보다 오래된 경우에도 가능). 'flash_all.bat' 스크립트를 사용하되, 휴대폰이 완전히 초기화되므로 반드시 사전에 데이터를 백업하세요.

백업 없이 데이터를 유지하고 싶다면 'flash_all_except_storage.bat' 스크립트를 사용하면 됩니다. 다만 암호화 문제로 인해 플래싱 후 데이터에 접근하지 못하는 경우가 발생할 수 있다는 점을 유의하세요.

플래싱 직후에는 이 가이드의 5~6번 단계부터 다시 진행하면 됩니다. Android 메인 버전(현재 Oreo 8.1)만 동일하다면 fastboot를 통해 빌드 버전을 다운그레이드하는 것 자체는 문제가 되지 않습니다.

참고: jasmine(Mi A2)용 파일

아래 파일들은 Mi A2(jasmine) 전용입니다. Mi A2 Lite(daisy)에는 사용하지 마세요. daisy용 파일은 이 글 앞부분의 목록을 이용하세요.

  • patched_boot 9.6.9.0 (7월 업데이트) – Magisk 17.1로 패치됨
  • patched_boot 9.6.10.0 (8월 업데이트) – Magisk 17.1로 패치됨
  • original boot.img 9.6.9.0 (7월 업데이트) – fastboot ROM에서 추출
  • original boot.img 9.6.10.0 (8월 업데이트) – fastboot ROM에서 추출