備忘録。変な色分けになってるが気にしないことにする。
前提条件
- bootloaderアンロック状態(S-ON)
- ファームウェアバージョンがPieであること
- PieバージョンのRUUが手元にあること、実機からSystemやVendor、Boot、vbmeta等をバックアップしてあること
注意事項
- 必ず片方のスロットのみを使用する
- 例えばAB双方にvbmeta.imgを焼いた際、データが誤っているとリカバリーの起動すらできなくなり詰む
- 起動失敗によるフォールバック機能で使用中のスロットが変更されることもあるので、データを送り込む前にスロットの確認を怠らないこと
- S-ONではfastbootでvbmeta.imgは焼けない
- かといって恒久的なS-OFFは多分できないので、TWRPを起動してddコマンドで送り込む(つまりしくじると詰む)
- vbmetaはブート検証を行うので、ここがおかしいとリカバリーのブートが出来ない(上記写真のようにbootloaderに戻ってくる)→S-ON環境ではリカバリーからしかvbmetaの書き換えが行えない→AとBの両方に間違ったものを焼くと詰む
- TWRPの起動やスロット変更はbootloader mode
- system.imgを焼くときだけdownload mode
- ddコマンドを間違えない
dd if=コピー元 of=コピー先 bs=4096
- 送り先を間違えると死ぬぞ
- 本ページを鵜呑みにせず、一次ソースを確認する
- 全て自己責任で実行する
超音波・感圧式ボタンでの基本操作
結構しくじるのでメモ
電源OFFから状態Bootloader Mode(充電器を繋いでいない場合 1)
- 電源ボタンを長押しし、バイブレーションしたら離す
- 即座に音量下ボタンを押し続ける
電源OFFから状態Bootloader Mode(充電器を繋いでいない場合 2)
- 音量下ボタンを長押ししたまま、USBケーブルを接続する
電源OFFから状態Bootloader Mode(既に充電器を繋いでいる場合)
- 電源ボタンを長押しし、電源ランプが消えたら離す(バイブを目安にしてないだけ)
- 即座に音量下ボタンを押し続ける
起動しないROMを焼いてブートループしている場合
警告画面が出るせいでやりづらいのですが、電源ボタン長押しで警告画面を抜けつつ、再度電源ボタンを長押しして強制終了し、即座に音量下ボタンを押すみたいな流れだった気がします。
ちゃんと思い出したら書く……。
前準備
- GSIのダウンロード(今回はViper Experience 11を使用)
- TWRPのダウンロード
- ブート検証無効化済みのvbmetaのダウンロード(vbmeta_2.55.401.1_noverity.zip)(解凍しておく)
- 必要に応じて各種パッチのダウンロード
- bootloader modeで現在使用中パーティションの確認
fastboot getvar current-slot
fastboot --set-active=b(Bスロットに焼く場合)
万が一起動しなくなった場合にもう片方のスロットから起動できるので、バージョンの古い方(2.59.454.1)のパーティションを指定して焼くのを推奨。(2021年5月1日現在2.61.454.1が最新)
インストール
- bootloader modeで起動
- TWRPをブート
fastboot boot twrp.img
- TWRPを焼く
"Advanced"→"Install Recovery Ramdisk"→ダウンロードしておいたtwrp.imgを選択
- vbmeta_2.55.401.1_noverity.imgをddで送り込む
adb push vbmeta_2.55.401.1_noverity.img /sdcard
(Bスロットに焼く場合)dd if=/sdcard/vbmeta_2.55.401.1_noverity.img of=/dev/block/bootdevice/by-name/vbmeta_b bs=4096
- Vendorパッチ、TWRPパッチ、Kernel、Magiskのインストール(任意)
- ブートループの修正(Magiskを焼く場合は不要)
"Advanced"→"Fix Recovery Bootloop"
- download modeで再起動
- システムとユーザーデータの消去
fastboot erase userdata
fastboot erase system
- GSIのインストール
fastboot flash system system.img
- 再起動
GSIのインストールで止まる場合
target reported max download size of 1073600000 bytes Invalid sparse file format at header magi
上記メッセージから進まず戻ってくる場合は、fastbootが古い可能性。
最新のSDK Platform-Toolsをダウンロードする。
SDK Platform-Tools リリースノート | Android デベロッパー | Android Developers
正常時
Invalid sparse file format at header magic Sending sparse 'system' 1/4 (917404 KB) OKAY [ 31.668s] Writing 'system' (bootloader) HOSD CL#1100665 (bootloader) start@1 (bootloader) system_b@100% (bootloader) Update partition OK (bootloader) end@Done OKAY [ 65.382s] ~中略~ Sending sparse 'system' 4/4 (893045 KB) OKAY [ 31.054s] Writing 'system' (bootloader) HOSD CL#1100665 (bootloader) start@1 (bootloader) system_b@100% (bootloader) Update partition OK (bootloader) end@Done OKAY [ 63.713s] Finished. Total time: 395.093s
その他(ViperExperience Beta4)
fingerprint
HTC Exodus 1として指定すると通る。
2099年12月1日
本当は2021年4月5日らしいのだが、見なかったことにする。
Edge Sense
片手モードは無し、エッジスクロールなるものが増える。
HTCカメラ
動画撮影モードで設定を変更すると落ちる模様。ボケモードもファインダーがフリーズする他、HTCカメラ自体が起動しなくなることもあるため安定感はない。HTCカメラとは別にAOSP GSI付属のカメラがある。
写りは多分問題ないと思われる。
HTC Uソニック・ハイレゾイヤホン
動作を確認。アナログイヤホンなのでAOSP GSIなどでは動作しない可能性があるが、ViperExperienceでは動作する。しかし設定項目は無いため、ANCは動作していないと思われる。
バッテリー
5時間のスタンバイで5%程度消費。Y!モバイルのSIMカードを使用しているが、キャリアによって電波状況が異なるので参考程度に。
ディープスリープにはちゃんと入っている様子。
使用中のバッテリー消費については、バッテリーの劣化や燃費の悪さを加味してもこんなものだろうといったところ。
発売当初のときと比べてどうだったか思い出せなかったので、自分で書いたレビュー(HTC速報)を読み直してみたところ、「(バッテリーが持たない)HTCデバイスとしてはこんなもん、正直燃費は悪い」といった感想だったので、やはりこんなもん。
パーティションリスト(Bスロットがメインの場合)
htc_imedugl:/dev/block/platform/soc/1d84000.ufshc/by-name # ls -l total 0 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 abl_a -> /dev/block/sde9 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 abl_b -> /dev/block/sde30 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 aop_a -> /dev/block/sde1 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 aop_b -> /dev/block/sde22 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 apdp -> /dev/block/sde46 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 avb_rec -> /dev/block/sde56 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 bluetooth_a -> /dev/block/sde6 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 bluetooth_b -> /dev/block/sde27 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 board_info -> /dev/block/sdf1 lrwxrwxrwx 1 root root 36 2021-05-01 08:28 boot -> /dev/block/bootdevice/by-name/boot_b lrwxrwxrwx 1 root root 16 1972-10-27 07:23 boot_a -> /dev/block/sde13 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 boot_b -> /dev/block/sde34 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 carrier -> /dev/block/sda16 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 cdt -> /dev/block/sdd2 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib64_a -> /dev/block/sde16 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib64_b -> /dev/block/sde37 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib_a -> /dev/block/sde15 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib_b -> /dev/block/sde36 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 control -> /dev/block/sda13 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cota -> /dev/block/sda17 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 ddr -> /dev/block/sdd3 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devcfg_a -> /dev/block/sde17 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devcfg_b -> /dev/block/sde38 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devinfo -> /dev/block/sde44 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devlog -> /dev/block/sda10 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dip -> /dev/block/sde45 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dpo -> /dev/block/sde48 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dsp_a -> /dev/block/sde10 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dsp_b -> /dev/block/sde31 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dtbo_a -> /dev/block/sde21 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dtbo_b -> /dev/block/sde42 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 extra -> /dev/block/sda12 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 fataldevlog -> /dev/block/sda11 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 frp -> /dev/block/sda14 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 fsc -> /dev/block/sdf4 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 fsg -> /dev/block/sdf3 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 hosd_a -> /dev/block/sde14 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 hosd_b -> /dev/block/sde35 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 hvbmeta -> /dev/block/sda4 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 hyp_a -> /dev/block/sde3 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 hyp_b -> /dev/block/sde24 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 keymaster_a -> /dev/block/sde11 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 keymaster_b -> /dev/block/sde32 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 limits -> /dev/block/sde50 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 local -> /dev/block/sda15 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 lockbooter_a -> /dev/block/sde12 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 lockbooter_b -> /dev/block/sde33 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 logdump -> /dev/block/sde54 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 logfs -> /dev/block/sde52 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 mdtp_a -> /dev/block/sde8 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 mdtp_b -> /dev/block/sde29 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 mdtpsecapp_a -> /dev/block/sde7 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 mdtpsecapp_b -> /dev/block/sde28 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 mfg -> /dev/block/sdf2 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 misc -> /dev/block/sda6 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 modemst1 -> /dev/block/sdf5 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 modemst2 -> /dev/block/sdf6 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 msadp -> /dev/block/sde47 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 nfc_record -> /dev/block/sda18 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 oem_misc -> /dev/block/sda7 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 padding0 -> /dev/block/sda1 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 padding3 -> /dev/block/sdd1 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 persist -> /dev/block/sda3 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 pg1fs -> /dev/block/sda5 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 pmic_a -> /dev/block/sde4 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 pmic_b -> /dev/block/sde25 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 qupfw_a -> /dev/block/sde18 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 qupfw_b -> /dev/block/sde39 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 radio_a -> /dev/block/sde5 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 radio_b -> /dev/block/sde26 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 ramdump -> /dev/block/sda8 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 reserve0 -> /dev/block/sda22 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 reserve4 -> /dev/block/sde57 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 reserve5 -> /dev/block/sdf7 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 sec -> /dev/block/sde43 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 sp1 -> /dev/block/sde49 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 ssd -> /dev/block/sda2 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 sti -> /dev/block/sde53 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 storsec -> /dev/block/sde55 lrwxrwxrwx 1 root root 38 2021-05-01 08:28 system -> /dev/block/bootdevice/by-name/system_b lrwxrwxrwx 1 root root 16 1972-10-27 07:23 system_a -> /dev/block/sda19 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 system_b -> /dev/block/sda20 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 tool_diag -> /dev/block/sda9 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 toolsfv -> /dev/block/sde51 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 tz_a -> /dev/block/sde2 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 tz_b -> /dev/block/sde23 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 userdata -> /dev/block/sda21 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vbmeta_a -> /dev/block/sde20 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vbmeta_b -> /dev/block/sde41 lrwxrwxrwx 1 root root 38 2021-05-01 08:28 vendor -> /dev/block/bootdevice/by-name/vendor_b lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vendor_a -> /dev/block/sde19 lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vendor_b -> /dev/block/sde40 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_a -> /dev/block/sdb1 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_b -> /dev/block/sdc1 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_config_a -> /dev/block/sdb2 lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_config_b -> /dev/block/sdc2
12-04 – ViperExperience Beta 4 | Android 11 | April 2021 Security Patch |GSI | XDA Developers Forums
[GUIDE]*How to install a Generic System Image (GSI) on your HTC U12+ | XDA Developers Forums
2022年現在の状況
ViperExperience Beta 13がリリースされており、2022-06-05のセキュリティパッチが適用されたAndroid 12Lが利用できるようです。(ダウンロードはSourceForgeから)
2022年12月にあった投稿によると、なんと年内にAndroid 13バージョンがリリースされる予定とのこと。AOSPからPixelExperienceにソースコードが変更されるようです。ざっと探してみた感じでは、mikalovtch氏が制作をしているHTC U12+向けのViperExperience以外は、殆ど活動が見られないか終了しているように見受けられます。
長期間使っていないのですが、Android 13になったら引っ張り出してきて動かしてみようかなと思います。こうして備忘録として手順や注意点を残していますが、久しぶり過ぎて操作が怖いな……。ブートループした際の超音波・感圧式センサーボタン操作周りがややこしいので、やり方を思い出せたら後で追記します。
Android 13をテスト
Beta14のAndroid 13がリリースされていたので焼いてみました。ユーザーデータの引き継ぎは出来ないので全消しします。fastboot erase userdataしてから焼きましょう。
指紋センサーが壊れていることや、イヤホン周りがおかしい不具合がありました。純正のDAC無しイヤホンが動くかどうかは未確認ですが、その他のDAC搭載イヤホンでノイズが入るようです。パフォーマンスもちょっともたつく気がするのですが、古いデバイスなのでなんとも言えないところです。Kernel Toolkitなどのアプリで調整すると良いのかもしれません。
エッジ・センスの設定はショートカットアプリなどを介して呼び出せば設定できました。また、背面をダブルタップする「クイックタップ」も動作するのですが、頻繁に誤作動するのでお勧めはしません。
ちょっと怪しいですが、思いのほか動いてくれる感じでした。
2021-05-04:利用状況を追記。
2022-12-13:ROMの開発状況を追記。
2022-12-22:Android 13を試したので追記。