Pixel 4a : ファクトリーイメージを使ったスクリプトによるアップグレードやダウングレード
概要
Pixel 4a : ファクトリーイメージを使った Android Flash Tool によるアップグレードとダウングレード では、ブラウザベースの Android Flash Tool によるダウングレードの方法を記載しましたが、ファクトリーイメージを使ったダウングレードやアップグレードはスクリプトでも可能です。
そこでスクリプトによる方法も記載しておきます。
Android Flash Tool の Advanced Options にあったような細かい操作はできないようですが、慣れるとスクリプトのほうが早いかもしれません。
Google のページの情報
Nexus デバイスと Pixel デバイスのファクトリー イメージ に記載されている “フラッシュの手順“ が、スクリプトによる方法です。
Android Flash Tool を用いる場合と同様に Google Pixel 6、Google Pixel 6 Pro、Google Pixel 6a では注意が必要です。
利用規約も含めて、詳細は上記のページをご参照ください。
Pixel 4a で実際に行ってみた結果
以下、Pixel 4a と作業用に Windows の PC を使った結果を記載しておきます。
Android 12 → 11 のダウングレードの例です。
(1) 作業用の PC の準備
必要なものは以下です。
- Android SDK Platform-Tools
入手方法などは、フル OTA イメージによるアップグレードに記載しています。
Android SDK Platform-Tools がインストールされたフォルダ(%USERPROFILE%\APPDATA\Local\Android\Sdk\platform-tools) にパスを通しておく必要もあります。
環境変数でパスの設定方法は、コマンドラインコンパイラのページなどを参考に、上記のフォルダに対してパスを設定する形してください。 - Google USB ドライバ
入手方法などについては、ファクトリーイメージを使った Android Flash Tool によるダウングレード に記載しています。
(2) Pixel 4a 側の準備
開発者向けオプションを有効にし、[USB デバッグ] および [OEM ロックの解除] を有効にします。
これらの設定方法については、ファクトリーイメージを使った Android Flash Tool によるダウングレード でも記載しています。
今回ダウングレード前のバージョンは 12 です。
![ダウングレード前は Android 12](https://iwannacreateapps.com/wp-content/uploads/2024/01/BeforeDowngrade_05-245x530.png)
(3) 作業用 PC と Pixel 4a を USB ケーブルで接続します。
接続時に、[USB デバッグを許可しますか?] と表示されたら許可します。
![USB デバッグを許可しますか?](https://iwannacreateapps.com/wp-content/uploads/2024/01/BeforeDowngrade_06-245x530.png)
(4) ファクトリーイメージのダウンロード
Nexus デバイスと Pixel デバイスのファクトリー イメージ のページから、所望のバージョンのファクトリーイメージをダウンロードします。
ここでは、sunfish-rp1a.200720.011-factory-1a38c5a6.zip をダウンロードした例を記載します。
![sunfish-rp1a.200720.011-factory-1a38c5a6.zip をダウンロード](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_01-530x323.png)
ダウンロードしたファイルを解凍します。
ここでは、C: を指定して解凍しています。
![C: に解凍](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_02-530x444.png)
C:\sunfish-rp1a.200720.011 フォルダとその配下にファイルが展開されます。
![解凍後の C:\sunfish-rp1a.200720.011 フォルダ](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_03-530x391.png)
(5) 作業用 PC でコマンドプロンプト、あるいはターミナルを開いて、ファクトリーイメージを解凍したフォルダに移動します。
cd C:\sunfish-rp1a.200720.011
![コマンドプロンプト - cd C:\sunfish-rp1a.200720.011](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_04-530x283.png)
(6) Fastbootモードで起動させ、ブートローダーをアンロックします。
adb reboot bootloader
![コマンドプロンプト - adb reboot bootloader](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_05-530x283.png)
コマンド実行後、Pixel 4a の画面が以下のようになることを確認します。
![Pixel 4a - bootloader - Device State: locked](https://iwannacreateapps.com/wp-content/uploads/2024/01/Pixel4aScreenshot_01-302x530.png)
続けて以下を実行します。
fastboot flashing unlock
![コマンドプロンプト - fastboot flashing unlock](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_06-530x283.png)
Pixel4a は、以下のように変わります。
![Pixel 4a - Unlock the bootloader](https://iwannacreateapps.com/wp-content/uploads/2024/01/Pixel4aScreenshot_02-302x530.png)
Pixel 4a 上で、[Unlock the bootloader] が選択されていることを確認します。選択されていない場合は電源大小ボタンで選択します。
選択後、電源ボタンを押します。Pixel 4a がリブートして 再度 Fastboot Mode の画面となります。
Device State: unlocked となっていることを確認します。
![Pixel 4a - bootloader - Device State: unlocked](https://iwannacreateapps.com/wp-content/uploads/2024/01/Pixel4aScreenshot_03-302x530.png)
(7) 作業用 PC に戻り、コマンドプロンプトで flash-all.bat を実行します。
flash-all.bat
![コマンドプロンプト - flash-all.bat](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_07-530x283.png)
コマンドプロンプトでは、処理中多くの出力があります。
Pixel 4a 側の画面も処理に応じて変わっていきます。(特にこの間は操作する必要はないです。)
コマンドプロンプト上で、Press any key to exit と表示されたら完了です。
![コマンドプロンプト - flash-all.bat 完了](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_10-530x283.png)
参考までに、flash-all.bat での出力内容を記載しておきます。
C:\sunfish-rp1a.200720.011>flash-all.bat
Warning: skip copying bootloader_b image avb footer (bootloader_b partition size: 0, bootloader_b image size: 8541800).
Sending 'bootloader_b' (8341 KB) OKAY [ 0.315s]
Writing 'bootloader_b' (bootloader) Flashing Pack version s5-0.2-6539975
(bootloader) Flashing partition table for Lun = 0
(bootloader) Flashing partition table for Lun = 1
(bootloader) Flashing partition table for Lun = 2
(bootloader) Flashing partition table for Lun = 4
(bootloader) Flashing partition table for Lun = 5
(bootloader) Flashing partition xbl_b
(bootloader) Flashing partition xbl_config_b
(bootloader) Flashing partition aop_b
(bootloader) Flashing partition tz_b
(bootloader) Flashing partition hyp_b
(bootloader) Flashing partition abl_b
(bootloader) Flashing partition keymaster_b
(bootloader) Flashing partition cmnlib_b
(bootloader) Flashing partition cmnlib64_b
(bootloader) Flashing partition devcfg_b
(bootloader) Flashing partition qupfw_b
(bootloader) Flashing partition uefisecapp_b
(bootloader) Flashing partition logfs
OKAY [ 0.317s]
Finished. Total time: 1.118s
Rebooting into bootloader OKAY [ 0.048s]
Finished. Total time: 0.048s
Warning: skip copying radio_b image avb footer (radio_b partition size: 0, radio_b image size: 74109068).
Sending 'radio_b' (72372 KB) OKAY [ 1.918s]
Writing 'radio_b' (bootloader) Flashing Pack version SSD:g7150-00018-200701-B-6643937
(bootloader) Flashing partition modem_b
OKAY [ 0.353s]
Finished. Total time: 2.964s
Rebooting into bootloader OKAY [ 0.035s]
Finished. Total time: 0.052s
--------------------------------------------
Bootloader Version...: s5-0.2-6539975
Baseband Version.....: g7150-00018-200701-B-6643937
Serial Number........: 13111JEC216013
--------------------------------------------
extracting android-info.txt (0 MB) to RAM...
Checking 'product' OKAY [ 0.067s]
Checking 'version-bootloader' OKAY [ 0.066s]
Checking 'version-baseband' OKAY [ 0.069s]
Setting current slot to 'b' OKAY [ 0.082s]
archive does not contain 'fastboot-info.txt'
extracting boot.img (64 MB) to disk... took 0.165s
archive does not contain 'init_boot.img'
extracting dtbo.img (8 MB) to disk... took 0.020s
archive does not contain 'dt.img'
archive does not contain 'pvmfw.img'
archive does not contain 'recovery.img'
extracting vbmeta.img (0 MB) to disk... took 0.002s
extracting vbmeta_system.img (0 MB) to disk... took 0.001s
archive does not contain 'vbmeta_vendor.img'
archive does not contain 'vendor_boot.img'
archive does not contain 'vendor_kernel_boot.img'
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
archive does not contain 'boot_other.img'
archive does not contain 'odm.img'
archive does not contain 'odm_dlkm.img'
extracting product.img (1942 MB) to disk... took 5.297s
extracting system.img (779 MB) to disk... took 2.389s
archive does not contain 'system_dlkm.img'
extracting system_ext.img (219 MB) to disk... took 0.631s
extracting system_other.img (23 MB) to disk... took 0.086s
extracting vendor.img (523 MB) to disk... took 1.569s
archive does not contain 'vendor_dlkm.img'
archive does not contain 'vendor_other.img'
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting super_empty.img (0 MB) to RAM...
extracting boot.img (64 MB) to disk... took 0.165s
archive does not contain 'boot.sig'
extracting super_empty.img (0 MB) to RAM...
Sending 'boot_b' (65536 KB) OKAY [ 1.709s]
Writing 'boot_b' OKAY [ 0.233s]
extracting super_empty.img (0 MB) to RAM...
extracting dtbo.img (8 MB) to disk... took 0.006s
archive does not contain 'dtbo.sig'
extracting super_empty.img (0 MB) to RAM...
Sending 'dtbo_b' (8192 KB) OKAY [ 0.314s]
Writing 'dtbo_b' OKAY [ 0.080s]
extracting super_empty.img (0 MB) to RAM...
extracting vbmeta.img (0 MB) to disk... took 0.003s
archive does not contain 'vbmeta.sig'
extracting super_empty.img (0 MB) to RAM...
Sending 'vbmeta_b' (8 KB) OKAY [ 0.121s]
Writing 'vbmeta_b' OKAY [ 0.069s]
extracting super_empty.img (0 MB) to RAM...
extracting vbmeta_system.img (0 MB) to disk... took 0.001s
archive does not contain 'vbmeta_system.sig'
extracting super_empty.img (0 MB) to RAM...
Sending 'vbmeta_system_b' (4 KB) OKAY [ 0.130s]
Writing 'vbmeta_system_b' OKAY [ 0.074s]
extracting super_empty.img (0 MB) to disk... took 0.000s
Rebooting into fastboot OKAY [ 0.067s]
< waiting for any device >
Sending 'super' (4 KB) OKAY [ 0.001s]
Updating super partition OKAY [ 0.013s]
Resizing 'product_b' OKAY [ 0.001s]
Resizing 'system_b' OKAY [ 0.002s]
Resizing 'system_ext_b' OKAY [ 0.005s]
Resizing 'system_b' OKAY [ 0.005s]
Resizing 'vendor_b' OKAY [ 0.007s]
extracting super_empty.img (0 MB) to RAM...
extracting product.img (1942 MB) to disk... took 5.750s
archive does not contain 'product.sig'
Resizing 'product_b' OKAY [ 0.002s]
Sending sparse 'product_b' 1/8 (262140 KB) OKAY [ 6.540s]
Writing 'product_b' OKAY [ 1.924s]
Sending sparse 'product_b' 2/8 (262140 KB) OKAY [ 6.473s]
Writing 'product_b' OKAY [ 0.921s]
Sending sparse 'product_b' 3/8 (262140 KB) OKAY [ 6.506s]
Writing 'product_b' OKAY [ 0.920s]
Sending sparse 'product_b' 4/8 (262140 KB) OKAY [ 6.526s]
Writing 'product_b' OKAY [ 0.934s]
Sending sparse 'product_b' 5/8 (262140 KB) OKAY [ 6.514s]
Writing 'product_b' OKAY [ 0.915s]
Sending sparse 'product_b' 6/8 (262140 KB) OKAY [ 6.474s]
Writing 'product_b' OKAY [ 0.941s]
Sending sparse 'product_b' 7/8 (262140 KB) OKAY [ 6.525s]
Writing 'product_b' OKAY [ 0.902s]
Sending sparse 'product_b' 8/8 (154308 KB) OKAY [ 3.870s]
Writing 'product_b' OKAY [ 0.595s]
extracting super_empty.img (0 MB) to RAM...
extracting system.img (779 MB) to disk... took 2.538s
archive does not contain 'system.sig'
Resizing 'system_b' OKAY [ 0.008s]
Sending sparse 'system_b' 1/4 (262140 KB) OKAY [ 6.572s]
Writing 'system_b' OKAY [ 1.921s]
Sending sparse 'system_b' 2/4 (262140 KB) OKAY [ 6.573s]
Writing 'system_b' OKAY [ 0.898s]
Sending sparse 'system_b' 3/4 (261312 KB) OKAY [ 6.509s]
Writing 'system_b' OKAY [ 0.902s]
Sending sparse 'system_b' 4/4 (12504 KB) OKAY [ 0.316s]
Writing 'system_b' OKAY [ 0.078s]
extracting super_empty.img (0 MB) to RAM...
extracting system_ext.img (219 MB) to disk... took 0.645s
archive does not contain 'system_ext.sig'
Resizing 'system_ext_b' OKAY [ 0.000s]
Sending 'system_ext_b' (224872 KB) OKAY [ 5.623s]
Writing 'system_ext_b' OKAY [ 1.832s]
extracting super_empty.img (0 MB) to RAM...
extracting system_other.img (23 MB) to disk... took 0.084s
archive does not contain 'system_other.sig'
Resizing 'system_a' OKAY [ 0.007s]
Sending 'system_a' (23652 KB) OKAY [ 0.596s]
Writing 'system_a' OKAY [ 0.162s]
extracting super_empty.img (0 MB) to RAM...
extracting vendor.img (523 MB) to disk... took 1.648s
archive does not contain 'vendor.sig'
Resizing 'vendor_b' OKAY [ 0.017s]
Sending sparse 'vendor_b' 1/3 (262140 KB) OKAY [ 6.555s]
Writing 'vendor_b' OKAY [ 1.924s]
Sending sparse 'vendor_b' 2/3 (262140 KB) OKAY [ 6.521s]
Writing 'vendor_b' OKAY [ 0.940s]
Sending sparse 'vendor_b' 3/3 (11684 KB) OKAY [ 0.297s]
Writing 'vendor_b' OKAY [ 0.080s]
Erasing 'userdata' OKAY [ 4.041s]
Erase successful, but not automatically formatting.
File system type raw not supported.
wipe task partition not found: cache
Erasing 'metadata' OKAY [ 0.002s]
Erase successful, but not automatically formatting.
File system type raw not supported.
Rebooting OKAY [ 0.000s]
Finished. Total time: 153.941s
Press any key to exit...
出力通り、何かキーを押すとコマンドプロンプトが閉じます。
(8) Pixel 4a 側で、セットアップウィザードが開始されているので設定します。
![Pixel 4a - Android 11 セットアップウィザード](https://iwannacreateapps.com/wp-content/uploads/2024/02/AfterDowngrade2_01-245x530.png)
(9) 再度、開発者オプションを有効にして USB デバッグを有効にします。
[USB デバッグを許可しますか?] のダイアログが表示されたら許可します。
(10) ブートローダーをロックします。
再度コマンドプロンプトを起動して、以下を実行します。カレントディレクトリはどこでも構いません。
adb reboot bootloader
![コマンドプロンプト - adb reboot bootloader](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_12-530x283.png)
もし、以下のように This adb server’s $ADB_VENDER_KEYS is not set のようなエラーになるのであれば、表示されているように adb kill-server を実行すると改善すると思います。
![コマンドプロンプト - adb reboot bootloader エラー](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_11-530x283.png)
Pixel 4a が再起動して以下の画面となります。
![Pixel 4a - bootloader - Device State: unlocked](https://iwannacreateapps.com/wp-content/uploads/2024/01/Pixel4aScreenshot_08-302x530.png)
PC 側でコマンドを実行します。
fastboot flashing lock
![コマンドプロンプト - fastboot flashing lock](https://iwannacreateapps.com/wp-content/uploads/2024/01/Screenshot_13-530x283.png)
Pixel4a の画面が変わります。
![Pixel 4a -Do not lock the bootloader](https://iwannacreateapps.com/wp-content/uploads/2024/01/Pixel4aScreenshot_09-302x530.png)
音量大小ボタンで [Lock the bootloader] を選択して、電源ボタンで決定します。
![Pixel 4a -:ock the bootloader](https://iwannacreateapps.com/wp-content/uploads/2024/01/Pixel4aScreenshot_10-302x530.png)
再起動し、Fastboot Mode の画面となった場合は Device state : locked となっていることを確認します。
Fastboot Mode の画面で起動が止まった場合は、右上が [Start] となっていることを確認して電源ボタンを押します。
再度 Android の初期ウィザードが走りますのでセットアップします。
セットアップ後、ダウングレードできたことを確認します。
以上でスクリプトでのダウングレードは完了です。
参考となれば幸いです。
Pixel 4a は対応する Android のバージョンが多く、デバッグ用には便利だと思います。