Xperia tablet Z (SGP312) をカスタムROMでOSアップデート

Xperia Tablet Z は古い Android タブレットなのですが、防水仕様なのでお風呂での読書や動画視聴に使ったり、専用クレードルに置いて常時ONの時計・天気表示なフォトフレームっぽい使い方などをしています。とはいえ、さすがに古すぎて、OSの更新が何年も前に終了していますし、OSが古いせいで多くのアプリが最新版に更新できない状態になっています。たとえば chrome は昨年末の chrome 96 以降は Android 6.0 以降にしかインストールできなくなっています。流石にその状態で使い続けるのはセキュリティ的にあまりにもなので、対応することにしました。

こんなときに便利なのが、サードパーティで作成されているカスタムROMです。

Xperia はデフォルトでは bootloader (OS を起動させるためのプログラム)がロックされていて、ソニーが配布している ROM 以外は動かないようになっていますが、ソニーは公式にロックを解除する方法を提供してくれています。ただし、ロックを解除した場合、セキュリティ上一部の機能(赤外線リモコンとか、DLNAでTV見るときの著作権保護とか、その手の話)が使えなくなるなど、リスクも多数あります。詳しくはこちらをご参照ください。

https://developer.sony.com/develop/open-devices/get-started/unlock-bootloader/

このブートローダーのロック解除をすることで、カスタム ROM をインストールすることができるようになります。なお、純粋なオープンソースAndroid OS を自前ビルドするための、コンフィグレーション(ソースコードや設定ファイル)もソニーは提供してくれていいますが、こんなに古いデバイスのサポートは既に切られていますので、各カスタムROM制作チームがメンテナンスしているものを使わせてもらうのが近道かと思います。

以下は、カスタムROMの選定からインストールまでの手順の詳細になります。

インストールするカスタムROMの選定とZipファイルの用意

最初に、どのカスタムROMを使うかですが、最もメジャーなものの1つである LineageOS が第一候補に上がるとおもいます。

LineageOS がサポートしているデバイスの一覧とインストール手順などは LineageOS の Devices のページ から引くことができます。デバイス名の下に小さく書いてあるのがデバイスのコードネームです。ROMのダウンロードなどではこのコードネームでファイル名が作られていることが多いので、覚えておきましょう。なお、サポートが切れている古いデバイスの場合 "Show discontinued devices" のチェックマークをつけないと表示されません。Xperia Tablet Z WiFi (pollux_windy) もその一つです。

バイスの画像をクリックすれば、インストール方法などの詳細ページに飛べます。

https://wiki.lineageos.org/devices/pollux_windy/

このページの右下のサポート情報を見ると LineageOS 15.1(Android 8.1)まではプロジェクトとしてサポートされていたようですので、これを基準に考えました。

選択肢としては以下の3つがあります。これらのいずれかの方法でカスタムROMのZIPファイル(と、必要なら OpenGAppsのZIP)を手元に用意し、micro SD に保存しておきます。(USBで転送する方法もありますが、転送速度が遅いので直接書けるなら書いておいたほうが早いです。)

方法1: XDA で誰かがビルドしてくれた非公式バイナリを使わせてもらう

Xperia Tablet Z Wifi 向けの LineageOS バイナリは 15.1 と 16.0 なら、以下のスレッドで、非公式なビルド済みバイナリを配ってくれている人がいます。

なお、15.1 は LineageOS の正式なサポートバージョンではありますが、16.0 はテスト版という扱いです。また、15.1 の方は最終更新が 2019-06-17 と古く、それ以降のセキュリティパッチはあたっていません。

16.0 の方も最終更新は 2021-09-17 (2022-05-02 現在) なので、それ以降のパッチ更新はありません。(一応、スレ主とは別の方が作った、2022年1月のパッチを取り込んだバイナリはあるみたいですが。)

ちなみに、LineageOS の利用者情報 https://stats.lineageos.org/model/pollux_windy によると、現時点で pollux_windy では 16.0 が一番使われているみたいです。

LineageOS には Google の開発者サービスや Google Play Store アプリなどは含まれていないので、ほしければ、別途 MindTheGapps (もしくは OpenGApps)をダウンロードする必要があります。詳しくは https://wiki.lineageos.org/gapps をご参照ください。

ちなみに、今回この記事を書くにあたって、それぞれのROMを一通り焼いてみたのですが、OpenGApps を入れると一様に動作が怪しくなり、まともに動作しませんでした。詳しくは調べていませんが、同様な現象で困っているようなら、LinageOS の中の人が作った MindTheGaaps の方を使ってみるのが良いかもしれません。

方法2: LineageOS for microG を使う

今でも定期的にセキュリティパッチ含めたバイナリのメンテナンスしてくれている人はいないかなと思って探したところ、LineageOS for microG プロジェクトでは、LineageOS 15.1 pollux_windy の更新が継続して行われているのを見つけました。

https://download.lineage.microg.org/pollux_windy/

LineageOS for microG のプロジェクトは LineageOS をベースに microG (GApps の代替。Googleの開発者サービス等の実質必須なプロプライエタリソフトをオープンソースで実装しなおしたもの)を足すことで、Google プロプライエタリに非依存なカスタムROMを作ろうというプロジェクトです。

Google Play を使うことはできませんが F-Droid は入っていますし、Amazon AppStoreをインストールして、それだけで過ごして間に合う人であれば、有力な選択肢になるかと思います。

方法3: LineageOS を自前でビルドする

LineageOS は公式には 15.1 時代は対応していましたし、16.0 も上記の通り作っている人はいるので、自前でビルドしてやることもできるはずです(私は試してませんが)。ビルド方法は前述のデバイス詳細ページの "Build for yourself" のリンクの先 にあります。

ビルドが正常にできればカスタムROMのZIPファイルが生成されます。(GAppsはもちろんビルドすることができないので、別途用意が必要です。)

ブートローダのロック解除コードの取得

最初に貼ったロック解除の説明ページの末尾に、ロック解除の詳しい手順へのリンクと、解除コード取得フォームがあります。

手順の1番目(サービスメニューを開いてアンロック可能かを確認する)は、タブレットが電話機能を持っているかどうかで手順が変わりますが、解除コード取得フォームでデバイス名(今回の自分の場合 Xperia Tablet Z WiFi)を選択すると、そのモデルでのサービスメニューの開き方が表示されるので、それを見ながら解除コード取得まで先に合わせてやってしまうのが良いでしょう。

ダイヤラの無いWiFiモデルでは、「連絡先」アプリから隠しメニューを使ってダイヤラを開くことになります。「連絡先」アプリを開き、右上のメニューから「設定」を開いて出る画面で、画面の一番下付近(ホームボタンやバッグボタンが並んでいる部分の少し上)を5秒間長押ししてから離すと、そこに隠しボタンが表示されるので、そのボタンを押すとダイヤラーの画面になります。あとは、説明通り、*#*#7378423#*#*と入力するとサービスメニューが開きますので、そこで Service Info → Configuration を見れば、Bootloader がアンロック可能かどうかと、解除コード取得に必要な IDID が確認できます。

その IDID を前述のサイトに入力すれば、解除コードを得ることができます。なおその際は打ち間違えないように注意しましょう。番号が間違っていてもエラー表示は出ず、単にそれっぽいけど使えない解除コードが表示されてしまいます。

USB接続の準備

PC側に必要となるツールは adb と fastboot なので、まずはそれらをインストールしておきます。(本当はバージョンを揃えたほうが安全だったりするとは思いますが、apt で手抜き。)

$ sudo apt install adb fastboot

adb での接続にはタブレット側でUSBデバッグを有効にするのと、USBをつないだときにペアリング許可のボタンを押しておく必要があります。まずは、「設定」→「タブレット情報」→「ビルド番号」を連打して、設定に「開発者向けオプション」を表示させたうえで、そのメニューの中の「USBデバッグ」をONにします。その状態でUSBでPCに接続し、adbコマンドで接続を試みます。

$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
XXXXXXXXXX  unauthorized

上記の状態(unauthorized)は USB デバイスとしては認識はしていて、adb接続の機能は起動していますが、許可ボタンがまだ押されていない状態です。タブレット側で接続を許可するかどうかのダイアログが出ていると思いますので、許可のボタンを押してください。再度 adb devices すると、今度は以下のようになるはずです。

$ adb devices
List of devices attached
XXXXXXXXXX  device

これで、adbコマンドが使える状態になりました。以降、adb を使うときは、まず、このように adb devices で確認することをお勧めします。

ブートローダのロック解除

ロック解除のために、まずはブートローダの画面に移行させます。一度電源を切って、ボリュームのプラスを押しながらUSBをつないで起動させるか、adb コマンドを使って起動済みのタブレットに移行を指示します。

$ adb reboot bootloader

画面が消えて何も表示されなくなりますが、きちんとブートローダの状態になっていたら、電源横のLEDが青く点灯し、fastboot コマンドでは以下のように確認できます。

$ fastboot devices
XXXXXXXXXX  fastboot

この状態になったら、取得した解除コードを使ってロック解除します。(コードが 16進数なので、頭に0xとつける必要があります)

$ fastboot oem unlock 0xXXXXXXXXXXXXXXXX
...
OKAY [ 83.339s]
finished. total time: 83.339s

私の場合、...が表示されたあと、上記の通り1分半ほど時間がかかりました。(おそらくデータ消去のための時間でしょう。)

次の作業も続けて fastboot 状態のまま行います。

TWRP のインストール

カスタムファームウェアのインストールなどを行う際に便利なツールである TWRP をインストールします。

バイス一覧 https://twrp.me/Devices/Sony/ から自分デバイスの説明(私の場合 Sony Xperia Tablet Z Wi-Fi (pollux_windy))を見つけて、.imgファイルをダウンロードし、以下のようなコマンドで書き込みます。なお、説明ページにインストールには root 権限が必要とか書いてあったりしますが、それは TWRP アプリからや、adbから書き込む場合の話で、ロック解除した fastboot からパーティションに直接書き込む今回の方法では気にする必要はありません。

$ fastboot flash boot ~/ダウンロード/twrp-3.6.1_9-0-pollux_windy.img 
target didn't report max-download-size
sending 'boot' (13298 KB)...
OKAY [  0.423s]
writing 'boot'...
OKAY [  0.684s]
finished. total time: 1.107s

正常にインストールできたら、デバイスを再起動させれば TWRP の画面になるはずです。

$ fastboot reboot

TWRP を使ったカスタムROMのインストール

TWRP 起動後、まずは古いデータの削除を行いますが、これは data と cache/system の2ステップになります。 最初にWipe の中の Format Data を実行してデータパーティションの中身を削除したあと、backボタンでWipeメニューに戻ったあと、Advanced Wipe に戻って、Cache と System のパーティションを選択して Swipe to Wipe で削除を実行します。

カスタムROMのインストールは、Install メニューで、”Select Storage" で Micro SD card を選択したうえで、保存しておいたROMのzipファイルを選択すれば、書き込み画面に行けます。GApps もインストールする場合は、”Add more Zips" を押して GApps のZipファイルを選択しておくことで、両方のファイルを順にインストールしてくれるようになります。

必要なインストールが済んだら、Reboot System すれば、LineageOS のスプラッシュスクリーンになります。 初回起動は通常より長めに時間がかかりますが、しばらく放置していれば、初回セットアップが始まりますので、各種設定を行って完了となります。おつかれさまでした。

(おまけ) Root権限が使える環境では動作しないアプリの対応

LineageOS はデフォルトで root 化機能が有効で組み込まれているようですが、その状態を検知する一部のアプリが動作しなくなる問題がありました。

軽くググったところ magisk という root 化管理アプリを使った対策を紹介している記事があり、

https://mitanyan98.hatenablog.com/entry/2021/10/06/092850

そこで紹介されている通り magisk + universal SafetyNet Fix モジュールを有効化し、問題のアプリを Deny List に追加して root 化を検知されないように設定することで、回避することができました。

ただ、そもそも root 権限が必要無いのであれば、root化を無効にしたコンフィグレーションで LineageOS を自前ビルドするのが素直な解決かもしれません。(suを削除するだけで大丈夫かもしれませんが。)


参考にしたページ: