Xperia Z4 Tablet Wi-Fi版をAndroid11/12相当にsetupする ‘25.1月編

過去にXperia Z4 Tablet国内LTE版(SO-05G), Xperia Z4 Tablet海外LTE版SGP771を、Android11相当にUPDATEしました。今回 Xperia Z4 Tablet Wi-FI版SGP712 を実施しました。その手順の違い等を報告します。


手順は SO-05G と同じです。SONY Unlock Bootloader サイトで選択するDevice名はLTE版もWi-Fi版も共通でした。ポイントとなる Bootloader unlock allowed の状態は以下のとおりでした。


LTE版とは別の物を使います。”karin_windy” は Z4 Tablet Wi-FI版のコードネームです。

file補足
TWRP-3.1.1-lineageos-karin_windy-20170520.img機種判定がうまくいかない
TWRP-3.5.0_9-0-karin_windy-20210122.img状況によっては使えない。

一旦は、TWRP-3.5.0_9 でOS書込みだけ行けはしました。boot.img の書換は不要でした。


以下2種類を試しました。それぞれ難点がありました。

file備考
lineage-18.1-20230205-UNOFFICIAL-karin_windy.zipAndroid11相当
lineage-19.1-20241030-UNOFFICIAL-karin_windy.zipAndroid12相当

今回改めてカスタムROMを探索すると、LinageOS21( Android14相当 )まで出回っていることが分かりました。LinageOS20用、LinageOS21用は機能制限があるようです。詳しくは XDA Forum で検索してみてください。しかし公開先がロシアでした。国事情とソフトウェア事情はことなるとは思いますが、なぜ一般的な公開先 GithubGoolgeドライブAndroid File Host (ここは有償ですか)、SOURCEFORGE ではないのか不安がよぎります。

OS自体は書込み、起動共に正常でした。Wi-Fi、GPS、Bluetooth、カメラ、SDカードの正常確認できました。

すこし変なのが、USB OTG (外部USBメモリの使用) でした。弊方はAndroidに本機能があることさえ知らなかったのですが、本機能の動作を重視している方もいらっしゃるようです。 Wi-Fi版のLinageOS18では通常コントロールパネルに表示されるのですが、今回は表示されません。検索すると出てはくるのですが、、、実際にUSBメモリを差しても表示は出てきませんてした。


LinageOS19は、USB OTGの件と他で万が一問題があるとマズイので今回は適用は控え、利用実績の高いLinageOS18に入れ直します。ここで問題が発生です。

問題1: TWRP-3.5.0_9 が起動しない

LinageOS19 で何かが変えられてしまったのかもしれません。一旦純正ROMに戻してみたのですが解消しませんでした。TWRP-3.1.1 に書直しすと起動しました。こちらで作業を進めるしかなさそうです。

問題2: TWRP-3.1.1 でOS書込みでエラーが発生

どうも機種認識がうまくいっていないようです。これはTWRPのバージョンによるようです。(SGP611でも同様の事象が見られました)

仕方ないのでOSインストールスクリプトの機種チェックを外してインストールします。詳しい手順は割愛しますが以下画像を見てください。

これでようやくOS書込みできました。Wi-FI、GPS、Bluetooth、カメラ、SDカードはOK。USG-OTGも表示され、USBメモリ接続まで確認できました。


以下のMindTheGapp を、TWRPでインストールします。SGP612、SGP771、SM-T800とは異なり、Google Play 開発者サービス と Google Play の個別インストールは不要でした。

file備考
MindTheGapps-11.0.0-arm64-20230922_081122.zipGoogle検索、Google Play 開発者サービス、Google Play の3つ

インストール後、GoogleサービスをUPDATEします。ポイントは以下2点です。

‘25.1月時点でのGoogleサービスのバージョンは以下のようになりました。

アプリ名update前update後
Google検索12.2.13.2316.2.40
Google Play35.2.19-2144.5.23-29
Google Play開発者サービス20.45.1624.50.34

試しに Google Play ストア から、MAP と Googelキーボード入力 を入れてみます。


これで一旦セットアップが完了しました。LinageOS19版はやや怪しい感は見られますが、機密情報入力やUSBメモリを控えれば使えることは使えそうです。

以上、Z4 Tablet Wi-Fi版をAndoroid11 or 12 相当にUpdateできました。しかしながら自分でやるのはメンドクサイ、忙しい、自身が無い方は、弊方でセットアップをお受けいたします。Tablet Wi-Fiは難易度低、約1.0時間の個人様向け工数+事務費で税込4,000円~ 。ご相談、依頼はこちらから。

その他気付きですが、インストール時に SGP771 の表示が現れますが、インストールスクリプトの誤りのようです。

TortoiseGit で大きいfileをGit-Hubにpushする

Windows上でGit-Hubに大きいファイルをpushする手順の記事があまり見られなかったので覚書です。

300MBのzipをGit-Hubにpushする数分も待たされ、容量うんぬんではなく、error: faild to push some refs to とエラーがでます。

他WEB記事をみると Git LFS というモードがあるようです。なるほど。どうしたら有効になるのでしょう? git lfs というオプションがあるようで、コマンドプロンプトからたたいてみます。gitのコマンドは、TortoiseGit と一緒に入っているみたいです。

コマンドは適当な場所でたたくと、リポジトリ外的にエラーがでるので、リポジトリ直下でたたいてみます。

このあとTortoiseGit のメニューに変化がみられました。

対象のzipが変更あり扱いになりました。よくわかりませんがコミットします。

再pushすると、大きいファイルの認識はされるものの( これはTortoiseGit というよりGit本体の反応 ) エラーは変わりませんでした。

他のコマンドためします。以下手順でpushできました。push自体は TortoiseGit からも同じなので出来るはずです。コミット後に行わないと、Git can’t resolve ref: “HEAD” がでます。

リポジトリ直下に .gitattributes という設定ファイルができているので、これがポイントなのでしょうか?

*.zip filter=lfs diff=lfs merge=lfs -text
*.txt filter=lfs diff=lfs merge=lfs -text

結果は TortoiseGit からは全て直接できないが、コマンドプロンプトから行えばいいようです。

オリジナルCAN Logger を構想する1

構想時のメモです。

ラズパイ や FA用PC と 汎用CANボート の組合せがスピーディですが、

  • 起動に時間がかかる。
  • サイズが大きくなりがち。(二輪にも載せたい)
  • 細かな制御ができない。
  • 予期しない不確定要素がおおい。
  • ノイズや振動は大丈夫か? (二輪にも載せたい)
  • CAN-FDに対応させたい。(開発用途ではCAN-BUS使用率が直ぐいっぱいになってしまう)

よって車載用のCAN付マイコンを使います。

ロガーでもリアルタイム値をリモートで見たいと要素もあります。モバイル端末で中継させ、用途に応じてデータを飛ばします。以下のような構成とします。

モバイル端末に使うには、BTで中継します。

以下ポイントです。

  • BT4は遅いのでBT5.1を使います。Long rangeモードがあり耐ノイズ性を期待します。
  • 車載CANとBTを搭載したマイコンはほぼないので、タスク分割も兼ねて別マイコンとします。
  • ログモードは後でかんがえます。

極力ハードウェア機能で受信させ、フルログモードに備え、処理能力の消費を控えます。CANは2チャンネルを使用。制御用が必要になる可能性もあるため、それら用に受信バッファとルールをRESERVEしておく。

基本はこんな感じで構想中です。

Galaxy Tab s 10.5 Wifi版をAndroid13相当にSetupする3

前記事ではスタムOS用のGoogleサービスエンジンの一つである MindTheGapps のインストールまで完了しました。次にGoogleのセットアップを行います。実施してみたところ、Xperia Z4 Tablet とは少し違っていました。


以下のとおりでした。この状態で Google Play ストア をインストールし、実行しても落ちてしまいました。


Xperia Z4 Tablet では現れていた Goolge の更新ボタンが今回では見られません。

Google Play ストア が未だないので、アプリの .apk を用意し、オフラインでインストールします。弊方では公式Android13が入っている端末の’25.1月時点のバージョンに習い以下のものを入れました。

GoogleVer. 15.40.41 【特に入れなくていいかも】
Google 開発者サービスapkによるUpdate不可
Google Play ストアVer. 44.1.17-23Install後、アプリ権限、システム更新権限を手動で付与すること。

この後、WiFiを接続し、端末を再起動します。以下手順です。ちなみに Google Play ストア は初回起動ではコケます。


Google Playの起動は、

試しにMAPを入れてみます。うまくいったようです。


ユーザさんから追加情報がありました。 Book Walker というアプリがうまく動作しないとのことです。SC-03G LinageOS10では動作するとのことで、LInageOS20固有の課題なのかもしれません。何分、リアルタイム課金されるアプリは決済関係で要注意かと。。。


以上、SM-T800を Android13相当にupdateし、Google Play の動作させるまでの手順です。しかしながら自分でやるのはメンドクサイ、忙しい、自身が無い方は、弊方でセットアップをお受けいたします。Google Paly初期セットアップに手間をようするため難易度中、約1.25時間の個人様向け工数+事務費で税込4,000円~ ご相談、依頼はこちらから。

Galaxy Tab s 10.5 Wifi版をAndroid13相当にSetupする2

前回では、SM-T800 を Android13 相当にUpdateまでしました。次にカスタムOS用のGoogleサービスエンジンの一つである MindTheGapps のインストールエラーの調査と対策を行います。


XDAのSM-T800 LinageOS 20 のページをみると、MindTheGapps13 がインストールできないとの投稿があり、その対策版情報がありました。MindTheGapps_Legacy-13.0.0-arm64-20231025_200931.zip です。試したところ、前回の「Could not mount ...」は発生しないもののGoogleサービスはインストールされません。何も作用がありません。インストール自体1秒もかからず早すぎです。


MindTheGapps でなく、別種Gapp: NikGapp というのがあります。こちらを試しましたがダメでした。

NikGapps-core-arm64-13-20241231-signed.zipTWRPで Error 1 発生。
NikGapps-core-arm64-12-20241231-signed.zipTWRPで Error 1 発生。
NikGapps-Juan-Basic-arm64-13-20250110-unofficial.zipTWRPで Error 1 発生。


MindTheGapps のパッケージはただのzipなので構造と仕組みを調べてみます。

おおざっぱdirectory構造は以下のとおりです。黒字がDirectory、緑字がfile です。

  • META-INF
    • com
      • android
      • google
        • android
          • update-binary [ココがインストールscript]
  • system [②ココがインストール配布物、OSのDirectory構造と同じ]
    • addon.d
    • product
      • app
        • 各アプリFolder
          • 各アプリ.apk
      • lib
        • 各.so (unix共有dynamic Library)
      • lib64
        • 各.so (unix共有dynamic Library)
      • priv-app
        • 各アプリFolder
          • 各アプリ.apk
    • system_ext
      • priv-app
        • 各アプリFolder
          • 各アプリ.apk

上記①は、UNIXシェルスクリプト です。幸い割と得意なので解析&デバックできそうです。


update-binaryスクリプトの内容を読むと以下のような感じでした。(以下説明を理解するにはUNIX 基本知識が必要です)

  1. OS Directory ( /system, /product, /system_ext ) を一旦unmoutする。
  2. 端末ストレージの/devリスト:/etc/recovery.fstab ( dfコマンドの写し )から、/system, /product, /system_ext の /devファイル を取得する。
  3. /devファイル から、/system, /product, /system_ext を 再mount する。
  4. ストレージ残容量をチェックする。
  5. インストール対象の 各アプリ.apk の一覧を 30-gapps.sh を生成する。これが /system/android.d にコピーされ、OS初回起動時に 各アプリ.apk が自動インストールされる仕組みのようです。
  6. MindTheGapps/system 下の全fileを、パーミッションを保ったまま、OSの/systemにコピーする。
  7. OSの/product が /system と別ストレージの場合、MindTheGapps/system/produc を パーミッションを保ったまま、OSの/product にコピーする。
  8. OSの/system_ext が /system と別ストレージの場合、MindTheGapps/system/system_ext を パーミッションを保ったまま、OSの/system_ext にコピーする。


update-binaryスクリプトにトレースを追加して動作させてみます。TWRP上では標準出力( echoコマンド )は使えないようです。update-binary内の用意されている ui_print() を使います。MindTheGapps のzipを解凍し、update-binary変更後、MindTheGappsを再zipします。再zip時は、META-INF と system が直下になるようにします。7zipなら以下のようにします。

folder全体zipしていまうと Directory 階層が出来てしまうので、TWRPがzipを認識しなくなります

実行してみると以下のような結果でした。

前述のスクリプト手順2. が 端末 もしくは TWRP に合っていないようです。SM-T800の/etc/recovery.fstab の内容は以下のとおりです。

/boot		emmc	/dev/block/bootdevice/by-name/BOOT
/recovery	emmc	/dev/block/bootdevice/by-name/RECOVERY	flags=backup=1
/misc		emmc	/dev/block/platform/dw_mmc.0/by-name/OTA
/system		ext4	/dev/block/bootdevice/by-name/SYSTEM
/system_image	emmc	/dev/block/bootdevice/by-name/SYSTEM
/data		ext4	/dev/block/bootdevice/by-name/USERDATA	flags=encryptable=footer;length=-16384
/cache		ext4	/dev/block/bootdevice/by-name/CACHE
/modem		emmc	/dev/block/bootdevice/by-name/RADIO	flags=backup=1;display="Modem";flashimg
/hidden		ext4	/dev/block/bootdevice/by-name/HIDDEN	flags=backup=1;display="Hidden"
/hidden_image	emmc	/dev/block/bootdevice/by-name/HIDDEN	flags=display="Hidden Image";flashimg
/efs		ext4	/dev/block/bootdevice/by-name/EFS	flags=backup=1;display="EFS"
/efs1		emmc	/dev/block/bootdevice/by-name/m9kefs1	flags=backup=1;subpartitionof=/efs
/efs2		emmc	/dev/block/bootdevice/by-name/m9kefs2	flags=backup=1;subpartitionof=/efs
/efs3		emmc	/dev/block/bootdevice/by-name/m9kefs3	flags=backup=1;subpartitionof=/efs
/external_sd	vfat	/dev/block/mmcblk1p1 /dev/block/mmcblk1	flags=display="Micro SDCard";storage;wipeingui;removable
/usb-otg	vfat	/dev/block/sda1 /dev/block/sda		flags=display="USB OTG";storage;wipeingui;removable

上記「 /system ext4 /dev/block/bootdevice/by-name/SYSTEM」行の「/dev/block/bootdevice/by-name/SYSTEM」が抽出できればよいようです。このオリジナルの抽出コード行は以下のようになっています。

grep -v "^#" /etc/recovery.fstab | grep "[[:blank:]]$1[[:blank:]]" | tail -n1 | tr -s [:blank:] ' ' | cut -d' ' -f1

コメントでなく、$1(system)が見つかった 最初の一行をスペースでカットした… みたいな感じですね。SM-T800のフォーマットと合っていないのでしょう。MindTheGapps_Legacy-13.0.0-arm64-20231025_200931.zip の抽出コード行は以下のように少しシンプルですが、grep の -o オプションはUNIX処理系によって無いようです。オリジナルgrepには無し。TWRP3.7上では使えませんでした。

cat /etc/recovery.fstab | cut -d '#' -f 1 | grep /system | grep -o '/dev/[^ ]*' | head -1

いずれにしても修正が必要です。 弊方ではawkを使ってもっとシンプルにします。本物UNIX育ち弊方ではこれが自然です。近年Linux育ちの方は不自然なのでしょうか? ちなみにプロセスID取得時は、ps -ef|grep プロセス名|awk `{print $1}` と千回は叩いたでしょうか。 TWRP上でも使えました。 頭コメント^#判定も特に不要。 以下コード例です。これで一つ解決です。

cat /etc/recovery.fstab | grep ^$1 | awk '{print $3}' | head -1


前述修正1では、/devファイルは取得できるようになりましたが、インストール後の反応は未だ見られません。以下のように調べます。

  • update-binaryのクリーンアップ部をコメントアウトして、MindTheGapps.zip の展開結果をストレージ上に残すようにする。
  • MindTheGapps.zip をinstall。
  • MindTheGapps の作業フォルダ /tmp/system に移動。
  • 試したいスクリプトと同じコマンドを叩く。

これにより問題のあった行は以下でした。

ui_print "Copying files"
cp --preserve=a -r ./* "${SYSTEM_OUT}/"

cp コマンドの –preserve オプションはUNIX処理系によって無いようです。TWRP3.7ではオプションエラーになりました。TWRPの標準出力は無効になっており、cpコマンドの exit値: $? の未チェックなので使用者は異常に気付かず. . . といった不具合メカニズムのようです。パーミッションを保ちたいらな -r オプションでいいハズです。以下のように修正します。

ui_print "Copying files"
cp -pr ./* "${SYSTEM_OUT}/"

これでインストール内容は反映されるようになりました。しかしこれでだけではインストールコピー失敗の気付きになりません。以下のようにコピーされたfile数を表示できるようにします。

ls -1R ${SYSTEM_OUT}	> $TMP//MindGappCpBefore.txt
cp -pr ./* "${SYSTEM_OUT}/"
ls -1R ${SYSTEM_OUT}	> $TMP/MindGappCpAfter.txt

# show number of copy files.
diff -w /tmp/MindGappCpBefore.txt /tmp/MindGappCpAfter.txt | grep ^+[a-zA-Z]> $TMP/MindGappCpList.txt
rm -f $TMP//MindGappCpBefore.txt $TMP/MindGappCpAfter.txt
COPY_COUNT=`cat $TMP/MindGappCpList.txt | wc -l`
ui_print "$COPY_COUNT files has copied."


修正後のトータル実行結果は以下のとおり。他の端末ではテストできていないので SM-T800 用と明記しておきます。

修正した MindTheGapps-13.0.0-arm64*.zip は機種依存であるとまずいので、本流にマージせず個別にGit-Hubに公開しました。 ここから MindTheGapps-13.0.0-arm64*.zip を選んで以下のようにDownloadしてください。

これで Googleサービス のインストールできました。次のサービスのセットアップに続きます