僕の趣味の一つに、秋葉原散策がある。昔のように「自作すれば安い!」とか「アウトレット品がたくさん!」なんて時代は終わってるので、ある意味「救いようのある、自己動作確認ができそうなジャンク品」を目的に散策しているようなものだ。
もともと、中学生の頃からカスタムROMを焼いたり (一度Xperia VLをboot領域ごと焼いて購入30分で文鎮にしたなぁ…苦笑)、Vista世代のパソコンを買ってDebian突っ込んで遊んだり、ハードウェアのニコイチやソフトウェアのドライバで継ぎ接ぎしたりして遊んでいた人間なもので、この趣味も10年ぐらい続いているものだ。
そんなこんなで情報収集を行なってから行く訳だが、Twitterでこんなものが流れてきた。
なんと変なものがたくさん!という感想を抱いたものである。そういえば、昔からの知り合い (VRChatでも今は仲が良いね) が、同じイオシスさんが少し前に出していたEGBOKの時に買って、弄り方の記事を出していた事を思い出した。
って事で、なんだか遊べそうだぁと思い、就活で溜まったストレスをゴニョる事で解消する事としたのである。
かなり変なデフォルトのAndroid
起動画面はLIL COLLECTIONさんのロゴが出てくる。まぁきっと前回のEGBOKと同じで、業者からまとめて売っぱらわれたものを売ってるとかだろうか。
OSもOSで、「ようこそ」の初期設定の画面がスキップされて、セットアップの通った状態で全てが始まる、明らかに変な仕様である。
標準搭載アプリも最小限だ。今時標準ブラウザを見るとは思わなかった。Searchも然りである。
多くの人がGoogle Play周りのファイルをapkを使った導入で試したようだけど、そもそも立ち上がらないって感じらしい。実際自分もそうだった。
ふつーに使うと、apkによるサイドローディング頼りか、よくてAmazon App Storeを用いた、劣化版Fireタブレットにしかならない。WidevineもL3なのである。メモリガチャがあったり、GMSが走ったり、モバイル回線モデム付きだったりしただけマシだったEGBOKより難しい子だな、これ。
「adb shell pm list packeages」を実行したときのアプリリストは下のアコーディオン見出しに格納してある。まぁ見ての通り、Google関連のパッケージはIME周りを除いて皆無というほかない。そりゃ動かんわ…
package:com.android.fmradio
package:com.android.cts.priv.ctsshim
package:com.android.internal.display.cutout.emulation.corner
package:com.android.internal.display.cutout.emulation.double
package:com.android.providers.telephony
package:com.android.dynsystem
package:com.android.theme.icon.pebble
package:com.mediatek.camera
package:com.android.providers.calendar
package:com.android.providers.media
package:com.android.networkstack.tethering.overlay
package:com.android.internal.systemui.navbar.gestural_wide_back
package:com.mediatek.location.lppe.main
package:com.android.wallpapercropper
package:com.android.theme.icon.vessel
package:com.android.theme.color.cinnamon
package:com.mediatek.SettingsProviderResOverlay
package:com.android.protips
package:com.android.theme.icon_pack.rounded.systemui
package:com.android.networkstack.tethering.inprocess.overlay
package:com.android.theme.icon.taperedrect
package:com.android.wifi.resources.overlay
package:com.android.documentsui
package:com.android.externalstorage
package:com.mediatek.simprocessor
package:com.android.htmlviewer
package:com.alphainventor.filemanager
package:com.android.companiondevicemanager
package:com.android.quicksearchbox
package:com.android.mms.service
package:com.android.providers.downloads
package:com.android.networkstack.inprocess
package:com.google.android.networkstack.tethering.overlay
package:com.android.theme.icon_pack.rounded.android
package:com.android.networkstack.inprocess.overlay
package:com.android.browser
package:com.android.theme.icon_pack.circular.themepicker
package:com.android.soundrecorder
package:com.android.providers.downloads.ui
package:com.android.pacprocessor
package:com.android.simappdialog
package:com.android.internal.display.cutout.emulation.hole
package:com.android.internal.display.cutout.emulation.tall
package:com.android.networkstack.overlay
package:com.android.modulemetadata
package:com.android.certinstaller
package:com.android.theme.color.black
package:com.android.carrierconfig
package:com.android.theme.color.green
package:com.android.theme.color.ocean
package:com.android.theme.color.space
package:com.android.internal.systemui.navbar.threebutton
package:android
package:com.android.contacts
package:com.android.theme.icon_pack.rounded.launcher
package:com.android.egg
package:com.android.mtp
package:com.android.nfc
package:com.android.ons
package:com.android.launcher3
package:com.android.backupconfirm
package:com.android.provision
package:com.android.statementservice
package:com.android.settings.intelligence
package:com.android.calendar
package:com.mediatek.frameworkresoverlay
package:com.android.internal.systemui.navbar.gestural_extra_wide_back
package:com.bnd.update
package:com.android.providers.settings
package:com.android.sharedstoragebackup
package:com.android.printspooler
package:com.android.theme.icon_pack.filled.settings
package:com.android.dreams.basic
package:com.android.webview
package:com.android.inputdevices
package:com.android.bips
package:com.mediatek
package:com.android.theme.icon_pack.circular.settings
package:com.mediatek.duraspeed
package:com.android.musicfx
package:bnd.com
package:com.android.cellbroadcastreceiver
package:com.android.theme.icon.teardrop
package:android.ext.shared
package:com.android.onetimeinitializer
package:com.android.server.telecom
package:com.android.cellbroadcastservice
package:com.android.theme.icon_pack.rounded.themepicker
package:com.android.keychain
package:com.android.printservice.recommendation
package:com.android.gallery3d
package:com.android.theme.icon_pack.filled.systemui
package:android.ext.services
package:com.android.wifi.resources
package:com.android.calllogbackup
package:com.android.localtransport
package:com.android.packageinstaller
package:com.android.theme.font.notoserifsource
package:com.android.theme.icon_pack.filled.android
package:com.android.proxyhandler
package:com.android.internal.display.cutout.emulation.waterfall
package:com.android.theme.icon_pack.circular.systemui
package:org.videolan.vlc
package:com.android.managedprovisioning
package:com.android.soundpicker
package:com.mediatek.capctrl.service
package:com.mediatek.callrecorder
package:com.android.wallpaper.livepicker
package:com.android.theme.icon.squircle
package:com.android.storagemanager
package:com.android.bookmarkprovider
package:com.android.settings
package:com.google.android.networkstack.overlay
package:com.android.theme.icon_pack.filled.launcher
package:com.android.networkstack.tethering.inprocess
package:com.android.networkstack.permissionconfig
package:com.mediatek.lbs.em2.ui
package:com.android.cts.ctsshim
package:com.android.theme.icon_pack.circular.launcher
package:com.android.vpndialogs
package:com.android.email
package:com.android.music
package:com.android.phone
package:com.android.se.go
package:com.android.shell
package:com.android.theme.icon_pack.filled.themepicker
package:com.android.wallpaperbackup
package:com.android.providers.blockednumber
package:com.android.providers.userdictionary
package:com.android.providers.media.module
package:com.android.emergency
package:com.android.hotspot2.osulogin
package:com.android.internal.systemui.navbar.gestural
package:com.android.location.fused
package:com.android.theme.color.orchid
package:com.android.deskclock
package:com.android.systemui
package:com.android.theme.color.purple
package:com.android.bluetoothmidiservice
package:com.android.permissioncontroller
package:com.android.traceur
package:com.cpuid.cpu_z
package:android.auto_generated_rro_product__
package:com.android.bluetooth
package:com.android.wallpaperpicker
package:com.android.providers.contacts
package:com.android.captiveportallogin
package:com.android.theme.icon.roundedrect
package:com.android.internal.systemui.navbar.gestural_narrow_back
package:com.android.theme.icon_pack.rounded.settings
package:com.mediatek.dataprotection
package:com.google.android.inputmethod.latin
package:android.auto_generated_rro_vendor__
package:com.android.theme.icon_pack.circular.android
これでは、劣化版Fireタブレットか、本当にキッティングできる業者しか使えそうにない感じであるが、果たして実際そうだろうか。
Bootloader Unlock
まぁこんなに使えない標準ROMを捨てて、さっさとBootloaderのセキュリティを外してしまいましょう。これによってROM焼きの可能性が出てくるものである。
久々すぎて忘れてたけど、最近はfastbootdという別種のFastbootも存在するらしい。こいつだとBootloader Unlockはできない。最近のAndroidは、かなり変わったようだ。なので、古のFastbootを呼び出す。
adb reboot bootloader
fastboot flashing unlock
を入力すれば、見慣れた確認画面が出てくる。音量ボタンの入力でBootloaderを外すか、やっぱりやめるかを確定しよう。
Orange Stateの警告ログが起動時に表示されていれば成功である。言うこともないと思うが、Bootloader Unlockをしたら初期化が走るので、それで見分けるのもアリだろうか。
このOrange Stateの警告はMTK機あるあるらしく、僕は見慣れてるが、TWRPが使えるなら何かを焼くと解決できるとのこと。僕は気にしないし、こいつで動くTWRP探しの旅はする気はないので、ここでおしまいである。そもそもMediaTek機をあれこれする事が稀でOrange Stateのことを知らなかったと言う感じである。
ROM焼き周り (DSUとか、GSI恒久焼きとか)
筆者が中学時代の頃のROM焼き事情と界隈は大分違うようで驚いた。同じ基盤のROMを焼く事はほぼなくなり、OS単体だけを含むGSIなんていう汎用イメージを焼いて、ドライバなどは別に分ける設計になったそうだ。(Project Trebleという仕組みがあるらしい)
また、いちいち焼いてROMの相性チェックを行う事もなく、そんなイメージを一時的にお試しするアプリ、DSU Sideloaderというものが存在する。昔よりROM焼きしやすくなったような気がする。ちなみに非rootなので、adbは有効にしないといけない場面がそこそこあるのが要注意である。
一応筆者が片っ端から試した感じだと、アーキテクチャはARM 32-bit with 64-bit binder (a64とかbinderって書いてある) で、パーティションはAB (A/BとかSystem-as-Rootって言われる) なイメージを引っ張ってくるといい感じになるっぽい。とは言え、ほとんどのカスタムROMは動作の望みが薄い。Mediatek機とGSIは相性がよろしくないらしく、動かないROMが多いのだ。
例えば、僕がRakuten miniに導入してるようなPixel Experience系GSIは全滅だった。全体的な雑感として、AndyYanさんの作ってるLineageOS系GSIは動作する割合が多いので、そちらをおすすめする。昔はCyanogenModとか呼んでたのが懐かしい。
僕もLineage OS 18.1を使って、Boot.imgをぶっこ抜いてきたりした。最新バージョンが動いたし、どうも更新予定はないそうなので、たぶんこれを読んで、同じことをしようとした人も同じように動くはずである。Wi-FiやBT、タッチパネル、リアカメラ周りは動いてるが、インカメラと内蔵スピーカーは動作しなかった。
まぁboot.imgを抜ければ、ぶっちゃけ標準のシステムにもMagisk導入も可能ではある。要はroot化である。とはいえ、あまり遊び甲斐がないので、ひたすらDSU Sideloaderを試す (root化してるとadbコマンドなく使えたりする) とかじゃなければ、正直カスタムROMに焼きかえる事を強く推奨する。あとDSU Sideloaderはストレージが小さいので、ユーザー領域の調節にコツがいるのと、別のGSIイメージを焼くときに、先に試したDSUが容量を食い潰しており、悪さをするので毎回初期化した方がいいと思う。
LineageOS 18.1系だと標準でsuが実行できるそうなので、セキュリティを気にしなければ、それでもいいかもしれない。
ちなみにLineageOS 19.1系は検証時点のバージョンだと設定アプリがコケるので、今後改善されるかもしれないが、後ほど説明する恒久的に焼かない事を推奨する。再起動したら元通り!なDSUならまだしも、一から焼くとADBが有効化できなくなる。
GSIイメージの恒久的なROM焼き
最終的には安定しているLineageOS 18.1系を焼くことにした。Fastbootd (Fastbootだとコケる) で以下を打ち込んであげると焼ける。
fastboot flash system {パス}\lineage-18.1-20220715-UNOFFICIAL-a64_bgS.img
fastboot erase userdata
fastboot erase metadata
僕が使ったのは20220715版のLineageOS 18.1 (通常版Google Playサービス付き) である。標準のシステムのデータが残って悪さをするので、初期化は忘れないようにしよう。電源ボタン操作でリセット走らせても良いと思う。VBmetaを「–disable-verity –disable-verification」するおまじないが無いと今時のROM焼きはコケるとか言ってるブログもあったけど、僕の環境では何もせずにそのまま動作したことも書き記しておく。
そうそう、ROM焼きするってことはGMSを使いたいって事だろうけど、認証は通ってないので要注意だ。そのままだと、Playプロテクトの警告で阻まれてしまう。
これに関してはGSF IDを用いた特例申請を行うことで対処しよう。これだけで、だいぶ実用的なタブレットに近づくことだろう。こんな感じでGMSが使えるようになる。
このような面倒な手間に対する実用性?そんなもの求めちゃいかんよ。
追伸
イオシスさん、今回のタブレットを「けっこう」仕入れてしまったようで、仕入れ担当者が市中引き回しにあうレベルの特大呪物という感じで認識しているらしい。
この記事のおかげで売れて、仕入れ担当者が生き延びれる事を願うのみである。
あと公式ROMイメージのバックアップを忘れたので、自分の場合は元のOSに復旧できないようである。保証はあってないようなものだけど、復旧可能性を薄くするのはアホくさいので、みんなはちゃんと、別ファームを読み込んでいる最中に、この辺を参考にしてバックアップしようね!
コメント
私はこれ遊び用に2台購入しました。
同じく、いろいろカスタムROMを試してみましたが、やはり音が出ません。
音が出ない状態の解決策ってありますでしょうか?
はじめまして
参考になります。
現状、劣化fireとして利用してます。
久々に焼いてみようかなと。
色々と試してみたりしてはいますが、音が出ないのはGSI系あるあるのようなので、おそらく専用ROM (皆無のはずだが) でも出来ない限りは難しいかと…
一応、当方の環境では3.5mmジャックやType-C端子にイヤフォンを刺せば動くので、それしか無さそうです。
android13ではhttps://github.com/naz664/ArrowOS_gsi/releasesが動きました。設定がしっかりと表示されます(僕の環境では)
まったく音が出ない状態は純正ROMから抜いてきたboot.imgをMagiskを介さず、カスタムROM側に焼いた事で3.5mmジャック、Bluetooth接続では音が出るようになり改善されました。
Twitterを拝見して純正ROMから該当ファイルや似た名前のファイルを検索してみましたが、みつかりませんでした。
引き続き調べてみます。