作者は、Redmi Note 12 5G(コードネーム:sunstone)向けのサードパーティ製ROMがほとんど提供されていないことに不満を抱き、公式アップデートも終了し、Googleサービスも利用できないため、crDroidを導入した。記事ではフラッシュの全手順を詳細に記録している:ツールの準備(ADB、アンロック、ファームウェア、ROMなど)、FastbootとRecoveryによるシステムの書き込み、Googleサービス環境を構築するためのNikGappsのインストール、中国語IMEの問題解決、さらに内部コードネームをまたぐフラッシュで生じる検証エラーに対処するため、AVBとSELinuxを無効化する方法も紹介している。作者は文鎮化を防ぐため公式のファストブート用パッケージをバックアップする必要性を強調し、本機種はカーネルのオープンソース化が不完全なうえ中国本土限定発売のため海外でのサポートが乏しく、フラッシュのリスクが高いと警告している。
Redmi Note 12 5G(sunstone)はもう Xiaomi のアップデート対象リストには載っていない。HyperOS の今後のアップデートを受けることはなく、最新の公式 OS は OS2(OS2.0.6.0.UMQCNXM、2025年8月12日付)で止まっている。
最新アップデートを受けられないのが一番の問題ではない。むしろ、OS を更新しなくて済む端末こそ良い端末だ。本命は、このスマホに Google 認証こそ付いているのに、Xiaomi が頑なに Google を使う機会を与えないことだ。疑うまでもなく、確信した。同じ内部コードを持つ Poco X5 のために認証を押さえているのだろう。Huawei から逃げ出して抱いたばかりの Google への夢が、見事に砕かれた。
そんなわけで、早めに Xiaomi.EU を焼いた。ところが、あろうことか今年から彼らは GApps を直接組み込むのをやめるらしい。となれば MIUI & HyperOS にしがみつく意味もないので、Near-stock 系を探すことにした。カスタム ROM を Sideload ではなくカード書き込み(カスブラ)で焼くのはこれが初めてだった。
最終的に crDroid を選んだものの、このスマホの不運が重なって、焼くのがてんで面倒くさい。
P0:準備
ここから先の各手順は理論上は他のスマホにも当てはめられるが、一つだけ肝に銘じておいてほしい。公式のファストブート用焼き込みパッケージを必ず控えとして取っておくこと。それを怠ると、OS をぶっ壊して手の施しようがなくなり、完全に文鎮(ドキュメント)化してしまうからだ。
なお、文章を簡潔にするため、以降は端末の内部コード(例えば stone のような呼び名)で Xiaomi 製のスマホを指すことにする。
最低限必要なのは次の通り:
Redmi Note 12 5G に対応する内部コードには sunstone、stone、gemstone がある。理論上、内部コードをまたいでの焼き込みはできない。だが私は無理やり別の内部コードで焼いてしまったので、真似はしないでほしい。
執筆時点でサイトで検索できるのは gemstone(crDroid 12)と stone(crDroid 11、10)。自分の状況に合わせて選んでほしい。
P1:OS を焼く
さっきダウンロードしたファームウェアパッケージ、ROM パッケージ、boot.img、vendor_boot.img、dtbo.img、NikGapps パッケージを同じフォルダに入れておくと作業がしやすい。
分かりやすくするため、ファイル名は分かりやすいものに変えてある。自分の状況に合わせて適宜変更してほしい。
スマホと PC をケーブルでつなぐ(当然の話)。
fastboot に入る。電源ボタン+音量ダウンを長押しする。スマホで ADB を有効にしているなら、次のコマンドでも入れる。
スマホの画面に Fastboot と表示されたら、fastboot モードに切り替わった証拠だ。
次が最も大事な手順。boot.img、vendor_boot.img、dtbo.img を順番に焼く。スロットを間違えてはいけない。
すべて焼けたことを確認したら、次のコマンドを実行する。
ここでスマホは再起動し、crDroid Recovery に切り替わる。システム本体をまだ入れていないのに、先にリカバリは入ってしまったというわけだ。
この画面には Reboot system now、Apply update、factory reset、Advanced の四つの選択肢が出る。
順番に factory reset 👉 Format data/factory reset 👉 Format data を選ぶ。このときスマホはユーザーデータを消去する。だからこそ事前にバックアップが必要だと話したのだ。この手順を省くと、OS 起動で詰まる。
上の手順が済んだら最初の画面に戻り、順番に Apply update 👉 Apply from ADB を選ぶ。画面下部に Now send the package you want to apply と表示されたら、ADB が有効になった証拠で、sideload モードに入っている。
続いて、ファームウェアパッケージ、ROM パッケージの順に焼いていく。
大事な点は、sideload モードではコマンドを一つ実行するたびに、最初に Recovery に入った画面へ戻ることだ。そこから再度有効化をやり直せばよい。
ROM パッケージを焼いている途中、スマホが Yes か No かを確認する場面が現れることがある。何が書いてあるかは気にしなくてよい(実質はファームウェアのバージョン差異の確認だ)。迷わず Yes でいい。
するとスマホはそのまま再起動し、再び crDroid Recovery に戻る。ここで Reboot system now を選べば crDroid の初期セットアップ画面に入るので、案内に従って進めればよい。
これで完了だ。
P2:Google フレームワーク
プリインストールのアプリはすべて AOSP 製だ。Google サービスが必要なら、スマホを crDroid Recovery に戻して ADB sideload モードを有効化し、NikGapps を焼くだけでよい。
NikGapps は六つのブランチに分かれている。crDroid なら Core と Basic のどちらかを選ぶだけで十分で、そうすればシステムを壊しにくい。
焼き込みが終わってもスマホは自動では再起動しない。Reboot system now を選んではじめて再起動する。
OS に入れば、ホーム画面に Google Play があるのが見えるはずだ。
P3:入力方式
これは実質 AOSP のせいなので、 Gbord か他の入力方式アプリを入れてほしい。入れないと中文を打てないからだ。
GApps を入れたなら、Gbord を強くおすすめする。
P4:カーネル検証の無効化
実を言うと、この記事を書いている間、スマホは文鎮になったり直ったりを繰り返していた。明らかに内部コードをまたいだ焼き込みによるものだ。だがそれも仕方がない。sunstone 向けにサードパーティ製 OS を作る人が少なすぎて、Xiaomi.EU までもが手を引いてしまったからだ(当然と言えば当然で、彼らは Xiaomi のメジャーアップデートの流れに追随している)。一般的には、内部コードが合っていればこの作業は不要だ。
そういう場合は vbmeta.img を取り出して、AVB(Android Verified Boot)のパーティション整合性署名検証を無効にする必要がある。さらに SELinux の強制モードも無効にする必要があるかもしれないので、念のため全部やっておく。
P4.1:vbmeta.img の抽出
payload-dumper-go をダウンロードし、README に従ってシステムに配置する。
ROM パッケージを展開し、展開済みのディレクトリ上で以下を実行する:
実行が終わると、同じディレクトリに extracted_xxxxxxxx_xxxxxx のフォルダができて、その中に抽出された img 群が入っている。
P4.2:AVB パーティション整合性署名検証の無効化
順番に vbmeta.img と vbmeta_system.img を焼く。
焼き込みが終わったら、端末を再起動する:
P4.3:SELinux 強制モードの無効化
SELinux 強制モードを無効にするには root が必須だ。root の取り方についてはここでは省く。
次のコマンドで SELinux の状態を確認する。
次に shell に入る(PC の shell ではなく、PC を経由して Android の shell に入る)。
例えば sunstone:/ $ のような表示が見えたら、正常に入れた証拠だ。
順番に実行する。
adb shell getenforce を実行し、adb shell getenforce が表示されたら、SELinux の強制検証は一時的に無効になっている。Permissive ただし端末を再起動すると、その無効化も消えてしまう。
この動作を永続化するため、Linux の systemd のような起動時スクリプトを書く必要がある。
端末を再起動し、もう一度検証する。adb shell getenforce が表示されたら、SELinux の強制検証は起動手順で無効化されている。Permissive なら、SELinux の強制検証は起動手順で無効化されていることになる。
同時に、端末は SELinux が強制モードで稼働していないと知らせてくるため、一部のバンキングアプリはそのままでは動かなくなる。その場合は修正が必要だが、詳細はここでは省く。
PE:あとがき
言うまでもなく、crDroid が公式に直接サポートする端末は数多く、PiexlOS より優秀だ。だが残念ながら、sunstone はいまだ対象に入っていない。あれこれ考えてみると、sunstone が中国本土限定でしか販売されていないせいだろう。海外のチームに、Google を有効にできない端末をわざわざ買って、テストやアダプトをしてもらうなんて期待できない。
実は Xiaomi 側にも問題がある。stone 系はカーネルのオープンソース化が不完全で、本当に頭が痛い。