Featured image of post 高性能Androidゲーム機「Odin2」を買ったのでいつもどおりMagiskでRoot化する

高性能Androidゲーム機「Odin2」を買ったのでいつもどおりMagiskでRoot化する

目次

はじめに

AYN Odin2を買いました。

Snapdragon 8 Gen 2を搭載した高性能なAndroidゲーム機です。

Odin 2 – AYN

本体のレビューはこの辺を読んでもらうとして、今回の本題は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…をクリックしないと表示されないかも。

.apk

インストールして起動すると、「未インストール」と表示されています。やったー!これは端末がKernelSUに対応していることを表しています。

カーネルのバージョンコードを見ると、5.15.78-...となっていると思います。これを覚えておきます。

カーネルのバージョンを確認する

その後、再度GitHubのリリースを開き、先程のバージョンコードと同じimg.gzファイルを探します。同じバージョンのものがたぶん3つあると思いますが、-gz-lz4がついていないものをダウンロードします。

-gzや-lz4ではない

ダウンロードしたら、7-ZIPなどのソフトを使って、imgファイルを取り出します。

Odin2をfastbootモードで起動(電源+音量下長押し OR adb reboot bootloader)し、以下のコマンドを実行します。

fastboot boot /path/to/kernelsu.img

これにより、端末がKernelSUによりRoot権限を取得した状態で起動……

……

しない!!

FAILED

端末によっては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という名前のファイルをダウンロードします。基本的に最新のリリースで問題ないと思いますが、うまく動かないなどの問題があった場合は他のバージョンを試してみてください。

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などの設定は特に変える必要はありません。

「インストール」→「続行」と選択すると、何やら処理が始まるので、終わるまで待ちます。

ダウンロードしたGSIを選択 特に設定を変える必要はない 準備完了

処理が完了したら、Odin2をADB接続し、以下のコマンドを実行します。

adb shell sh "/storage/emulated/0/Android/data/vegabobo.dsusideloader/files/install"

コマンド実行後、以下のような通知が発生します。

画面ロックを設定している場合、PINの入力や指紋認証を要求するダイアログが表示されると思います。

このダイアログが表示されてすぐ消えてしまうことがあるので、うまくいかないときは画面ロックを一時的に無効にしてやってみてください。

通知の「再起動」を選択するとGSIが起動します。

再起動を選択すると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権限で操作できます。

adb shell → su

イメージを取り出す

Magiskパッチを当てるためにinit_bootがほしいです。

各パーティションのイメージは/dev/block/by-nameにあります。cd /dev/block/by-nameで移動してlsすると、以下のようにズラッと表示されます。init_boot_ainit_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

copiedが表示されればOK

cd /sdcardで移動してlsすると、Androidのいつものルートディレクトリにinit_boot.imgが作成されていることが確認できます。GSIにプリインストールしてあるファイルアプリなどで見ても、その存在を確認できると思います。

init_boot.img

確認したら、exitを2回実行してadb shellを終了します。

その後、以下のコマンドを実行することで、init_boot.imgがPCのカレントディレクトリにコピーされます。

この場合、C:\Users\MateChan\init_boot.imgが作られる

これで、Magiskパッチを当てるinit_boot.imgを取り出すことができました。

init_boot.imgにMagiskパッチを当てる

Odin2を再起動すると、GSIでない通常のROMが起動します。起動したらinit_boot.imgをOdin2にコピーします。

いつもどおりMagisk Managerをインストールして、「インストール」→「パッチするファイルの選択」でinit_boot.imgを選びます。

Releases · topjohnwu/Magisk

パッチが完了すると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化が完了……

……

しない!!

Command failed

ダメです!Odin2ではfastbootでのinit_bootflashがブロックされているようです。えー、確かにブートローダーはアンロックしてあるのに……。


こういうときは、fastbootdを試してみます。

fastboot reboot fastbootで、fastbootdモードが起動します。

学会カラー三色のテキストで構成されたfastbootdの画面が表示されるはずです。

この状態でもう一度さっきのコマンドを実行してみます。すると……

Finished.

焼けた!やったー!

どうやらOdin2は、init_bootをfastbootdモードで焼かないといけないようです。systemパーティションをfastbootdでないと焼けないように制限している例はよく見るのですが、init_bootも制限しているのは初めて見ました。

fastboot rebootで通常起動すると、Magiskがインストール済になっているはずです!

おわりに

ちょっと躓くポイントがありましたが、手順どおりにやれば問題なくRoot化できると思います。

安くて高性能な、おもちゃにはもってこいの端末なので、みんなもOdin2を買って弄って遊ぼう!

以上です、おわり。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。