amegonの雑なブログ

日常的なものから技術的なものまでメモの雑記

Google Nexus 7 (2013) を Android 12L にしてみたが四苦八苦した記録

きっかけから設定の流れ

  • 家の掃除中に眠っている Google Nexus 7 (2013) Wifi モデルを発見
  • フルリセットかけてみたところバッテリもまぁまぁ生きていてそこそこ動きそう。
  • 何かに利用できないか動作確認はじめたところ、動かないアプリが多そう。
    • Google PlayAmazon とか Yahoo 天気 とか入れることができない。。
    • Andtoid 6 なのが原因っぽい。古いもんね。
  • インターネットで記事を読んでいたら Android 12L なるものを動かすことができるらしいことを知り、セットアップに挑戦する気になる。
  • 調べたら Android 13 も出ているらしい。そんな時代だから、Nexus 7 もせっかくなら新しい OS にしてみようかという気になる。

結果

Amdroid 12 相当で動作し、アプリは Google Play からインストールできるようになった。

きっかけ参考記事

やってみた記録

試行錯誤した記録をそのまま載せています。
長いですが、誰かの参考になれば幸いです。

実行環境

参考ページ

実行

TWRP の準備

Windows 11 に Android Device のドライバをセットアップ

Windows のデバイスマネージャに Android Device というのが登録されていないとだめらしいので設定する。

  • Google からドライバをダウンロード
  • ダウンロードした zip を展開して任意の場所に保存
  • Windows でデバイスマネージャを起動して、ツリーの最上部で右クリック → ドライバーの追加 を選択
  • ダウンロードして展開して保存したフォルダーを選択して次へボタンを押す
  • Android Device が登録される。ここでコンピュータの再起動が必要と言われたら再起動する。
adb コマンドの導入
  • Platform-Toolsのダウンロード
    • SDK Platform-Tools for Windows をダウンロード を選択
  • ダウンロードした zip ファイルの解凍
    • 今回ダウンロードしたファイルは platform-tools_r34.0.1-windows.zip だった
  • 解凍したファイルをディレクトリごと C ドライブ直下に保存
    • 今回は C:\platform-tools のようになった
  • 環境変数の設定を実施する
    • Windows キー + Pause キーで システム > バージョン情報 を表示
    • 画面中段くらいにある システムの詳細設定 を選択
    • 開いた システムのプロパティ環境変数 ボタンを押す
    • システム環境変数 側の Path を選択して 編集 ボタンを押す
    • 開いた 環境編集名の編集新規 ボタンを押して先ほどのパス C:\platform-tools を記載して OK ボタンを押す
    • あとは OK ボタンを押して行って開いた画面を閉じていけばOK
  • コマンドプロンプトを開き adb コマンドを実行してみる
    • 実行してみて以下みたいにたくさんの表示がされればOK
C:\>adb
Android Debug Bridge version 1.0.41
Version 34.0.1-9680074
Installed as C:\platform-tools\adb.exe

global options:
 -a                       listen on all network interfaces, not just localhost
 -d                       use USB device (error if multiple devices connected)
 -e                       use TCP/IP device (error if multiple TCP/IP devices available)
 -s SERIAL                use device with given serial (overrides $ANDROID_SERIAL)
 -t ID                    use device with given transport id
 -H                       name of adb server host [default=localhost]
 -P                       port of adb server [default=5037]
 -L SOCKET                listen on given socket for adb server [default=tcp:localhost:5037]
 --one-device SERIAL|USB  only allowed with 'start-server' or 'server nodaemon', server will only connect to one USB device, specified by a serial number or USB device address.
 --exit-on-write-error    exit if stdout is closed

general commands:
 devices [-l]             list connected devices (-l for long output)
 help                     show this help message
 version                  show version num

networking:
 connect HOST[:PORT]      connect to a device via TCP/IP [default port=5555]
 disconnect [HOST[:PORT]]
     disconnect from given TCP/IP device [default port=5555], or all
 pair HOST[:PORT] [PAIRING CODE]
     pair with a device for secure TCP/IP communication
 forward --list           list all forward socket connections
 forward [--no-rebind] LOCAL REMOTE
     forward socket connection using:
       tcp:<port> (<local> may be "tcp:0" to pick any open port)
       localabstract:<unix domain socket name>
       localreserved:<unix domain socket name>
       localfilesystem:<unix domain socket name>
       dev:<character device name>
       jdwp:<process pid> (remote only)
       vsock:<CID>:<port> (remote only)
       acceptfd:<fd> (listen only)
 forward --remove LOCAL   remove specific forward socket connection
 forward --remove-all     remove all forward socket connections
 reverse --list           list all reverse socket connections from device
 reverse [--no-rebind] REMOTE LOCAL
     reverse socket connection using:
       tcp:<port> (<remote> may be "tcp:0" to pick any open port)
       localabstract:<unix domain socket name>
       localreserved:<unix domain socket name>
       localfilesystem:<unix domain socket name>
 reverse --remove REMOTE  remove specific reverse socket connection
 reverse --remove-all     remove all reverse socket connections from device
 mdns check               check if mdns discovery is available
 mdns services            list all discovered services

file transfer:
 push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE
     copy local files/directories to device
     --sync: only push files that are newer on the host than the device
     -n: dry run: push files to device without storing to the filesystem
     -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
     -Z: disable compression
 pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
     copy files/dirs from device
     -a: preserve file timestamp and mode
     -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
     -Z: disable compression
 sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]
     sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)
     -n: dry run: push files to device without storing to the filesystem
     -l: list files that would be copied, but don't copy them
     -z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
     -Z: disable compression

shell:
 shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]
     run remote shell command (interactive shell if no command given)
     -e: choose escape character, or "none"; default '~'
     -n: don't read from stdin
     -T: disable pty allocation
     -t: allocate a pty if on a tty (-tt: force pty allocation)
     -x: disable remote exit codes and stdout/stderr separation
 emu COMMAND              run emulator console command

app installation (see also `adb shell cmd package help`):
 install [-lrtsdg] [--instant] PACKAGE
     push a single package to the device and install it
 install-multiple [-lrtsdpg] [--instant] PACKAGE...
     push multiple APKs to the device for a single package and install them
 install-multi-package [-lrtsdpg] [--instant] PACKAGE...
     push one or more packages to the device and install them atomically
     -r: replace existing application
     -t: allow test packages
     -d: allow version code downgrade (debuggable packages only)
     -p: partial application install (install-multiple only)
     -g: grant all runtime permissions
     --abi ABI: override platform's default ABI
     --instant: cause the app to be installed as an ephemeral install app
     --no-streaming: always push APK to device and invoke Package Manager as separate steps
     --streaming: force streaming APK directly into Package Manager
     --fastdeploy: use fast deploy
     --no-fastdeploy: prevent use of fast deploy
     --force-agent: force update of deployment agent when using fast deploy
     --date-check-agent: update deployment agent when local version is newer and using fast deploy
     --version-check-agent: update deployment agent when local version has different version code and using fast deploy
     (See also `adb shell pm help` for more options.)
 uninstall [-k] PACKAGE
     remove this app package from the device
     '-k': keep the data and cache directories

debugging:
 bugreport [PATH]
     write bugreport to given PATH [default=bugreport.zip];
     if PATH is a directory, the bug report is saved in that directory.
     devices that don't support zipped bug reports output to stdout.
 jdwp                     list pids of processes hosting a JDWP transport
 logcat                   show device log (logcat --help for more)

security:
 disable-verity           disable dm-verity checking on userdebug builds
 enable-verity            re-enable dm-verity checking on userdebug builds
 keygen FILE
     generate adb public/private key; private key stored in FILE,

scripting:
 wait-for[-TRANSPORT]-STATE...
     wait for device to be in a given state
     STATE: device, recovery, rescue, sideload, bootloader, or disconnect
     TRANSPORT: usb, local, or any [default=any]
 get-state                print offline | bootloader | device
 get-serialno             print <serial-number>
 get-devpath              print <device-path>
 remount [-R]
      remount partitions read-write. if a reboot is required, -R will
      will automatically reboot the device.
 reboot [bootloader|recovery|sideload|sideload-auto-reboot]
     reboot the device; defaults to booting system image but
     supports bootloader and recovery too. sideload reboots
     into recovery and automatically starts sideload mode,
     sideload-auto-reboot is the same but reboots after sideloading.
 sideload OTAPACKAGE      sideload the given full OTA package
 root                     restart adbd with root permissions
 unroot                   restart adbd without root permissions
 usb                      restart adbd listening on USB
 tcpip PORT               restart adbd listening on TCP on PORT

internal debugging:
 start-server             ensure that there is a server running
 kill-server              kill the server if it is running
 reconnect                kick connection from host side to force reconnect
 reconnect device         kick connection from device side to force reconnect
 reconnect offline        reset offline/unauthorized devices to force reconnect

usb:
 attach                   attach a detached USB device
 detach                   detach from a USB device to allow use by other processes
environment variables:
 $ADB_TRACE
     comma-separated list of debug info to log:
     all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp
 $ADB_VENDOR_KEYS         colon-separated list of keys (files or directories)
 $ANDROID_SERIAL          serial number to connect to (see -s)
 $ANDROID_LOG_TAGS        tags to be used by logcat (see logcat --help)
 $ADB_LOCAL_TRANSPORT_MAX_PORT max emulator scan port (default 5585, 16 emus)
 $ADB_MDNS_AUTO_CONNECT   comma-separated list of mdns services to allow auto-connect (default adb-tls-connect)

Online documentation: https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/master/docs/user/adb.1.md


C:\>
  • Nexus 7 をつないで動作確認
    • Nexus 7 側で USB デバッグを有効(ON)にする
      • Nexus 7 で 設定 → タブレット情報を選択
      • ビルド番号 を何回かタップする
        • すると 開発者オプションが有効になりました と表示される
      • 設定 → 開発者オプションを選択して USB デバッグ を有効にする
    • パソコンと Nexus 7 をつなぐ
    • FASTBOOT MODE を起動する
      • コマンドプロンプトで 以下のコマンドを実行
        • adb reboot bootloader
      • Nexus 7 側で USBデバッグを許可しますか? という画面がでてくるのでチェックをつけてOKを選択
      • 再度 adb reboot bootloader コマンドを実行
      • Nexux 7 で FASTBOOT MODE が起動したことを確認
    • ※ 参考にしたサイトでは、以下のコマンドを実行すると結果が得られるようであるが、私の Nexus 7 では初回実施時は応答が得られなかった
      • FASTBOOT MODE で端末情報を表示させる:fastboot devices
      • FASTBOOT MODE で端末を再起動させる:fastboot reboot
      • Google のドライバをインストールしたら応答が返ってくるようになった! なので、先にドライバをインストールする手順を記載しておく。
TWRP のダウンロード
Nexus 7 に TWRP をインストール
  • PC と Nexus 7 を USB で接続
    • ※ 充電モードで接続していることがあるので、その際は通知から充電通知を選択して ファイル転送 を選択する
  • PC で PowerShell を起動
  • 以下のコマンドでFASTBOOTモードを起動
    • adb reboot bootloader
  • Bootloader を unlock する:ブートローダのアンロックでメーカー保証は一切なし、Nexus 7 も完全に初期化されるので、必ず自身の判断で実施してください。(Nexus 7 の保証がいまだにあるのかはわからないですが...)
    • (私の Nexus 7 では Bootloader が locked だったので、アンロックする)
    • 以下のコマンドを実行
      • fastboot oem unlock
    • Nexus 7 側で本当に unlock するのかどうか聞いてくるのでボリュームボタンで Yes を選択して電源ボタンを押す
  • ここで Nexus 7 が再起動してくるが、初期化されているので再セットアップを行う
  • USB デバッグも無効になっているので、再度有効にする
  • 再度 PC と Nexus 7 を USB で接続
  • PC で PowerShell を起動
  • 以下のコマンドでFASTBOOTモードを起動
    • adb reboot bootloader
  • TWRP をインストールする
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot flash recovery recovery.img
  • TWRP の起動
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot boot recovery.img
      • 少し間をおいてから起動してくる
    • ※ 次回以降 TWRP を起動するには、電源を切った状態で 音量上 + 電源ボタン 長押しで起動できる
lineage-20 (Android 13) をインストール
  • lineage-20.0-20230507-UNOFFICIAL-flo.zip を Nexus 7 にコピー
  • TWRP で Install を選択
  • lineage-20.0-20230507-UNOFFICIAL-flo.zip を選択
  • 以下1つにチェックを入れて Swipe to confirm Flash を実行
    • Skip Digest check before installing zip
    • 失敗
  • パーティションのリサイズを実行
    • 以下のページを参考に実施
    • sysrepart_1380_20.zip を Nexus 7 ににコピー
    • TWRP で Install → sysrepart_1380_20.zip を選択して以下だけにチェックをいれて Swipe
      • Skip Digest check before installing zip
    • Reboot System を選択して再起動
  • 再起動したら再度 TWRP を起動
    • Wipe を選択
    • Advanced Wipe を選択
    • Sysetm と Data と Cache にチェックを入れて Swipe を実行
    • フォーマットが終わったら Back と 左矢印で戻る
  • カスタム ROM の zip ファイル(lineage-20.0-20230507-UNOFFICIAL-flo.zip)と、GApps の zip ファイル(MindTheGapps-13.0.0-arm-20230401_160426.zip)を Nexux 7 にコピー
  • Install を選択
  • カスタム ROM を選択して Add more Zips で GApps を選択
  • Swipe してインストールを開始
    • GApps のインストールに失敗。パーティションがなんやかんやといわれる。(エラーをちゃんとメモしておけばよかったが流してしまった...)
  • Reboot System を選択して再起動
  • 電源入れると新しい OS が起動された。

Android 13 で起動した。
しかし GApps がインストールできなかったのでアプリを追加することができない。
一旦ここで中断。

lineage-19 (Android 12) をインストール

以下のモジュールをゲットできたので、再度インストールにトライする。

  • lineage-19.0-20220215-UNOFFICIAL-flo.zip
  • open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip

インストールの手順

  • Nexus 7Windows につなぐ
  • Nexus 7 上でファイル転送に設定
  • WindowsPowerShell を起動
  • PowerShell 上で以下のコマンドを実行
    • adb reboot bootloader
  • Nexus 7 が FASTBOOT MODE になったことを確認
  • TWRP の起動
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot boot recovery.img
      • 少し間をおいてから起動してくるのでちょっと待つ
  • TWRP で Wipe を実行
    • Wipe を選択
    • Advanced Wipe を選択
    • Sysetm と Data と Cache にチェックを入れて Swipe を実行
    • フォーマットが終わったら Back と 左矢印で戻る
  • 以下2つのファイルを Nexus 7 にコピーする
    • lineage-19.0-20220215-UNOFFICIAL-flo.zip
    • open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip
    • コマンド
      • adb push .\lineage-19.0-20220215-UNOFFICIAL-flo.zip /sdcard/
      • adb push .\open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip /sdcard/
  • TWRP で Install を選択
  • カスタム ROM (lineage-19.0-20220215-UNOFFICIAL-flo.zip) を選択して Add more Zips で GApps (open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip) を選択
  • Swipe してインストールを開始
    • GApps のインストールに失敗。 Error Code: 20 Updating partition details...
  • パーティションのリサイズを実行
    • sysrepart_1380_20.zip を Nexus 7 ににコピー
    • TWRP で Install → sysrepart_1380_20.zip を選択して以下だけにチェックをいれて Swipe
      • Skip Digest check before installing zip
  • インストールが成功したら、Wipe cache/delvik を選択
  • Reboot System を選択
  • 電源入れると新しい OS が起動される。
  • 以下のコマンドでFASTBOOTモードを起動
    • adb reboot bootloader
  • TWRP を再度インストールする
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot flash recovery recovery.img
  • TWRP の起動
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot boot recovery.img
      • 少し間をおいてから起動してくる
  • TWRP で Mount を選択
    • System、Data、Cache にチェックを入れてホームボタンで戻る
  • TWRP で Wipe を実行
    • Wipe を選択
    • Advanced Wipe を選択
    • Sysetm と Data と Cache にチェックを入れて Swipe を実行
    • フォーマットが終わったら ホームボタンで戻る
  • 以下2つのファイルを Nexus 7 にコピーする
    • lineage-19.0-20220215-UNOFFICIAL-flo.zip
    • open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip
    • コマンド
      • adb push .\lineage-19.0-20220215-UNOFFICIAL-flo.zip /sdcard/
      • adb push .\open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip /sdcard/
  • TWRP で Install を選択
  • カスタム ROM (lineage-19.0-20220215-UNOFFICIAL-flo.zip) を選択して Add more Zips で GApps (open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip) を選択
  • Swipe してインストールを開始
    • やはり GApps がインストールできず。
  • 次に BiTGApps-arm-12.0.0-R39_signed.zip をためす
    • 成功したっぽい
    • Reboot System を選択
  • 動いた

lineage 19 起動後の動作確認

  • 日本語表示:設定可能、日本語も違和感なし
  • GooglePlay:インストールされていた。
    • サインインして Chrome をインストール。しかし保留中でインストールできず。。
    • いくら待ってもアプリがインストールされない。

今回もここでいったん中断。
アプリはいらないとあまり使い道がないので、もう一回考える。

lineage 19 と GApps の組み合わせを変えてみる

ネットでの検索結果をもとに、Google Play が動作した報告のある以下の組み合わせにしてみる。

  • lineage-19.0-20220215-UNOFFICIAL-flo.zip
  • NikGapps-core-arm64-12.1-20230418-signed.zip

いざ実行。

  • WindowsNexus 7 を USB で接続
  • FASTBOOTモードを起動
    • adb reboot bootloader
  • TWRP の起動
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot boot recovery.img
      • 少し間をおいてから起動してくる
  • TWRP で System をマウント
  • TWRP で Wipe を選択
    • Advanced Wipe を選択
    • Sysetm と Data と Cache にチェックを入れて Swipe を実行
    • ホームボタンで戻る
  • TWRP で Wipe を選択
    • Format Data を選択
    • yes を入力
  • 以下2つのファイルを Nexus 7 にコピーする
    • lineage-19.0-20220215-UNOFFICIAL-flo.zip
    • open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip
    • コマンド
      • adb push .\lineage-19.0-20220215-UNOFFICIAL-flo.zip /sdcard/
      • adb push .\NikGapps-core-arm64-12.1-20230418-signed.zip /sdcard/
  • TWRP で Install を選択
  • カスタム ROM (lineage-19.0-20220215-UNOFFICIAL-flo.zip) を選択して Add more Zips で GApps (open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip) を選択
  • Swipe してインストールを開始
  • インストールできた
  • Reboot System を選択

GApps がでてこない。
では、もう一つ動作報告のある以下の構成を試してみる。

  • lineage-19.0-20220215-UNOFFICIAL-flo.zip
  • BiTGApps-arm-12.0.0-v2.0-CORE.zip

実施。
だんだん手馴れてきた。

  • WindowsNexus 7 を USB で接続
  • FASTBOOTモードを起動
    • adb reboot bootloader
  • TWRP の起動
    • Nexus 7 が FASTBOOT モードの状態のまま以下のコマンドを実行
      • fastboot boot recovery.img
      • 少し間をおいてから起動してくる
  • TWRP で System をマウント
  • TWRP で Wipe を選択
    • Advanced Wipe を選択
    • Sysetm と Data と Cache にチェックを入れて Swipe を実行
    • ホームボタンで戻る
  • TWRP で Wipe を選択
    • Format Data を選択
    • yes を入力
  • 以下2つのファイルを Nexus 7 にコピーする
    • lineage-19.0-20220215-UNOFFICIAL-flo.zip
    • open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip
    • コマンド
      • adb push .\lineage-19.0-20220215-UNOFFICIAL-flo.zip /sdcard/
      • adb push .\BiTGApps-arm-12.0.0-v2.0-CORE.zip /sdcard/
  • TWRP で Install を選択
  • カスタム ROM (lineage-19.0-20220215-UNOFFICIAL-flo.zip) を選択して Add more Zips で GApps (open_gapps-arm-12L-pico-20220705-UNOFFICIAL_MOD.zip) を選択
  • Swipe してインストールを開始
  • インストールできた
  • Reboot System を選択

OS が Android 12 で Gooele Play も動作した。
ChromeFirefox、Yahoo 天気 をインストールすることができた。

GApps が使えなければ...

以下でアプリを入れることができるらしい。
実際には試さなかったがメモしておく。

  • apkpure
  • aurora store