2013年9月4日

androidカテゴリを作る

去年からメインの電話とデータ端末をAndroidに変えてから、その面白さにかなりはまって多くの時間と労力を注ぎ込んだ。

去年の7月から12月の間にL-04C→P-01D→F-03D→So-05Dと渡り歩いていじくり倒し、うち1台をブート領域の書き換えに失敗して文鎮化させ、結局現在はSO-05Dに落ち着いたけど、昨日ブログに書くまでこのAndroidに関するエントリもカテゴリも無かったのに気付いた。

四機種渡り歩いてきて現在はSO-05Dをつかっているけど、過去の機種も忘れ去られた訳じゃなくちゃんと使ってるぞ。

L-04C→初androidで弄くりまくる、Android改造を幅広く学ぶ。現在はコンソール端末 or キーボードとして利用中。

P-01D→普通の改造に加えて、frameworkをデコンパイルして手を入れることを覚える。自力S○Mロック解除成功 現在はIP電話の子機 として利用。

F-03D→富士通のスマートフォンがボロクソにいわれている理由を学ぶ、ガラケーアプリの別端末への移植方法を学ぶ。現在はテレビとして利用。

ってみんなスマートフォントして使ってないやんー

  

2013年9月3日

Xperia SX SO-05D、マジで文鎮5ループ前

去年の12月からxpreia sx SO-05Dを使っていて、初期状態ではandroid 4.0だったものが、この7月に4.1 jelly beansへのアップデートが公開されていた。

しかし私はiijmioで運用しているので、root化、テザリング制限解除、cwm recovery導入、mod化、セルスタンバイ対策などなどと手を入れて使っており、しばらくはアップデート後にこれと同じ状態にする手法が確立されていないからそのままにしてあったのだが、最近rootを取るセキュリティーホールが発見されたので、意を決してアップデートした。

アップデートとroot化までは上手くいったものの、テザリング制限を解除した後にadb接続からの再起動でadb接続が出来なくなり、電源を切った後に起動すると再起動ループになってしまった。

メインで使っている端末でオサイフやらなんやらが入っているのでめっちゃ焦ったのだが、最終的にはFlashtoolでファームウェアを焼きなおしてムリヤリ復活させた。

結局、原因はテザリングの設定が入っている/data/data/com.android.providers.settings/databases/settings.dbのジャーナルファイルのパーミッションの不備であった様だ。

デフォルトは

-rw-rw---- system   system      57344 2013-09-02 09:22 settings.db
-rw------- system   system      21032 2013-09-02 09:22 settings.db-journal

と、settings.dbが660、settings.db-journalが600だが、settings.db更新後に、settings.dbとsettings.db-journalをまとめて666にしたのがまずかったらしい。

正解はsettings.dbのパーミッションのみ666で、勢いあまってsettings.db-journalまで666にすると「マジで文鎮5ループ前」になる。良い子のroot簒奪者は注意だぞ!

ちなみにsettings.dbのパーミッションは再起動後にandroidの中の人によって660に戻されるので安心だ!

とりあえず、スモールアプリはデフォルトで入っているのでmod化せず、root化、テザリング制限解除、cwm recovery導入、セルスタンバイ対策と問題なく動作している。

----------

一応問題になったテザリング制限解除の方法を書いておく。

sqlite3コマンドはTitaniumuBackupをインストールすれば、/data/data/com.keramidas.TitaniumBackup/files/sqlite3 /system/bin/sqlite3に入るので、これを/system/binあたりにコピーして

mount -o rw,remount /system と言う感じで/systemをrwでリマウント後に

sqlite3 /data/data/com.android.providers.settings/databases/settings.db などと開き、

  sqlite> select * from secure where name="tether_dun_required";

49|tether_dun_required|1

sqlite> update secure set value=0 where name="tether_dun_required";

sqlite> select * from secure where name="tether_dun_required";

49|tether_dun_required|0

 

sqlite> select * from secure where name="tether_dun_apn";

50|tether_dun_apn|docomo tethering,dcmtrg.ne.jp,,,,,,,,,440,10,0,*

sqlite>update secure set value="iijmio tethering,iijmio,jp,,,mio@iij,iij,,,,,440,10,3,default,supl" where name="tether_dun_apn"

sqlite> select * from secure where name="tether_dun_apn";

50|tether_dun_apn|iijmio tethering,iijmio,jp,,,mio@iij,iij,,,,,440,10,3,default,supl

tether_dun_apnの変更はtether_dun_requiredが0になってれば必要ないけど一応しておく。