Pixel6･Pixel6 ProでRootを取る

# 注意
### 自己責任でお願いします
- **初期化されますのでバックアップ必須です**
- **Android12、13を想定しています！！**
    - バージョンが上がるごとにイメージの構造が変わる事が多いため､ここに記載されているものが使えない場合があります
- **この記事に添付している画像はPixel6Pro**のアップデート時のものです

# 用語
- `PCからコマンド~を実行`は以下のソフトウェアで入力して実行する想定
    - Windows
        - コマンドプロンプト
        - Powershell
        - Git bash
    - Mac・Linux
        - シェル(Bash)
        - Powershell7

- `fastbootモードに入る`は以下のどちらかから行う
    - USBデバッグモードにしPCからコマンド`adb reboot fastboot`を実行
    - 電源オフにして`電源ボタン + ボリュームダウンボタン`を同時押下

# 環境構築

  1. ドライバ(Windowsのみ)とAndroidSDK Platform-Toolsをダウンロード
      - [Google USB ドライバを入手する](https://developer.android.com/studio/run/win-usb)
      - [SDK Platform-Tools リリースノート](https://developer.android.com/studio/releases/platform-tools)

  2. 以下のディレクトリにZipファイルの中身をコピー(ディレクトリは任意で変えてしまって構いません)
      - Windowsの場合
          - USBドライバ: `C:\AndroidSDK\usb_driver`
          - SDK Platform-Tools: `C:\AndroidSDK\platform-tools`
      - Mac･Linuxの場合
        - SDK Platform-Tools: `~/AndroidSDK/platform-tools`
  3. 環境変数を以下の通りに設定する 
      - Windowsの場合
          - システム環境設定のPathに`C:\AndroidSDK\platform-tools`を追加する
          ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/b399bf9d-99a6-66a3-6857-fa73e318a257.png)
          ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/1c7577d5-a9a8-35db-c458-0f8e29bd25ef.png)

      - Mac･Linuxの場合
        - シェルを開き`vi ~/.bashrc`を実行して`export PATH=$PATH:$HOME/AndroidSDK/platform-tools`を追記
            ※viが起動したら`i`で挿入モードになるので追記し､完了したらESCキーを押して`:wq`を入力する(別のテキストエディタ等で該当のファイル編集しても良い)
  4. 念の為PCを再起動し､`adb version`コマンドを実行してVersionが31.0.3以上になっていることを確認する
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/b3c0449f-0dba-6026-fa31-00a0647b015b.png)

# Bootloader UnlockからRoot化まで
:::note warn
注意
著者は以下の作業を2021年11月以降実施していないので手順の最新化・最新版での検証ができていません
:::

### 1. ダウンロード
  1. Pixel6またはPixel6 Proのファクトリーイメージを**自分の端末のバージョンと同じバージョン**をダウンロードする｡ [リンク](https://developers.google.com/android/images#oriole)
  2. PixelからMagiskの最新版のAPKをダウンロード､インストールする｡ [リンク](https://github.com/topjohnwu/Magisk#Downloads)
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/793a593b-03a1-00e6-1afc-b94f7eb65d67.png)


### 2. パッチ当て
1. ダウンロードしたZIPからBoot.imgとvbmeta.imgを取り出して､Boot.imgのみPixelにコピーする｡
2. Magiskでインストールを選択､"パッチするファイルの選択"を選んでBoot.imgを選ぶ｡出力されたファイルをPCに転送する｡(magisk_patched-xxxxx_xxxxx.img)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/9064b56e-3a3b-b280-0482-d362867bcf77.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/fa1ce81b-0b72-8112-48e4-1ddac6ef629b.png)

### 3.BootloaderUnlockとBoot.imgの書き込み
1. fastbootモードに入る
2. PCからコマンド`fastboot flashing unlock`を実行し､BootloaderUnlockを行う

    :::note alert
    ここでデータが初期化されます


3. `fastboot flash --disable-verity --disable-verification vbmeta vbmeta.img`コマンドを実行
    ※もしかしたらこの手順は最新版のMagiskであれば不要かもしれない 
4. `fastboot boot magisk_patched-xxxxx_xxxxx.img`コマンドを実行
5. 起動したらMagiskを起動してインストール､直接インストールを選択して完了したら再起動

    ※ 自分は`fastboot boot magisk_patched-xxxxx_xxxxx.img`ではなく`fastboot flash boot magisk_patched-xxxxx_xxxxx.img`をやったあとにFactory resetしました｡

# Rootを維持してアップデートを適用する

### 0.前提
- AndroidSDKのツールがすでにインストールされている
- adbのバージョンが31.0.3以上
- Googleが最新版のファクトリーイメージを公開している
- Root化はできており､Magiskを使用している

### 1.ダウンロード

1. Pixel6またはPixel6 Proのファクトリーイメージをダウンロードする｡ [リンク](https://developers.google.com/android/images#oriole)

    ※以下注意点
    - 最新バージョンはxxxx.YYMMDD.nnnになっているのでYYMMDDの日付とnnnの連番から判断する
    - AT&TやVerizon記載のものは海外キャリア販売向けROMなので日本向け端末は無印ROMを選択

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/f87d04c2-92da-8e5b-e7a4-e2563f93169e.png)

### 2.パッチ作成と編集
1. ダウンロードしたZIPからBoot.imgを取り出して､Pixelにコピーする｡
    ![get-bootimg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/dc8186d5-2884-52ba-c3cf-5a125fdd6f61.png)

2. Magiskでインストールを選択､"パッチするファイルの選択"を選んでBoot.imgを選ぶ｡(直接インストールと間違えないように)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/9064b56e-3a3b-b280-0482-d362867bcf77.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/fa1ce81b-0b72-8112-48e4-1ddac6ef629b.png)

3. 出力されたファイルをPCに転送する｡(Download/magisk_patched-xxxxx_xxxxx.img)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/c1e19803-25db-784a-c1d8-d38d2b5db051.png)

4. zip内にあるflash-all.bat(Windows)
またはflash-all.sh(Mac,Linux)のどちらかのバッチファイルをテキストエディタで開き以下の該当行を書き換える(037verの場合)
    - 書き換え前: `fastboot -w update image-raven-{バージョン}.zip`
    - 書き換え後: `fastboot update image-raven-{バージョン}.zip`

    ※flash-allを編集せずGoogleChromeとFlashToolを使ってアップデートすることもできるが､参考になるサイトが多いので割愛
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/64b65bd7-c80c-b613-0adc-c84c21d4a42f.png)


5. fastbootモードに入り､USBをつないでバッチファイルを実行すると､アップデートが実行される

### 3.再Root化
1. fastbootモードに入る
2. PCからコマンド`fastboot boot magisk_patched-xxxxx_xxxxx.img`を実行
3. 起動したらMagiskを起動してインストール､直接インストールを選択して完了したら再起動 
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/d785a968-3a1c-7002-eded-d59958be9888.png)

### ex. 成功したアップデートの実施履歴

自分が実施したアップデートビルド履歴(成功の記載があっても､実施の際は自己責任でお願いします)

- SD1A.210817.036 👉 SD1A.210817.037
- SD1A.210817.037 👉 SQ1D.211205.016.A1
- SQ1D.211205.016.A1 👉 SQ1D.220105.007
- SQ1D.220105.007 👉 SQ1D.220205.004
- SQ1D.220205.004 👉 SP2A.220305.013.A3

  ※バッチ実行したところブートループになったが､バッチを実行し直したところ無事アップデート完了した｡

- SP2A.220305.013.A3 👉 TP1A.220624.021

  ※--disable-verity --disable-verificationをつけているとブートループになる

- TP1A.220624.021 👉 TQ1A.230105.002
- TQ2A.230305.008.E1 👉 TQ2A.230405.003.E1

    ※TQ1A.230105.002からTQ2A.230305.008.E1へOTAアップデートしてしまったが、上記のアップデートの手順を踏むことでRootを再取得できた

- (Rootなし) 👉 UQ1A.231205.015

    ※Boot.imgを適用してもRoot化できなかったのでスロットを変更した
    ```shell
        fastboot --set-active=other
        flash-all.bat
        fastboot flash boot magisk_patched-XXX.img
    ```


# Play Integrity Fix
- Root化対策されているアプリを動作可能にできる(Google Payも)
- 公式版だと一部アプリが起動できないので、対策版に関しては下記リンクに詳細な情報があります
    [リンク](https://note.com/famous_lotus147/n/n7cb1b157580c)

# 余談
Android11以降/systemをマウントが難しくなりました｡

- Adawayを使用したい場合､Magiskの設定にあるSystem hostsモジュールを入れる
- シャッター音をオフにしたい場合､以下のツールを導入する
    - [AndroPlus-org/magisk-module-pixel6 - Github.com](https://github.com/AndroPlus-org/magisk-module-pixel6) 

# 参考
1. [How To Guide Firmware is out! Get your root on!](https://forum.xda-developers.com/t/firmware-is-out-get-your-root-on.4353565/)
2. [Universal SafetyNet Fix 2.2.0、Magisk CanaryのZygiskに対応。Android 12でも動作可能](https://androplus.org/entry/universal-safetynet-fix-android-12/)
3. [AndroPlus-org/magisk-module-pixel6 - Github.com](https://github.com/AndroPlus-org/magisk-module-pixel6) 
4. [【root】Google Pixel 6 Part01 ](https://egg.5ch.net/test/read.cgi/smartphone/1635667916/29)