(成功)Android One S3(SHARP)のROM吸い出し&root化
目的
Android One S3(SHARP)のroot化のためのROMの吸い出しです。今回行った方法では、端末本体とSDカード(10GB以上)、他のAndroid端末(SDカードをフォーマットしてデータを移動するだけなので、おそらくパソコンでも大丈夫)が必要です。
注意
この記事に書いてある内容を行なって端末が壊れたり不安定になったりしたとしても筆者は一切の責任を負いません。特にスロット指定をミスったりすると一瞬で文鎮化するので注意です。
root化の細かい手順や開発者向けオプションなどの細かい手順は説明していません。一旦はROMの吸い出しをメインに紹介しています。
作業した後に思い出しながら記事を書いているので、英語で表記されているボタンなどの内容を日本語で書いていたり、細かい表記揺れとかがあるかもしれません。適宜読み替えをお願いします。
ブートローダーアンロック
この端末はSHARP製ですが、特にブートローダーアンロックに対する制限はかかっていないようで、
開発者向けオプション→OEM ロック解除をオンにする→fastbootモードで再起動→fastboot flashing unlockを実行して端末に表示された指示に従う。
こんな感じに普通のやり方でブートローダーアンロックができました。もちろんデータは消えて初期化されます。
boot.imgをどうやって入手しよう...
Androidをroot化する際、定番のMagiskを導入するには、boot.imgが必要なんですが、この端末に関してはSHARPやキャリアからはROMが全く公開されていません。結構探したがネット上にもありませんでした。ということは自分で端末からROMを取り出す必要があるのですが、それにはroot権限があることが必須です。幸いこの端末はProject Trebleに対応しているので、root化済みのGSIを導入することで一時root権限をとることができます。
ちなみにGSIというのはGeneric System Imageの略で、Project Trebleというのに対応した端末で使用できる汎用的なシステムのことです。
DSUでGSIを書き込んで吸い出す(失敗)
DSUとはDynamic System Updateの略で、既存のシステムに変更を加えることなく端末にGSIを書き込んで試せるという画期的な仕組みです。
試しにDSU Sideloader(DSUでのGSI導入が簡単になるアプリ)をインストールしてみたんですが、どうやらこの端末は動的パーティションに非対応のようでそもそも導入ができませんでした。こうなるともう本体にそのまま書き込むしかなくなるんですよねー...でも本体に書き込むと純正ROMが上書きされちゃうので本末転倒...さてどうしたものか。
BスロットにGSIを導入して吸い出す(成功)
DSUが使えないとなるともう端末にイメージを書き込んでみるしかGSIを起動する手段はないのですが、普通に書き込んでしまうと元々のROM自体が上書きされちゃうので本末転倒です。
ただ、このスマホはA/Bスロット形式になっているので、Bスロットだけを書き換えてしまえば元々のROMを失わずにGSIを起動できます。
書き込み
今回はPhhussonさんのAOSP GSIの「system-squeak-arm64-ab-vndklite-vanilla.img.xz」を使いました。ダウンロードして解凍しておきます。
Release AOSP 12.0 v402 · phhusson/treble_experimentations · GitHub
書き込み手順は具体的にはこんな感じ
adb reboot bootloader
①まずブートローダーに移動して、
fastboot --set-active=b
②Bパーティションをアクティブにします。
fastboot --slot=b erase system
fastboot --slot=b flash system system-squeak-arm64-ab-vndklite-vanilla.img
③そして最後にsystemパーティションにGSIを書き込んでいきます。コマンド実行後にスロットBはないみたいな注意が出ますがちゃんとBに書き込めているので大丈夫です。(②でBパーティションをアクティブにしているので"--slot=b"はいらない気もしますが念の為。)
④イメージを書き換えた後は初期化をする必要があるので、リカバリーモードに入ってWipe data/factory resetから初期化をして再起動します。
GSIで起動
うまくいっていれば、クリスマスツリーのブートロゴとともにAndroid 12のGSIが起動するはずです。パスワードとかの画面が出た場合は初期化に失敗してます。ブートループなどの場合は書き込みをやり直してみてください。
ROMの吸い出し
普通はADBでシェルに入ってROMを吸い出していくのですが、なぜかこの端末はGSI上でUSB接続を認識しない上、開発者向けオプションも不安定で有効化できません。
というわけで、Termux(ターミナルアプリ)をSDカードからインストールしてROMを吸い出していくことにしました。ホーム画面に戻ったりアプリを切り替えると再起動してしまうことが多いようです。その場合は途中からやり直せば(書き込み中とかじゃなければ)OKです。
あらかじめ他の端末でSDカードを外部ストレージとしてフォーマット(パソコンの場合はFAT32でフォーマット)し、
Termux | F-Droid - Free and Open Source Android App Repository
こちらからダウンロードできるTermuxのAPKファイルを移動させておきます。(ページの下の方の「提案」と書いてあるリリースの「APKをダウンロード」をクリックしてダウンロードします。)
端末にSDカードを差し込み、「ファイル」アプリを開いて移動しておいたAPKをインストールします。(...→内部ストレージを表示を押さないと出ない場合があるようです。)成功すればアプリ一覧に「Termux」が増えているはずです。
Termuxを起動し、以下の手順でROMを吸い出していきます。
su
①このコマンドを実行してroot権限の状態にします。
②おそらく画面が遷移して確認画面が出ますので、「このアプリからはいつも許可」に相当するオプションを選んで許可を押します。(ここでTermuxに戻るとフリーズしてブートアニメーションの画面が出たり再起動したりするのでもう一度Termuxを開いてください。)
③もう一度suコマンドを実行します。今度は確認画面に移動することなくroot状態になるはずです。(コマンドの前の$マークが#になっていればOK。)
cd /sdcard
mkdir s3imgbackup
④吸い出したイメージを保存するフォルダを内部ストレージに作ります。
ls /dev/block/by-name/
⑤吸い出すROMの一覧を確認します。こんな感じの結果が出るはず。userdata、mmcblk0、mmcblk0rpmbは容量の関係上吸い出さないので覚えておきます。

for part in /dev/block/by-name/*; do name=$(basename "$part"); [ "$name" != "userdata" ] && echo "$name" && dd if="$part" of="/sdcard/s3imgbackup/$name.img"; done
⑥確認ができたらいよいよROMを吸い出していきます。このコマンド(全部一行です)を実行します。イメージがどんどん吸い出されていきますがここで注意することが一つ。さっき確認した吸い出さないROM(このコマンドではuserdataはスキップされるのでmmcblk0とmmcblk0rpmb)の吸い出しが始まったらなるべく早く中止してスキップしてあげます。(そうしないと容量が足りなくなる。)CTRLを押してからcキーを押すと中止してスキップできます。ちなみに僕の環境ではmmcblk0rpmbは開始してすぐ失敗したので無視しました。
ls /sdcard/s3imgbackup
⑦コマンドが完了したら内部ストレージのs3imgbackupフォルダに吸い出されたROMデータがたまっています。
⑧後はTermuxを閉じてファイルアプリを開き、SDカードにこのフォルダを移動すればROMの吸い出しは完了です!(画面が暗くなってスリープ状態になるとクラッシュするので注意。)
⑨パソコンからでもいいので、GSIイメージの内容で上書きされてしまっているsystem_b.imgは削除しておきましょう。
Bパーティションの内容を戻しておこう
fastboot --set-active=b
fastboot --slot=b erase system
fastboot --slot=b flash system system_a.img
基本的にsystem_aとsystem_bは同等のものなので、Bスロットにはさっき吸い出したsystem_a.imgを書き込みます。書き込み後はリカバリモードからの端末の初期化を忘れずに。そのまま再起動してみて、SHARPのロゴで純正ROMで起動することを確認します。
fastboot --set-active=a
最後にアクティブパーティションをAスロットに変更します。
これで端末は純正の状態に戻りました。
吸い出したROMを確認

吸い出したROMの一覧はこんな感じです。system_b.imgはsystem_a.imgをコピーしてリネームして作りました。
root化に成功
ここまで来れば後は通常通りMagiskを入れてboot_a.imgにパッチして書き込むだけでroot化は完了です。

こんな感じでroot化に無事成功しました!!