中級者~上級者向け
DSUを使って抜き出す必要があるもの
XiaomiやPixel等の開発に寛容なメーカーはすべての機種に対してファクトリーイメージが用意されており、それを使えば簡単にMagisk導入ができるが、ほとんどのメーカーはそんなことをしておらず、Rootを取りたい場合は自分で端末からイメージを抜き出す必要が出てくる。
Xiaomiの場合でも、キャリア版機種はXiaomiが公開していないキャリア版独自のROMが使われており、グローバル版とは使いまわしができない。また完全なキャリア版のROMに戻すこともできなくなるのでこういう場合にも自分でファームを抜き出す必要が出てくる。
用意するもの
- ブートローダーアンロック済みの端末
- DSUに対応している(Android10以上)
- ADB fastboot環境のあるPC
- USBケーブル
- ある程度のADB、Linuxシェルコマンドの知識
- DSU sideloader
- suが使えるGSIイメージ
- 基本的にlineage-xx.x-xxxxxxxx-UNOFFICIAL-[arm64_bvS].img.xzをダウンロードする。vndkliteやbgSはイメージを抜き出すだけなら不要です。
手順
ブートローダーアンロックする
「機種名 ブートローダーアンロック」「メーカー名 ブートローダーアンロック」等でググって方法を探し、ブートローダーアンロックする。
出てこない場合は諦めてください。
AQUOS FCNT 京セラ 等日本メーカーは絶対にできないので諦めてください。
Bootloader unlocking - Wikipedia
ブートローダーアンロックせずにDSUを起動させようとすると完全に文鎮化します。全て自己責任です。
現在実行中のスロットの確認
最近(Android12~)の端末は2つのスロットを持っており、アップデートごとに切り替える方式になっています。
AとBの2つに分かれているので、それぞれファイルは別のものになっており、間違ったスロットのものを抜き出して使うと文鎮化してしまうので現在のスロットを確認することはとても重要です。
A/B(シームレス)システム アップデート | Android オープンソース プロジェクト | Android Open Source Project
fastbootモードで起動させ以下コマンドを実行します。
fastboot getvar current-slot
画像の場合、bですね。これをよく覚えておきましょう。端末、アプデ状況によって異なるので確実に確認してください。
DSU sideloaderのインストール
リリースページの[app-release.apk]をダウンロードする。なまえがわかりづらいのでDSUsideloader.apkなどに変更することをおすすめする。
普通のAPKファイルなので、抜き出したい端末にインストールする。
アプリを開きます。
初回起動時はストレージ設定が必要になります。「設定」を押します
ファイルマネージャーが開くので、「新規フォルダを作成」を押します。適当に、「dsu」という名前のフォルダを作ります。(名前は何でもいいです)
作成したフォルダを開き、「このフォルダを使用」を押します。許可しますか?というポップアップが出てくるので「許可」を押します。
ブートローダーアンロックしとけよという注意書きが出てくるので「続行する」をおします。これで初期設定は完了です。
右上の歯車から設定を開けます。MicroSDカードを使っている場合はインストール処理で失敗する場合があるので1をオンにしてください。
RAMが少ない機種や中華UIの機種はスリープ状態になるとタスクキルされインストールが中断されてしまうことがあるので2をオンにしておくとよいでしょう。
DSUのインストール①
端末にGSIのROMファイル(lineage~.img.xz)をコピーします。解凍せず、xzファイルのままで問題ないです。インストールに失敗する場合があるのでMicroSD等の外部ストレージにはコピーしないでください。内部ストレージ直下、または作成したdsuフォルダ内にコピーすることをオススメします。
「インストールするファイルを選択」を押します。ファイルマネージャーが開くので、コピーしたROMファイルを選びます。
![]()
ここを押すと上のフォルダ(=内部ストレージ直下)に行きます。
選択出来たら「userdata size」のボタンを押し、32GB程度入力します。
boot.img/init_boot.imgのみを抜き出すだけだったらデフォルトのままで問題ないですが、ファームウェア全部抜き出す場合は多めに取っておくとよいです。
1の「インストール」を押します。2の続けるを押し、インストールします。
プログレスバーが進みます。
DSUのインストール②
インストール準備が完了すると、「コマンドを表示」ボタンが出てきます。
この状態でPCとADBで接続し、コマンドプロンプトから以下のコマンドを実行します。
adb shell sh "/storage/emulated/0/Android/data/vegabobo.dsusideloader/files/install"
上記のように表示され、端末にDSUの通知が出てきているか確認する。
上手く導入出来ていれば破棄、「再起動」ボタンが出てくるので「再起動」を押すとLineageOSで再起動される。
LineageOSのセットアップ
上の方に日本語があるので設定します。インターネット接続やPIN設定や復元等は全部スキップで良いが、日付と時刻は近めのものを設定しておきます。
ホーム画面上にスワイプでドロワーが開きます。
Rootの有効化
設定アプリを開きます。
「デバイス情報」から「ビルド番号」を連打し、開発者オプションを有効化させます。
「システム」から「開発者オプション」を開き、「USBデバッグ」「ルート状態でのデバッグ」をオンにします。
PCとADB接続します。
Shellの操作
以下コマンドを実行します。
adb shell
su
$が#になればOKです。
mkdir /sdcard/backup_img/
cd /dev/block/by-name/
/data/dataが/dev/block/by-nameになればOKです。
boot.imgでRoot取る場合
ls /dev/block/by-name/ 実行時、init_bootが無い場合はboot.imgを使います。(画像は8+gen1のy700 2023です。)
カレントスロットがAの場合
dd if=boot_a of=/sdcard/backup_img/boot_a.img
Bの場合
dd if=boot_b of=/sdcard/backup_img/boot_b.img
init_boot.imgでRoot取る場合
ls /dev/block/by-name/ 実行時、init_bootがある場合はinit_boot.imgを使います。(画像はDimensity7200のNothing Phone (2a)です。)
カレントスロットがAの場合
dd if=init_boot_a of=/sdcard/backup_img/init_boot_a.img
Bの場合
dd if=init_boot_b of=/sdcard/backup_img/init_boot_b.img
abパーティションでない場合
dd if=boot of=/sdcard/backup_img/boot.img
ls /dev/block/by-name/ 実行時、ファイル末尾に_aや_bがない場合はABの概念が無いのでそのまま抜き出します。
boot.img/init_boot.imgのコピー
以下コマンドで抜き出したファイルがあるか確認します。
ls /sdcard/backup_img/
正常に抜き出せていればフォルダ内にimgファイルが表示されます。
2回exitをし、コマンドプロンプトに戻ります。
後は、MTPでbackup_imgフォルダをコピーするか、adb pullでPCにコピーします。
完了
PCに抜き出せたならほぼ作業完了です。
そのまま再起動すれば元のOSが起動します。
不要になったDSUは「破棄」ボタンを押すと消去され容量が解放されます。DSUで保存したデータは元のOSとは共有されないので注意してください。
あとは抜き出したimgファイルを使ってパッチを当ててインストールするだけです。お疲れ様でした。
まとめ
難しいけど頑張ってください。できないならイメージを誰かが公開するまで大人しく待っててください。もしくは金払って依頼してください。
全部のファイルを抜き出す場合
Androidのイメージバックアップ (パスやファイル名は端末によって変わるため、適宜変更してください) · GitHub
cd /dev/block/by-name/ まで進む
ーーーー
for file in *; do
if [[ "${file}" = cache* || "${file}" = userdata* || "${file}" = sda || "${file}" = sdb || "${file}" = sdc ]]; then continue ; else dd if="${file}" of=/sdcard/backup_img/"${file}".img ; fi
done
ーーーー
このダイアログが出るが、強制的に貼り付けを押し、実行する。
しばらく待つ。
ファイル整合性チェック
ーーーー
echo "" > /sdcard/backup_img/md5.txt
for file in *; do
if [[ "${file}" = cache* || "${file}" = userdata* || "${file}" = sda || "${file}" = sdb || "${file}" = sdc ]]; then continue ; else
if cmp -s "${file}" /sdcard/backup_img/"${file}".img; then
echo "${file} - OK" >> /sdcard/backup_img/md5.txt
else
echo "${file} - NG, you have to backup again!" >> /sdcard/backup_img/md5.txt
fi
fi
done
ーーーー
も同様に強制的に貼り付けして実行する。問題があればNG~と表示される。