Gadgets

Android Generic System Imageを焼くメモ

Gadgets
スポンサーリンク

関連記事

どんな記事?

Android端末にGSIベースのROMを焼く方法について説明しています。
当記事の内容はすべて自己責任でお願いします。
(便利だね、自己責任って言葉。)

2022/11/08 追記
ちょっと内容が古くなってるかなと思うのでそのうち追記できたら…できたらします…

Generic System Image(GSI)ってなに?

Generic System Image(GSI)は、Android オープンソース プロジェクト(AOSP)の未変更のコードを使用した「純粋な Android」の実装です。各種の Android デバイスで実行できます。

https://developer.android.com/topic/generic-system-image?hl=ja

これを使うことで、手持ちのデバイス専用のROMが開発されていなくても、手軽にカスタムROMを焼いたり実行することができます。でも100%使えるわけではないので注意。

満たす必要がある条件

  • リリース時のOSがAndroid 8.0以降が望ましい
  • Project Treble対応
  • BootloaderのUnlockが可能

などが挙げられます。順に説明します。

リリース時のOSがAndroid 8.0以降

この条件は次項のProject Treble対応とも関連します。
Android 8.0以降のバージョンでリリースされた端末はProject Treble対応が必須なため条件を満たしますが、アップデートで8.0になった場合は注意が必要です。

Project Treble対応

メーカーごとの実装を切り離し、Androidフレームワークのみをアップデート可能にする仕組みのことです。
これによりGSIはデバイスごとの低層ソフトウェアを意識せず、幅広い端末に対応できることになります。

対応しているかどうかは以下アプリで確認することができます。

Project Treble:Supportedになれば対応しています。
Seamless System Updates:SupportedとなっていればA/BのROMを、
UnsupportedならA-onlyのROMを選んで焼きます。

BootloaderのUnlockが可能

GSIにかぎらず、カスタムROMを焼くにはBootloaderのUnlockが必須になります。
これはデバイスにより方法が異なる場合がありますので、各自よく調べてください。
国内大手キャリアから販売されている端末はUnlockできないものがほとんどかもしれません。
SIMフリー端末でしたらASUSなどはUnlockが可能のようですが、販路や時期によって違うかも。
またBootloaderのUnlockをすると基本的にはデバイスの保証が切れることにも注意してください。

Generic System Imageってどこにあるの?

GitHubにまとまっています。
各ROMごとに特徴がありますが、今回は割愛。

ROMファイルいっぱいあるけどどれ使うの?

デバイスのSoCや同梱されるアプリケーションによって違います。

こちらにあるAOSPイメージで説明しましょう。

例えばこのファイル。
system-roar-arm64-ab-gapps.img.xz

これはarm64デバイス用の、Seamless System Updatesに対応している(A/B)、
GAPPSが同梱されたROMという意味です。

arm, a64, arm64などはSoCのアーキテクチャです。
今はほとんどの端末がarm64かと思いますが、しっかり確認してください。

system-roar-arm64-aonly-vanilla.img.xz
であれば、arm64でa-onlyの、GAPPSがない(純粋なイメージをバニラと表現します)ROMです。

こちらのBlessROMsはもう少しややこしい。

[filename] -[アーキテクチャ] – xyZ.img.xz
という書式になっています。

アーキテクチャについては前述の通りです。

x には a か b が入ります。
b = a/b
a = a-only

y には v, o, g, f が入ります。
g = gapps (通常のGAPPS)
o = gapps-go (Android GO 向けの軽量版)
v = vanilla (GAPPSを含まない)
f = floss (オープンソースのGAPPS互換ソフト)


Z には N, S, Zが入ります。
N = no superuser (非root)
S = superuser included (root取得済み)
Z = added enhanced dynamic root (動的ルート、有効無効を再起動せずに切り替えられる)

bless-v300m-210225-arm64-agZ.img.xz

というファイルであれば、
ARM64, A-only, GAPPS, dynamic root という感じです。

GSIを焼いてみよう!

前提条件をすべて満たしたら、ROMを焼いてみましょう。

bootloaderをUnlockするとデバイスは初期化されます。

TWRPというカスタムリカバリを使って焼く方法もありますが、
そもそも用意されていないデバイスも多いですからfastboot状態で焼く説明をします。

PCに必要なドライバが入っていることが前提で進めます。
僕はWindowsで作業してましたが、adb/fastbootが使えればmacOSでもできると思います。

まずはBootloaderを起動しましょう。
起動の仕方はデバイスによって異なりますが、ボリュームダウンボタンを押しっぱなしで電源を入れるのが一般的な気がします。あるいはAndroidが起動していれば、接続したPCのターミナルからadb reboot bootloaderするのもいいでしょう。

ここからは後に引けませんので注意してください。

まずはシステムパーティションのデータを消します。

fastboot erase system

そのあとダウンロード、解凍したGSIイメージファイルを焼きます。
時間がかかりますが途中で止めたりしないでください。

fastboot flash system image.img

万が一Systemパーティションのサイズが足りずGAPPS同梱のイメージなどが焼けない場合、デバイスにもよりますがUMIDIGI端末だとproductパーティションのサイズを0にすることで焼くことができました。

fastboot delete-logical-partition product
fastboot create-logical-partition product 0

システムイメージが正常に焼けたら、userdataをワイプします。

fastboot -w

上記作業が終了したら

fastboot reboot

で再起動し、うまく起動すれば成功です!
ただしデバイス専用ROMではないため、NFCやBluetooth、GPS、通信などがうまく動作しない可能性があることは忘れないでください。

なお、productパーティションを削除するデメリットと、それを回避する方法については以下の記事を参考にしてください。

FAILED (remote: ‘This partition doesn’t exist’) って出るんだけど?

fastbootd というモードで再起動すると成功するかもしれません。
方法は簡単。fastboot状態でもう一度fastbootに再起動します。

fastboot reboot fastboot

fastbootdの詳細はこちら。

タイトルとURLをコピーしました