目次
はじめに
AYN Odin2を買いました。
Snapdragon 8 Gen 2を搭載した高性能なAndroidゲーム機です。
本体のレビューはこの辺を読んでもらうとして、今回の本題はOdin2のMagiskによるRoot化です。
Odin2について
まず、Odin2はデフォルトでブートローダーがアンロックされています。やったー!
しかし、2023年12月現在、ファームウェアが公式には公開されていません。したがって、Odin2をroot化するためには、何らかの方法を使って一時Root状態で起動するか、本体から必要なimgファイル (init_boot)を取り出す必要があります。
KernelSUを使う(失敗)
fastboot boot
コマンドを使用してKernelSUをブートし、一時的にRoot権限を取得した状態で起動させ、Magisk Managerから直接Magiskをインストールすればよさそうです。カスタムリカバリのない端末では、今のところこれが一番楽なRoot化の方法だと思います(端末がKernelSUに対応していればですが)。
GitHubのリリースページからKernelSUのapkをインストールします。Show all…をクリックしないと表示されないかも。
インストールして起動すると、「未インストール」と表示されています。やったー!これは端末がKernelSUに対応していることを表しています。
カーネルのバージョンコードを見ると、5.15.78-...
となっていると思います。これを覚えておきます。
その後、再度GitHubのリリースを開き、先程のバージョンコードと同じimg.gzファイルを探します。同じバージョンのものがたぶん3つあると思いますが、-gz
や-lz4
がついていないものをダウンロードします。
ダウンロードしたら、7-ZIPなどのソフトを使って、imgファイルを取り出します。
Odin2をfastbootモードで起動(電源+音量下長押し OR adb reboot bootloader
)し、以下のコマンドを実行します。
fastboot boot /path/to/kernelsu.img
これにより、端末がKernelSUによりRoot権限を取得した状態で起動……
……
しない!!
端末によってはfastboot boot
コマンドに対応していないものがあり、Odin2はどうやら対応していないようです……。
fastboot flash boot
してKernelSUを焼いてしまえばよさそうですが、ストックイメージのバックアップがない状態で焼くのはちょっと怖いなあ。どうしようかなあ。
DSUを使う(成功)
そこで、少し面倒ですが、DSU (Dynamic System Update)という機能を使う方法を試してみます。
DSUとは、主にデバッグなどの用途に使われる、現在使用しているものと別のsystemイメージを一時的に起動できる機能です。
この機能を用いて、Root権限のあるGSI(どの端末でも動くsystemイメージ)を起動することで、SUでinit_bootを抽出してMagiskを適用しようという作戦です。
現在のスロットを確認する
まず、現在起動しているほうのスロットにMagiskを適用したいので、端末がABどちらのスロットで起動しているかを調べる必要があります。
最近の端末はOSを入れるスロットがAとBのように2つ備わっていることが多く、これによりOSを起動しながらシステムアップデートを適用できるほか、アプデに失敗したときのロールバック等を簡単に行えるようになっています。
すなわち、端末にはOSが2つ乗っているということであり、普段はその片方のみを使っているということです。
Odin2をADB接続し、以下のコマンドを実行して現在起動しているスロットを確認します。
adb shell /bin/getprop ro.boot.slot_suffix
# _a or _b
これで_a
または_b
が返ってくるので、その値を覚えておきます。
GSIイメージのダウンロード
SUをデフォルトで実行できるGSIイメージをダウンロードします。
おすすめはTrebleDroidのAOSPです。
Releases · TrebleDroid/treble_experimentations
system-td-arm64-ab-vanilla.img.xz
という名前のファイルをダウンロードします。基本的に最新のリリースで問題ないと思いますが、うまく動かないなどの問題があった場合は他のバージョンを試してみてください。
ダウンロードしたら、Odin2の適当なディレクトリにコピーしておきます。
DSU-Sideloader
以下からDSU-Sideloaderをダウンロード・インストールします。最新のapp-release.apk
で問題ないです。
Releases · VegaBobo/DSU-Sideloader
インストール後、DSU-Sideloaderを起動します。
起動したら、「インストールするファイルを選択」から、先程ダウンロードしたGSIを選択します。
init_bootを抽出することだけが目的なので、Userdata sizeやImage sizeなどの設定は特に変える必要はありません。
「インストール」→「続行」と選択すると、何やら処理が始まるので、終わるまで待ちます。
処理が完了したら、Odin2をADB接続し、以下のコマンドを実行します。
adb shell sh "/storage/emulated/0/Android/data/vegabobo.dsusideloader/files/install"
コマンド実行後、以下のような通知が発生します。
画面ロックを設定している場合、PINの入力や指紋認証を要求するダイアログが表示されると思います。
このダイアログが表示されてすぐ消えてしまうことがあるので、うまくいかないときは画面ロックを一時的に無効にしてやってみてください。
通知の「再起動」を選択するとGSIが起動します。
GSIでの操作
GSIが起動したOdin2を再度ADB接続します。
私の場合はGSI起動時にUSBケーブルでのADB接続がうまくいかなかったので、ワイヤレスデバッグで接続しました。以降はGSIでのUSB接続がうまくいかない例で書きます。
PCと同じWi-Fiに接続し、「Developer options」→「Wireless debugging」→「Use wireless debugging」をオンにします。
「IP address & Port」が表示されるので、PCで以下のようにコマンドを実行して、表示されたIPアドレスとポートに接続します。
adb connect (表示されたアドレス)
adb devices
で、デバイスが確認されていることを確認します。
SUがデフォルトで有効なGSIであれば、この状態からRoot権限で操作できます。
イメージを取り出す
Magiskパッチを当てるためにinit_boot
がほしいです。
各パーティションのイメージは/dev/block/by-name
にあります。cd /dev/block/by-name
で移動してls
すると、以下のようにズラッと表示されます。init_boot_a
とinit_boot_b
の存在も確認できます。
このディレクトリに移動した状態で、先程の手順で確認したスロットのABに応じて、以下のコマンドを実行します。
# _a だった場合
dd if=init_boot_a of=/sdcard/init_boot.img
# _b だった場合
dd if=init_boot_b of=/sdcard/init_boot.img
cd /sdcard
で移動してls
すると、Androidのいつものルートディレクトリにinit_boot.img
が作成されていることが確認できます。GSIにプリインストールしてあるファイルアプリなどで見ても、その存在を確認できると思います。
確認したら、exit
を2回実行してadb shell
を終了します。
その後、以下のコマンドを実行することで、init_boot.img
がPCのカレントディレクトリにコピーされます。
これで、Magiskパッチを当てるinit_boot.img
を取り出すことができました。
init_boot.imgにMagiskパッチを当てる
Odin2を再起動すると、GSIでない通常のROMが起動します。起動したらinit_boot.img
をOdin2にコピーします。
いつもどおりMagisk Managerをインストールして、「インストール」→「パッチするファイルの選択」でinit_boot.img
を選びます。
パッチが完了するとOdin2のDownloadディレクトリにmagisk_patched-****.img
ができているので、これをPCに移動します。
パッチしたinit_bootを焼く
あとはもう簡単です。
Odin2をbootloaderで再起動して、起動しているスロットに応じて以下のコマンドを実行します。
# _a の場合
fastboot flash init_boot_a /path/to/magisk_patched-***.img
# _bの場合
fastboot flash init_boot_b /path/to/magisk_patched-***.img
はいこれでRoot化が完了……
……
しない!!
ダメです!Odin2ではfastbootでのinit_boot
のflash
がブロックされているようです。えー、確かにブートローダーはアンロックしてあるのに……。
こういうときは、fastbootdを試してみます。
fastboot reboot fastboot
で、fastbootdモードが起動します。
学会カラー三色のテキストで構成されたfastbootdの画面が表示されるはずです。
この状態でもう一度さっきのコマンドを実行してみます。すると……
焼けた!やったー!
どうやらOdin2は、init_bootをfastbootdモードで焼かないといけないようです。systemパーティションをfastbootdでないと焼けないように制限している例はよく見るのですが、init_bootも制限しているのは初めて見ました。
fastboot reboot
で通常起動すると、Magiskがインストール済になっているはずです!
おわりに
ちょっと躓くポイントがありましたが、手順どおりにやれば問題なくRoot化できると思います。
安くて高性能な、おもちゃにはもってこいの端末なので、みんなもOdin2を買って弄って遊ぼう!
以上です、おわり。