※既にAndroPlusさんがビルドしたものを公開されているので、ここでは公開はしません。
Android 9以降のTWRPをビルドする解説が日本語ではあまりなかったので、まとめてみたいと思う。
まずAndroid開発環境が全部入りのBBQ LinuxをVirtualBoxにインストールする。インストール後、ターミナルを開き、sudo pacman -Suy
でシステムをアップデートする(かなり時間がかかる)。
/usr/binでpythonとpython-configがpython3.8とpython3.8-configにシンボリックリンクが張られているので、これを削除し、python2.7とpython2.7-configにシンボリックリンクを貼り直す。※ python3ではmake時にエラーが出る。
ホームに作業用フォルダを作る。
mkdir ~/twrp
mkdir ~/twrp/rakuten
mkdir ~/twrp/rakuten/c330ae
cd ~/twrp
AndroPlusさんのところからオリジナルのrecovery.imgをダウンロードし、~/twrpにコピーしておく。
TWRPのリポジトリの取得
repo init --depth=1 -u git://github.com/minimal-manifest-twrp/platform_manifest_twrp_omni.git -b twrp-9.0
repo sync
(repoコマンドが古いと言われて、~/twrp/.repo/repo/repoがダウンロードされるので、それを使う)
Mini用の必要なファイルを先程のrecovery.imgから取り出す。ここではmagiskbootを使う。magiskbootはMagiskをインストールするzipファイルにも入っているし、Magiskがインストールされたスマホの/data/adb/magiskにも入っているので、
PC (Linux)でやるなら、x86版のmagiskbootをzipから取り出し、 ~/twrpにコピーして、
./magiskboot unpack recovery.img
Magiskが入ったAndroidでやるなら、
/data/adb/magisk/magiskboot unpack recovery.img
のようにして、recovery.imgを解凍する。解凍したら、kernelとrecovery_dtboを~/twrp/rakuten/c330aeにコピーする。※recovery.imgを解凍する方法は複数あり、他にはCarliv Image Kitchen WindowsやTwrpBuilder-1.0-SNAPSHOT.jar
を使ってもkernelは取り出せる。magiskbootで取り出したkernelはCarliv Image Kitchen WindowsやTwrpBuilder-1.0-SNAPSHOT.jarで取り出したkernelとサイズが違ったので、今回はCarliv Image Kitchen Windowsで抽出したkernelを使った。
ここで~/twrp/rakuten/c330aeに*.mkを自分で書いてもいいものの、面倒なので同じSoCを使ったスマホのデバイスツリーがあれば、それを参考にすればいいと思う。今回はXiaomi Redmi 8のデバイスツリーにある*.mkとomni.dependenciesをコピーし、パス、メーカー名、機種名などを書き換えてそのまま使った。
最後に起動に必要なプロプライエタリなblobを本体から抜き出さなければいけない。Bootloaderがアンロックできれば、GSIのLineageOSのROMを焼いてextract-files.shを実行すればいいだけなんだけど、一台しか手元になく、且つ既に環境を整えて生活で使っているので、今回はまたまたAndroPlusさんが抽出したものを拝借した。recovery/root以下の内容を~/twrp/rakuten/c330aeにコピーする。
あとは、
make clean
export LC_ALL=C
export ALLOW_MISSING_DEPENDENCIES=true
export TARGET_PRODUCT=omni_c330ae
. build/envsetup.sh
mka recoveryimage
として、ビルドされるのを気長に待つだけ。今まで誰かがTWRPをビルドしてくれるのを待っているだけだったけど、こんなに簡単なら、これからは自分で作ろうと思う。
【まとめ】大雑把な流れは、
- Bootloaderをアンロックして、どうにかしてboot.imgを手に入れる(ファームウェアが公表されていれば、かなり楽勝)
- Magiskでboot.imgにパッチを当てて、rootを取る
- 各パーティションのイメージをバックアップする
- GSIのLineageOSのROMを焼いてextract-files.shを実行し、プロプライエタリなファイルを抽出する
- 取り出せたら、バックアップしたイメージで元に復元
- バックアップしたrecovery.imgを解凍して、kernelとrecovery_dtboを取り出す
- *.mkとomni.dependenciesを自分で書く、もしくは同じSoCの既にあるもの用を書き換える。
- 必要なファイル、デバイスツリーの各フォルダに配置して、ビルド
HUAWEI MediaPad M5用のTWRPについても公開してほしいです
HUAWEIのデバイスは独特なんですよね。boot.imgはないですし、fastboot bootコマンドが使えないので毎回動くかどうかを焼いて確認しなければいけないですし、Magiskを入れるとTWRPが使えなくなりますし… MagiskとTWRPのどちらかを選ぶとすると、Magiskになるので、M5でも使えるP10のTWRPがあるので、自分でM5専用のTWRPをビルドする予定はありません。
MagiskとTWRPが併存出来ないのですか。知りませんでした。確かに魅力がないですね。P10のヤツはインストールして見たのですが、うまく起動できませんでした。いろいろ、ありがとうございました。