KYF35 と 5G NET でインターネットに接続
あるいは Android において APN を機械的に編集する方法
KYF35 に au 5G の SIM を挿入した場合 VoLTE は使えるが、LTE NET と 5G NET で APN が違うためデータ通信ができない
かといって設定画面から au-net.ne.jp が含まれる APN を入力しようとしても編集を完了できない
https://gyazo.com/14cdd0834011efa0c6ad8250d16b7bb3
たぶんテザリングオプションなどのしがらみがこうさせてるんだろうけど、つらい
無理やり編集できないか、試行錯誤してみる
adb shell settings で設定を編集するのを見たことがあるので、そこから調べた
/data/com.android.providers.settings/databases/settings.db (SQLite) を操作する CLI
/data/<app>/ 配下はアプリ用に確保されていてそのままでは閲覧を含めた操作ができないので、迂回している
ただ settings.db にはそもそも入っていないっぽかった
弄っているのを見たことがある tether_dun_required で検索
master なのは適宜読み変えて
でも settings.db にはどうもテザリング向けの APN しかない、別のパッケージが管轄していそう
設定にないならどうにかして /data を見てどこにあるかを確認したい
run-as で覗く
調べたところ run-as コマンドを adb shell で使えば、アプリケーションになりすませるらしい
パッケージIDは pm list packages で見れるので、それで android. から始まるもので確認する
本丸は pm list packages | grep com.android で見て勘で com.android.providers.telephony だと仮定
ただ run-as が全然効かなくて見れなかった
adb で覗く
よく考えたら adb backup というものがあった
iOS でも、iPod touch でバッテリー残量のパーセンテージ表示を設定から操作できなかった時代にバックアップを無理矢理編集して出すという例があったりする
とりあえず adb backup -all で全部抜き出して、中身を改めた
.ab ファイルを開く
落として、従ってやるだけ
$ java -jar android-backup-tookit/android-backup-processor/executable/abp.jar unpack backup.ab backup.tar
適当にバックアップを漁ったところ apps/com.android.providers.telephony/db/telephony.db に目的のデータっぽいものがあった
APN 設定画面で何度か編集しながら adb backup と adb restore を繰り返すことで、データが設定画面の内容と連動していることを確認した
編集・書き戻しトライアル
android-backup-extractor には書き戻すための pack 機能がある
KYF35 は Android 5.1 なので、pack-kk を使う必要がある
流れ: adb backup → abp.jar unpack → tar を展開 → 編集 → tar を作成 → abp.jar pack-kk で変更 → adb restore
なお、カラム数が異様にあるしその意味を考えるのも面倒なので、設定画面で雛形を作成してから update することをおすすめする
適当に次のような SQL を書いてデータを入れたが、表示されなかった
code:failed.sql
insert into carriers(name,numeric,mcc,mnc,apn,user,password,authtype,type,protocol,roaming_protocol,carrier_enabled,connect_service) values (
"au 5G",44051,440,51,
"uad5gn.au-net.ne.jp","au@uad5gn.au-net.ne.jp","au",
2,"dun",
"IPV4V6","IP",
1,1
);
書き込まれていないってことはなく adb backup をしたらたしかにデータは増えていた。原因探求が面倒なので作ってから update することで対処した
更新は次のような SQL で行った
code:update.sql
update carriers set apn="uad5gn.au-net.ne.jp",user="au@uad5gn.au-net.ne.jp",password="au" where _id=97;
adb restore の失敗について
「復元に成功しました」 → 即 au ロゴが出たときは NG
もし失敗しているかわからないときは adb backup をしてファイルをチェックしてみるといい
tar の作成手順はツールの README に従わないと失敗することになる
Incompatible tar archives lead to errors or even system crashes.
ちゃんと README にも書かれてるのだけど、気づかずに一度諦めかけた
あくまで abp.jar は tar をうまいこと結合してくれるだけなので、tar の作り方に失敗しているとダメ
誰も明確なエラーを出してくれない
例として tar -cf で適当にディレクトリを突っ込むのは NG
なお、次のことは失敗に関係なかった (失敗時にREADMEを読み直すまでに検証したこと)
tar 内のファイルオーナー設定
tar -tvf で見てみると違いがあると思う
SQLite3 の -journal ファイルの有無
adb backup した ab と abp pack した ab のヘッダで 3 と 2 という違いがあること
https://gyazo.com/8510ca9611e46c2708ec9a3a821993e6
数十分トラシューしていて abp が悪いのでは疑ったが backup.ab から展開した tar を pack したら adb restore できたので冷静になれた otofune.icon
コマンド列は次の通り
code:modify.sh
alias abp=java -jar android-backup-tookit/android-backup-processor/executable/abp.jar
adb backup com.android.providers.telephony
abp unpack backup.ab backup.tar
tar -xf backup.tar
tar tf backup.tar | grep -v "telephony.db-journal" > packages.list # SQLite3 を編集したら通常は journal が消える
sqlite3 apps/com.android.providers.telephony/db/telephony.db
tar -cf ./modified.tar -T package.list
abp pack modified.tar modified.ab
adb restore modified.ab
できた
https://gyazo.com/8e35397ce81857696f9f8c47be0f413b
たしかに$ ^{\mathrm{4G}}になっている
これまでずっとデータ通信を繋いでこなかったので、アップデートが降ってきた
感動した
ほかにもメール、my au などは使えそうだったので、問題なく使えると思う