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

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イメージをダウンロード & インストールできます。

 

【前提条件】

  • Android 10以降
  • Bootloader Unlock済み
  • Linux、Windows Subsystem for Linux (WSL)、MinGWいずれかの環境
  • Magiskなし (今のところ互換性に問題があるため)

システムイメージの準備

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

GSIのイメージはこちらのサイトにいくつかまとまっています。

phhusson/treble_experimentations
Notes about tinkering with Android Project Treble. Contribute to phhusson/treble_experimentations development by creating an account on GitHub.…

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

パーティションタイプは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を実行してください。

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

デバイスへコピーする

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

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

を実行してください。

 

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

変換したsystem_raw.imgがあるフォルダで

gzip -c system_raw.img > system_raw.gz

を実行した後、

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

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

インストールする

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

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 $(du -b system_raw.img|cut -f1) \
--el KEY_USERDATA_SIZE 8589934592

を実行してください。(WSLの場合はadb.exeに変えてください)

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

コマンドを実行するとこのようにインストールが始まります。

インストール

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

起動

うまく起動する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など特殊な手段がなくても手に入れられるのは良いですね。

 

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

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

はてブ Pocket Mastodon タイトルとURLをコピー

カテゴリ:
コメントフォーム右上の「ログイン」メニューで各種SNSアカウントでログインできます。
匿名でコメントしたい場合は、名前とメールアドレスを入力した後「アカウントを作成せず投稿する」にチェックを入れてください。Disqusに登録すると、返信通知を受け取れます。

当サイトで紹介するMODやアプリなどの内、システムファイルの改変やシステムに深く関わるものはroot化やリカバリが必須となります(root化の必要なしと明記している場合は除く)。導入はバックアップを取ってから自己責任で行ってください。また、技適の無い機器の使用は自己責任です。