秋葉原でXperia XZs G8232を4400円で入手した。
調べて見るとGSIイメージを書き込むという手法があるようでFIRE & TECH「Xperia XZs の ROM 焼き」で紹介されていた。
ファイルの配布元はxda-forumの「[10.0] Project Treble for Xperia XZs [2020.03.18]」で、どういうことをやっているのかは「Fake Treble for Xperia XZ」に書かれている。
まずはXperia XZsのbootloader unlockをするために、設定画面から「OEMロック解除」を有効にする。
で、IMEI調べて、sonyの「Unlock Bootloader」でbootloader unlockのコードを申請して入手。
電源オフ状態でボリューム↑ボタンを押しながらUSBケーブルでパソコンに接続すると、fastbootモードで起動します。
起動するとXZs左上のランプが青く点灯し、パソコンから「fastboot devices」を実行するとデバイスが表示されます。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot.exe devices |
4 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
続いて申請して表示された文字列の先頭に0xを付け加えて「fastboot oem unlock 0x~」と入力します。
最初間違えて0xをつけないで実行してしまったのでエラーになっています。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot oem unlock 570C856D14FAxxxx |
2 | FAILED (remote: 'Incorrect format for unlock data. Should be on the form "0x') |
3 | fastboot: error: Command failed |
5 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot oem unlock 0x570C856D14FAxxxx |
7 | Finished. Total time: 2.059s |
9 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
Treble-10.0-keyaki-4.9-sjll-V2.10.zipのHow-to-flash.txtは下記の様に書いてあります。
2 | fastboot flash oem vendor.img |
3 | fastboot flash boot boot.img |
4 | fastboot flash system <GSI Image> |
6 | GSI should be A/B type, Never use A-Only! |
8 | For XZs, you can use the twrp of X Performance or XZ's. |
10 | NEVER, NEVER flash Sony Open devices oem image!!!!!! |
まずは「Format Data」ということで「fastboot -w」(Wipe)を実行します。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w |
2 | Erasing 'userdata' OKAY [ 0.385s] |
3 | mke2fs 1.45.4 (23-Sep-2019) |
4 | Creating filesystem with 13089792 4k blocks and 3276800 inodes |
5 | Filesystem UUID: f9136b0e-0b12-11ec-a6fc-fda6154f283e |
6 | Superblock backups stored on blocks: |
7 | 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, |
8 | 4096000, 7962624, 11239424 |
10 | Allocating group tables: done |
11 | Writing inode tables: done |
12 | Creating journal (65536 blocks): done |
13 | Writing superblocks and filesystem accounting information: done |
15 | Sending 'userdata' (4396 KB) OKAY [ 0.144s] |
16 | Writing 'userdata' OKAY [ 0.059s] |
17 | Erasing 'cache' OKAY [ 0.026s] |
18 | mke2fs 1.45.4 (23-Sep-2019) |
19 | Creating filesystem with 65536 4k blocks and 65536 inodes |
20 | Filesystem UUID: f96341ce-0b12-11ec-b52e-2ff551a4869a |
21 | Superblock backups stored on blocks: |
24 | Allocating group tables: done |
25 | Writing inode tables: done |
26 | Creating journal (4096 blocks): done |
27 | Writing superblocks and filesystem accounting information: done |
29 | Sending 'cache' (120 KB) OKAY [ 0.025s] |
30 | Writing 'cache' OKAY [ 0.026s] |
31 | Finished. Total time: 1.213s |
33 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
続いて Treble-10.0-keyaki-4.9-sjll-V2.10.zipの vendor.imgをOEM領域に書き込みます。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash oem F:\download\android\xperia-xzs\vendor.img |
2 | Sending 'oem' (248608 KB) OKAY [ 6.827s] |
3 | Writing 'oem' OKAY [ 1.871s] |
4 | Finished. Total time: 8.853s |
6 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
Treble-10.0-keyaki-4.9-sjll-V2.10.zipのHow-to-flash.txt の boot.imgをboot領域に書き込みます。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash boot F:\download\android\xperia-xzs\boot.img |
2 | Sending 'boot' (12368 KB) OKAY [ 0.366s] |
3 | Writing 'boot' OKAY [ 0.110s] |
4 | Finished. Total time: 0.530s |
6 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
最後にGSIイメージをsystem領域に書き込みます。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android10\system-quack-arm64-ab-gapps_v222.img |
2 | Invalid sparse file format at header magic |
3 | error: write_sparse_skip_chunk: don't care size 480526784 is not a multiple of the block size 4096 |
4 | error: write_sparse_skip_chunk: don't care size 212095424 is not a multiple of the block size 4096 |
5 | Sending sparse 'system' 1/3 (262140 KB) error: write_sparse_skip_chunk: don't care size 480526784 is not a multiple of the block size 4096 |
6 | error: write_sparse_skip_chunk: don't care size 480526784 is not a multiple of the block size 4096 |
8 | Writing 'system' FAILED (remote: 'buffer overreads occured due to invalid sparse header') |
9 | fastboot: error: Command failed |
11 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
エラーとなりました。
よく調べてみたところ、img.xzのはずなのですが、imgとしてファイルが保存されていたための問題でした。
xzファイルを展開して再チャレンジ
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android10\system-quack-arm64-ab-gapps_v222.img |
2 | Sending sparse 'system' 1/9 (262140 KB) OKAY [ 7.497s] |
3 | Writing 'system' OKAY [ 2.023s] |
4 | Sending sparse 'system' 2/9 (262140 KB) OKAY [ 7.572s] |
5 | Writing 'system' OKAY [ 2.050s] |
6 | Sending sparse 'system' 3/9 (262140 KB) OKAY [ 7.548s] |
7 | Writing 'system' OKAY [ 2.035s] |
8 | Sending sparse 'system' 4/9 (262140 KB) OKAY [ 7.650s] |
9 | Writing 'system' OKAY [ 2.101s] |
10 | Sending sparse 'system' 5/9 (262140 KB) OKAY [ 7.672s] |
11 | Writing 'system' OKAY [ 2.102s] |
12 | Sending sparse 'system' 6/9 (262140 KB) OKAY [ 7.673s] |
13 | Writing 'system' OKAY [ 2.060s] |
14 | Sending sparse 'system' 7/9 (262140 KB) OKAY [ 7.645s] |
15 | Writing 'system' OKAY [ 1.984s] |
16 | Sending sparse 'system' 8/9 (262140 KB) OKAY [ 7.641s] |
17 | Writing 'system' OKAY [ 2.068s] |
18 | Sending sparse 'system' 9/9 (183260 KB) OKAY [ 5.354s] |
19 | Writing 'system' OKAY [ 1.434s] |
20 | Finished. Total time: 91.779s |
22 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
今度は成功です。
再起動します。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot |
2 | Rebooting OKAY [ 0.002s] |
3 | Finished. Total time: 0.003s |
5 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
で・・・Android 10で起動しました。
続いて、Android 11のGSIが使えるのか確認。
「fastboot -w」でフォーマット
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot devices |
4 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w |
5 | Erasing 'userdata' OKAY [ 1.073s] |
6 | mke2fs 1.45.4 (23-Sep-2019) |
7 | Creating filesystem with 13089792 4k blocks and 3276800 inodes |
8 | Filesystem UUID: 4150c0de-0b17-11ec-9cae-af9c3c428626 |
9 | Superblock backups stored on blocks: |
10 | 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, |
11 | 4096000, 7962624, 11239424 |
13 | Allocating group tables: done |
14 | Writing inode tables: done |
15 | Creating journal (65536 blocks): done |
16 | Writing superblocks and filesystem accounting information: done |
18 | Sending 'userdata' (4396 KB) OKAY [ 0.156s] |
19 | Writing 'userdata' OKAY [ 0.061s] |
20 | Erasing 'cache' OKAY [ 0.030s] |
21 | mke2fs 1.45.4 (23-Sep-2019) |
22 | Creating filesystem with 65536 4k blocks and 65536 inodes |
23 | Filesystem UUID: 41a1c326-0b17-11ec-a365-bd86ad12ab05 |
24 | Superblock backups stored on blocks: |
27 | Allocating group tables: done |
28 | Writing inode tables: done |
29 | Creating journal (4096 blocks): done |
30 | Writing superblocks and filesystem accounting information: done |
32 | Sending 'cache' (120 KB) OKAY [ 0.022s] |
33 | Writing 'cache' OKAY [ 0.024s] |
34 | Finished. Total time: 1.819s |
36 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
続いてGSIをsystem領域に書き込みます。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android11\system-roar-arm-ab-gogapps_v312.img |
2 | Sending sparse 'system' 1/6 (262140 KB) OKAY [ 7.562s] |
3 | Writing 'system' OKAY [ 1.975s] |
4 | Sending sparse 'system' 2/6 (262140 KB) OKAY [ 7.591s] |
5 | Writing 'system' OKAY [ 2.083s] |
6 | Sending sparse 'system' 3/6 (262140 KB) OKAY [ 7.653s] |
7 | Writing 'system' OKAY [ 2.028s] |
8 | Sending sparse 'system' 4/6 (262140 KB) OKAY [ 7.713s] |
9 | Writing 'system' OKAY [ 2.085s] |
10 | Sending sparse 'system' 5/6 (262140 KB) OKAY [ 7.679s] |
11 | Writing 'system' OKAY [ 2.018s] |
12 | Sending sparse 'system' 6/6 (243672 KB) OKAY [ 7.158s] |
13 | Writing 'system' OKAY [ 1.923s] |
14 | Finished. Total time: 61.099s |
16 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
再起動
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot |
2 | Rebooting OKAY [ 0.010s] |
3 | Finished. Total time: 0.013s |
5 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
Xperiaロゴが出たあと、電源が切れ、再びfastbootモードになってしまいました。
今度は省略したところも全て再実行
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w
Erasing ‘userdata’ OKAY [ 1.073s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 13089792 4k blocks and 3276800 inodes
Filesystem UUID: 4150c0de-0b17-11ec-9cae-af9c3c428626
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
Sending ‘userdata’ (4396 KB) OKAY [ 0.156s]
Writing ‘userdata’ OKAY [ 0.061s]
Erasing ‘cache’ OKAY [ 0.030s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 65536 4k blocks and 65536 inodes
Filesystem UUID: 41a1c326-0b17-11ec-a365-bd86ad12ab05
Superblock backups stored on blocks:
32768
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Sending ‘cache’ (120 KB) OKAY [ 0.022s]
Writing ‘cache’ OKAY [ 0.024s]
Finished. Total time: 1.819s
C:\Program Files (x86)\Android\android-sdk\platform-tools>
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android11\system-roar-arm-ab-gogapps_v312.img
Sending sparse ‘system’ 1/6 (262140 KB) OKAY [ 7.562s]
Writing ‘system’ OKAY [ 1.975s]
Sending sparse ‘system’ 2/6 (262140 KB) OKAY [ 7.591s]
Writing ‘system’ OKAY [ 2.083s]
Sending sparse ‘system’ 3/6 (262140 KB) OKAY [ 7.653s]
Writing ‘system’ OKAY [ 2.028s]
Sending sparse ‘system’ 4/6 (262140 KB) OKAY [ 7.713s]
Writing ‘system’ OKAY [ 2.085s]
Sending sparse ‘system’ 5/6 (262140 KB) OKAY [ 7.679s]
Writing ‘system’ OKAY [ 2.018s]
Sending sparse ‘system’ 6/6 (243672 KB) OKAY [ 7.158s]
Writing ‘system’ OKAY [ 1.923s]
Finished. Total time: 61.099s
C:\Program Files (x86)\Android\android-sdk\platform-tools>
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting OKAY [ 0.010s]
Finished. Total time: 0.013s
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot devices
BH9011G172 fastboot
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w
Erasing ‘userdata’ OKAY [ 0.722s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 13089792 4k blocks and 3276800 inodes
Filesystem UUID: e9ea269a-0b17-11ec-8cba-a17b44c778c4
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
Sending ‘userdata’ (4396 KB) OKAY [ 0.145s]
Writing ‘userdata’ OKAY [ 0.061s]
Erasing ‘cache’ OKAY [ 0.026s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 65536 4k blocks and 65536 inodes
Filesystem UUID: ea381fe4-0b17-11ec-b1f1-f1b13df9e489
Superblock backups stored on blocks:
32768
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Sending ‘cache’ (120 KB) OKAY [ 0.023s]
Writing ‘cache’ OKAY [ 0.026s]
Finished. Total time: 1.443s
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash oem F:\download\android\xperia-xzs\vendor.img
Sending ‘oem’ (248608 KB) OKAY [ 6.746s]
Writing ‘oem’ OKAY [ 1.910s]
Finished. Total time: 8.825s
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash boot F:\download\android\xperia-xzs\boot.img
Sending ‘boot’ (12368 KB) OKAY [ 0.426s]
Writing ‘boot’ OKAY [ 0.116s]
Finished. Total time: 1.085s
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android11\system-roar-arm-ab-gogapps_v312.img
Sending sparse ‘system’ 1/6 (262140 KB) OKAY [ 7.523s]
Writing ‘system’ OKAY [ 2.121s]
Sending sparse ‘system’ 2/6 (262140 KB) OKAY [ 7.584s]
Writing ‘system’ OKAY [ 2.055s]
Sending sparse ‘system’ 3/6 (262140 KB) OKAY [ 7.543s]
Writing ‘system’ OKAY [ 2.071s]
Sending sparse ‘system’ 4/6 (262140 KB) OKAY [ 8.527s]
Writing ‘system’ OKAY [ 2.036s]
Sending sparse ‘system’ 5/6 (262140 KB) OKAY [ 7.556s]
Writing ‘system’ OKAY [ 2.058s]
Sending sparse ‘system’ 6/6 (243672 KB) OKAY [ 7.044s]
Writing ‘system’ OKAY [ 1.945s]
Finished. Total time: 61.023s
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting OKAY [ 0.002s]
Finished. Total time: 0.005s
C:\Program Files (x86)\Android\android-sdk\platform-tools>
….やっぱりダメですね。
2021/09/04追記:よく見たらarmイメージを書き込んでいました。arm64じゃん・・・
Google配布のAndroid 12のGSIイメージを書き込めるかもチャレンジ
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android12\system.img |
2 | Invalid sparse file format at header magic |
3 | Sending sparse 'system' 1/10 (262104 KB) OKAY [ 7.717s] |
4 | Writing 'system' OKAY [ 2.124s] |
5 | Sending sparse 'system' 2/10 (262128 KB) OKAY [ 7.544s] |
6 | Writing 'system' OKAY [ 2.070s] |
7 | Sending sparse 'system' 3/10 (262112 KB) OKAY [ 7.527s] |
8 | Writing 'system' OKAY [ 2.053s] |
9 | Sending sparse 'system' 4/10 (262128 KB) OKAY [ 7.672s] |
10 | Writing 'system' OKAY [ 2.073s] |
11 | Sending sparse 'system' 5/10 (262124 KB) OKAY [ 7.563s] |
12 | Writing 'system' OKAY [ 2.073s] |
13 | Sending sparse 'system' 6/10 (262124 KB) OKAY [ 7.524s] |
14 | Writing 'system' OKAY [ 2.021s] |
15 | Sending sparse 'system' 7/10 (262116 KB) OKAY [ 7.516s] |
16 | Writing 'system' OKAY [ 2.044s] |
17 | Sending sparse 'system' 8/10 (262084 KB) OKAY [ 7.550s] |
18 | Writing 'system' OKAY [ 2.147s] |
19 | Sending sparse 'system' 9/10 (262128 KB) OKAY [ 7.798s] |
20 | Writing 'system' OKAY [ 2.051s] |
21 | Sending sparse 'system' 10/10 (126492 KB) OKAY [ 3.675s] |
22 | Writing 'system' OKAY [ 6.845s] |
23 | Finished. Total time: 104.423s |
25 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot |
26 | Rebooting OKAY [ 0.003s] |
27 | Finished. Total time: 0.007s |
29 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
SONYロゴのままハングアップ。電源ボタン長押しでのoffも出来なくなりました。
ということで、Xperia XZsのfake GSIで使えるのはAndroid 10のみということですね。
TWRPを書き込めるか確認:twrp-q-V1.img
fastbootモードにしてからrecovery領域に書き込んだ。
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash recovery F:\download\android\xperia-xzs\twrp-q-V1.img |
2 | Sending 'recovery' (20056 KB) OKAY [ 0.706s] |
3 | Writing 'recovery' OKAY [ 0.158s] |
4 | Finished. Total time: 1.418s |
6 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
Androidが起動してからadb reboot recoveryでTWRPが起動することを確認
1 | C:\Program Files (x86)\Android\android-sdk\platform-tools>adb reboot recovery |
3 | C:\Program Files (x86)\Android\android-sdk\platform-tools> |
なお、ボリューム↓+電源ボタンで起動してもTWRPが起動する。
Andy Yan’s personal builds // GSI にあるLineageOS 17.1のテストと、GAppが書き込めるか確認
きちんと書き込めて、TWRP経由でNikGAppsのNikGapps-stock-arm64-10-20210815-signed.zipを書き込み、Lineage OS 17.1上でGappsが使えることを確認しました。
Android 11 Custom Rom for the Xperia XZs に下記のAndroid11を試した、という話が書かれていた。
Pixel Experience Plus and non-Plus
Corvus OS
Havoc OS
開発者向け資料のGeneric System Imageを確認すると、/system/etc/ld.config.数字.txt 内の[vendor]セクションで「namespace.default.isolated=true」となっていれば、いいらしい。
Vendor Native Development Kit(VNDK)のバージョンは 下記の様に26~29 で定義されていた。
1 | keyaki:/ $ ls -l /system/etc/ld* |
2 | -rw-r--r-- 1 root root 34755 2020-08-06 05:16 /system/etc/ld.config.26.txt |
3 | -rw-r--r-- 1 root root 39324 2020-08-06 05:16 /system/etc/ld.config.27.txt |
4 | -rw-r--r-- 1 root root 39844 2020-08-06 05:16 /system/etc/ld.config.28.txt |
5 | -rw-r--r-- 1 root root 40252 2020-08-06 05:16 /system/etc/ld.config.29.txt |
6 | -rw-r--r-- 1 root root 27897 2020-08-06 05:16 /system/etc/ld.config.vndk_lite.txt |
一番新しい 29 というのはAndroid 10ということらしい。このため、少なくともAndroid 10のGSIは使える、ということになる。
それ以降のバージョンを使えるかを /system/etc/ld.config.29.txt の該当部分を確認すると下記のようになっていた。
3 | additional.namespaces = runtime,system,vndk |
5 | ############################################################################### |
8 | # This is the default linker namespace for a vendor process (a process started |
9 | # from /vendor/bin/*). The main executable and the libs under /vendor/lib[64] |
10 | # are loaded directly into this namespace. However, other libs under the system |
11 | # partition (VNDK and LLNDK libraries) are not loaded here but from the |
12 | # separate namespace 'system'. The delegation to the system namespace is done |
13 | # via the 'namespace.default.link.system.shared_libs' property below. |
15 | # '#VNDK27#' TAG is only for building ld.config.27.txt for backward |
16 | # compatibility. (TODO:b/123390078) Move them to a separate file. |
17 | ############################################################################### |
18 | namespace.default.isolated = true |
19 | namespace.default.visible = true |
namespace.default.isolated = true となっているので、使えてもおかしくはないはず、ということになりそうだ。
次に、こちらでは Phhusson’s AOSP で試したが、動いたとしているGSIは Pixel Experience Plus and non-Plus, Corvus OS, Havoc OSとの差を考察してみる。
Pixel Experience Plus and non-Plus はPhhusson’s AOSPをベースとしているが配布イメージに vndkliteとついているバージョンがある。
Corvus OS にもvndkliteバージョンがある。
Havoc OSにはvndkliteバージョンがない。そして2020/12/30と更新が古い。
違い?と想定されるVNDK Liteについて調べると、開発者向け資料に記載があった。
Android10については今回使用しているvendorイメージがAndroid 10向けに作成したものなのでVNDKイメージが使用できているが、それ以外については、元々はXperia XZsはAndroid 8.xデバイスなのでVNDK Lite構成でないと動かない、ということではないか、という仮説を立てた。
はたして?