DSU Loaderを使ってシステムを汚さずGSI・カスタムROMを起動する方法。擬似デュアルブートも可能

Dynamic System Updates (DSU) を使って、システムイメージを壊さずにGSI・カスタムロムを起動させる方法を紹介します。

データは残したままデュアルブートできる

AndroidでカスタムROMを使いたいときは、これまでだとfastboot flash system system.imgなどで直接システムイメージを上書きしてしまわないと起動ができませんでした。

ある程度開発が進んでいるならこの方法でも良いのですが、「標準ROM (Stock) のイメージが配布されていない」「ちょっとだけ試したい程度」という時には文鎮化のリスクやデータ初期化の手間があります。

そこで今回は、Android 10から搭載されたDynamic System Updates (DSU) を使って、システムイメージを焼かずにカスタムROMを起動させる方法を紹介します。

DSUを使う方法ならユーザーデータもそのままで、初期化する必要はありません。

なお、Android 11では開発者向けオプションにあるDSU Loaderを押せばGoogle製のAOSPイメージをダウンロード & インストールできます。

DSUでのGSIインストールが楽になるアプリDSU Sideloaderがリリース。root化済みならPCなしでできる – AndroPlus
DSUでのインストールを簡単にできるアプリがリリースされました。 root化済みならスマホ単体で完了 Android 10から搭載されたDynamic System Updates (DSU) を使うと、今のシステムイメージを書き換えることなくGSIを起動して使えます。…
DSUでのGSIインストールが楽になるアプリDSU Sideloaderがリリース。root化済みならPCなしでできる - AndroPlus

Android 12以降プリインストールの端末では、KernelSUを使って一時root化する方が楽です。

KernelSUを使ってboot.imgを取り出す方法 – ROM配布がない機種で安全なroot化を – AndroPlus
KernelSUを使い、root化のために必要なboot.imgを取り出す方法を紹介します。 bootを焼かずに一時root化が可能 Androidスマホをroot化する際は、一般的にはboot (もしくはinit_boot)…
KernelSUを使ってboot.imgを取り出す方法 - ROM配布がない機種で安全なroot化を - AndroPlus

【前提条件】

  • Android 10以降
  • Bootloader Unlock済み
  • Linux、Windows Subsystem for Linux (WSL)、MinGWいずれかの環境
    (下記の手順ではPowerShellとWSLを利用すると仮定して説明します)
  • Magisk をインストールしている場合は23018以上のバージョンを使う (古いと互換性問題があるため)
  • 元のシステムよりも新しいセキュリティパッチレベルのGSI (例:Android 12搭載端末でAndroid 11のGSIは使用不可)
  • microSDカード対応デバイスの場合は、microSDカードを抜いておく

システムイメージの準備

まずはGSIのシステムイメージを準備します。

GSIのイメージはこちらのサイトにいくつかまとまっています。TrebleDroid AOSP GSIだとUSBデバッグが最初から有効化されていてroot権限が使えるのでおすすめです。

デバイスに合うイメージをダウンロードしてください。

パーティションタイプはAndroid 9以降ではA/B方式に統一されているので、パーティションがAしかないデバイスでもA/B向けを選んでください。

Snapdragon SoC搭載デバイスであれば大抵はarm64・A/B向けイメージ (例:lineage-18.1-20210512-UNOFFICIAL-treble_arm64_bvS.imgなど) を選べば大丈夫です。

 

次に、simg2imgコマンドを使ってシステムイメージをDSUで使えるよう変換します。

simg2imgはAndroidのSDKか、ここのソースコードでビルドできます。

ダウンロードしたGSIイメージをsystem.imgなどと名前を変更して、simg2img system.img system_raw.imgを実行してください。

Invalid sparce~、Bad magicなどと出た場合は変換の必要がないので、system.imgのままで大丈夫です。以降のコマンドはファイル名を読み替えてください。

デバイスへコピーする

イメージのダウンロード・変換が済んだら、次はデバイス側のDSUの機能フラグを有効にします。

PowerShellで

adb shell setprop persist.sys.fflag.override.settings_dynamic_system true

を実行してください。

問題なく実行できたら何も表示されないので、次に進んでください。

 

変換したイメージを圧縮し、端末へコピーします。

変換したsystem_raw.imgがあるフォルダでShift + 右クリックしてLinux シェルを開き

gzip -c system_raw.img > system_raw.gz

を実行した後、PowerShellで

adb push system_raw.gz /storage/emulated/0/Download/

を実行してデバイスのDownloadフォルダへイメージをコピーします。

インストールする

いよいよインストールです。

system_raw.imgを右クリックしてプロパティを開き、「ディスク上のサイズ」に書いてあるバイト数をコピーしてください。

その数値を下記コマンドのXXXXXXXXXXの部分にカンマなしで入れてください。(もしくはWSL上でdu -b system_raw.img|cut -f1を実行すれば同じ数値が出ます)

デバイスの画面を点灯してロック解除した後、PowerShellでadb shellを実行して

am start-activity \
-n com.android.dynsystem/com.android.dynsystem.VerificationActivity \
-a android.os.image.action.START_INSTALL \
-d file:///storage/emulated/0/Download/system_raw.gz \
--el KEY_SYSTEM_SIZE XXXXXXXXXX \
--el KEY_USERDATA_SIZE 34359738368

を実行してください。

KEY_USERDATA_SIZEがDSUで起動したカスタムROM環境で使えるユーザーデータのサイズで、上の例だと32GBです。単位はbitなので、こちらのサイトなどで計算してください。

なお、インストール終了後に自動でDSUへ再起動させるには、

am start-activity \
-n com.android.dynsystem/com.android.dynsystem.VerificationActivity \
-a android.os.image.action.START_INSTALL \
-d file:///storage/emulated/0/Download/system_raw.gz \
--el KEY_SYSTEM_SIZE XXXXXXXXXX \
--el KEY_USERDATA_SIZE 34359738368
--ez KEY_ENABLE_WHEN_COMPLETED 1

のように–ez KEY_ENABLE_WHEN_COMPLETED 1を追加してください。

 

コマンドを実行するとロック解除が求められた後、このようにインストールが始まります。

インストールに失敗しましたと出る場合はユーザーデータのサイズを小さくすると通る場合があります。

インストール

しばらくすると「動的システムの準備ができました。使い始めるには、デバイスを再起動してください。」と通知が出るので、再起動します。

起動

うまく起動するGSIであれば、ブートアニメーションが始まり起動します。

例ではXiaomi POCO F3を使っていますが、この通りクセのあるMIUIからでも問題なくDSUを使ってGSIを起動できています。

 

あくまでGSI (Generic System Image) なので全ての機能が使えるわけではありませんし、明るさの自動調整などがうまく動かないことが多いですが、大抵はWi-FiやBluetooth、モバイルデータなどは正常に動きます。

Phh-Trebleベースなら一部デバイス向けにカスタマイズ・修正されていることがありますし、自分でMagiskモジュールを作って継ぎ足ししても構いません。

もちろんこれを機会にGSIのカスタムROMをビルドしても良いでしょう。

LOS

このままだと再起動時に元のシステムイメージに戻ってしまいますが、

adb shell gsi_tool enable

を実行すれば「スティッキー モード」になり、再起動後もGSIで起動します。

adb shell gsi_tool disable
adb shell gsi_tool enable -s
adb shell gsi_tool disable

を実行すれば戻ります。

Stock ROMのイメージ保存にも使える

カスタムROMのお試しとして便利なDSUですが、他の使い道もあります。

LineageOSのGSIなどroot権限を使えるGSIをDSUで起動すれば、こちらのコマンドを使ってStockのイメージを取り出してしまえます。

これまではStock ROMが配布されていないデバイスでbootイメージを手に入れるにはroot化かTWRPをビルドしないといけない、でもそのためにはbootイメージが必要…という卵が先か、鶏が先かという状況でしたが、DSUを使えばサクッと手に入れられます。

一時root化やQFILなど特殊な手段がなくても手に入れられるのは良いですね。

なお、ブートループ状態で取り出す場合は/sdcardを使えないので、下記のように/data/local/tmpを使うと良いです。パスは端末によって異なるので適宜変えてください。

  • adb shell
  • su
  • dd if=/dev/block/by-name/boot of=/data/local/tmp/boot.img
  • chown shell.shell /data/local/tmp/boot.img
  • (adb shell終了後) adb pull /data/local/tmp/boot.img

 

ユーザーデータやシステムイメージに影響を与えることなくカスタムROMを使えますし、Bootloader Unlock済みでAndroid 10以降のデバイスを持っている方は一度DSUでの起動をしてみてはいかがでしょうか。

Dynamic System Updates(DSU)  |  Android Developers
Dynamic System Updates(DSU)を使用すると、Android 10 以降を搭載する DSU 対応デバイスに、GSI をデバイスのシステム イメージと共存させてインストールできます。…

DSUでのGSIインストールが楽になるアプリDSU Sideloaderがリリース。root化済みならPCなしでできる – AndroPlus
DSUでのインストールを簡単にできるアプリがリリースされました。 root化済みならスマホ単体で完了 Android 10から搭載されたDynamic System Updates (DSU) を使うと、今のシステムイメージを書き換えることなくGSIを起動して使えます。…
DSUでのGSIインストールが楽になるアプリDSU Sideloaderがリリース。root化済みならPCなしでできる - AndroPlus

はてブ Pocket Mastodon タイトルとURLをコピー
カテゴリ:

技適の無い機器の使用は自己責任です。
中国版デバイスは日本語に対応していないものが多いため、ADBコマンドでの日本語化が必要です。
root化済み・非rootそれぞれのやり方はこちらの記事を参考にしてください。