2012年3月11日日曜日

アンドロイドで連絡先の誕生日が表示されない

母親の誕生日が近づいていることを家族に指摘されたが、なぜ気がつかなかったのかと考えるとグーグル連絡先に誕生日を登録しているにもかかわらず常用しているアンドロイドのスケジューラーに表示されなかったからだと気がついた。調べてみると常用しているアプリだけでなく、アンドロイド標準のカレンダーアプリでも表示されていない。標準カレンダーアプリで表示されないスケジュールはその他のカレンダーアプリでも表示されないのは以前の調査でわかっていた。

まず、検索して判ったことは連絡先の「Myコンタクト」のグループに属する人の誕生日しか表示されないということ。グーグルの連絡先は、編集作業をするだけですぐにMyコンタクトに所属させてしまうが、これは誕生日を必ず表示させるためなのだろう。今の自分の連絡先はMyコンタクトに所属している人が0人の状態だったので、グループを直して家族をMyコンタクトに所属させた。

これで表示されるのかと思ったら、パソコンでは誕生日が表示されるが、アンドロイドではまだ表示されない。そこで、さらに検索すると一度標準カレンダーアプリの設定でカレンダーの同期を一度止めて再度同期の設定をすると表示される、ということが判った。

素直にそうすると表示された。バグではないかという指摘があったが確かにそうだろう。標準カレンダーアプリはオンラインモードとオフラインモードを意識させないつくりなのでどこかのタイミングで同期すべきなのに同期しないでよいというフラグが立ってしまうのだろうと推測する。

2012年1月15日日曜日

GsmServiceStateTracker.smali の修正 その2

前回の投稿で \out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali を修正しましたが、その後,、2chのL-04Cに関するスレで4行目と14行目だけでなく、3行目と13行目も同様に修正した、という書き込みを見かけたので自分でもやってみました。


    :pswitch_data_22
    .packed-switch 0x0
        :pswitch_1f
        :pswitch_1e
        :pswitch_1e <----2行目と同じに変更 
        :pswitch_1e <----2行目と同じに変更
        :pswitch_1f
        :pswitch_1e
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_1f
        :pswitch_5
        :pswitch_1e  <----2行目と同じに変更 
        :pswitch_1e  <----2行目と同じに変更
        :pswitch_1f
    .end packed-switch


結果は、・・・4行目と14行目だけを修正したときとの違いが分かりませんでした。モバイルネットワークの種類も「不明」のままでした。

2012年1月14日土曜日

Nexus One でセルスタンバイ問題が解決した!

framework.jarを改造すると日本通信のSIMで使用しているNexus Oneのセルスタンバイによる電池消費が改善するというはなしを2chで見て、早速やってみました。使用ROMはOxygeN1mod-2011.12.10です。

情報源は、http://bl.oov.ch/2012/01/b-mobile-sim.html、実際の手順は次のとおりにしました。

1)アンドロイドのシステムを書き込み可能にして、/system/framework/framework.jarをPCにコピー

2)framework.jarはZIPファイルなのでframework.zipとしてから解凍

3)解凍した中にあるclasses.dexに対し、次のコマンドを発行。java.exeはなぜか既にPCのC:\Windows\System32に入っていた。baksmali-1.3.0.jarは情報源からダウンロード。

java -jar baksmali-1.3.0.jar -a 14 classes.dex

4)classes.dexのあるディレクトリに出来る 
\out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali
の3631行目以降を次のように編集。

    :pswitch_data_22
    .packed-switch 0x0
        :pswitch_1f
        :pswitch_1e
        :pswitch_1f
        :pswitch_1e <----2行目と同じに変更
        :pswitch_1f
        :pswitch_1e
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_1f
        :pswitch_5
        :pswitch_1f
        :pswitch_1e  <----2行目と同じに変更
        :pswitch_1f
    .end packed-switch

5) classes.dexのあるディレクトリで次のコマンドを発行。smali-1.3.0.jar は情報源からダウンロード。

java -jar smali-1.3.0.jar -a 14 -o classes.dex out


6) classes.dexが書き換えられたので、framework.jarを構成していた次のファイルやディレクトリと一緒に再度ZIPファイルとしてまとめframework.jarにする。
・ classes.dex
・ preloaded-classes
・ META-INF

7) 再度 framework.jar を /system/framework/に入れる。パーミッションは特にいじらなくてOK。

8) アンドロイドを再起動。次の写真のとおり圏外時間が100%ではなくなり、電力消費の順位も1位から4位に減り、セルスタンバイによる消費電力は%の数字から判断するに約10分の1になりました。
また、Gの上に↑↓があるアイコンが出現するようになりました。これは、L-04Cの表示と比較すると本来はHに↑↓のアイコンになるべきと思いますが、今回のframework.jarの修正では「モバイルネットワークの種類」が「不明」のままですので、HSDPAと判別できず3Gの意味で「G」となっているものと思います(確認していません)。別な箇所を修正すればこれも正しくなるのでしょう。