Home > Archives > January 2012

January 2012

Googleの2-step verificationが日本に対応した

  • このエントリーをはてなブックマークに追加

Googleの2-step verificationでバックアップオプションとしてようやく日本の電話番号が使えるようになった。

2-step verificationではパスワードの他にワンタイムパスワードを入力するのだけど、そのワンタイムパスワードを受け取る手段としてGoogle AuthenticatorやSMSが存在した。普段はGoogle Authenticatorで十分なのだが、Google Authenticatorはインストールしているスマートフォンをうっかり初期化とかしてしまった際に、ワンタイムパスワードを生成できなくなって困ってしまうことが何度かあった。

そういったことを防止するために、SMSによるBackupが存在しているのだが、今までは日本の番号は対応していなかった。
それが、ようやく対応したみたい。

Google 2-setp verification supports Japanese number!

ただ、現状Google Calendarなどと同じようにキャリアメールしか対応してない。
スマホが普及して、かつSMSの相互運用がスタートしたので、そろそろSMSでも送ってくれてもいいのではないかと思う。
(ただキャリアメールでなく、電話でコードを受け取ることもできるので運用上は問題はなさそう)

非Deodex環境 [SO-02C] でセルスタンバイ問題を解決する

  • このエントリーをはてなブックマークに追加

AndroidでMVNOなデータSIMを使うと電界強度(アンテナピクト)が表示されなかったり、セルスタンバイで圏外時間が100%になってしまって電池の消費が激しくなるという問題があったのだけど、それを解決する方法をブローヴちゃん: Android + b-mobile データ専用 SIM で電界強度を表示するで発見したので、試してみました。

上記のページだとdeodexされた環境で逆アセンブルして変更という手法がとられていたけど、手元にあるXperia Acroは非deodex環境だったので、deodex化せずに変更したみたので書いてみた。

注意: rooted環境じゃないとそもそもこのHackは適用できません。いつものことですが、失敗したら確実に文鎮化します。

用意するもの

手順

  1. 実機から/system/frameworkを抜いてきます。
    $ adb pull /system/framework framework
  2. framework.odexframework.jarを作業ディレクトリにコピーします
    $ mkdir workspace
    $ cp framework/framework.odex workspace/
    $ cp framework/framework.jar workspace/
  3. framework.odexを逆アセンブルします
    $ baksmali --api-level 10 -d ../framework -c:core-junit.odex -x framework.odex
    -c:オプションには逆アセンブルに必要なクラスを適宜追加します。Xperia acro(SO-02C)ではオプションを指定しなかった場合、
    $ baksmali --api-level 10 -d ../framework -x framework.odex 
    Error occured while loading boot class path files. Aborting.
    org.jf.dexlib.Code.Analysis.ClassPath$ClassNotFoundException: Could not find superclass Ljunit/framework/TestCase;
    	at org.jf.dexlib.Code.Analysis.ClassPath$ClassDef.loadSuperclass(ClassPath.java:830)
    	at org.jf.dexlib.Code.Analysis.ClassPath$ClassDef.(ClassPath.java:683)
    	at org.jf.dexlib.Code.Analysis.ClassPath.loadClassDef(ClassPath.java:280)
    	at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:163)
    	at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
    	at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
    	at org.jf.baksmali.main.main(main.java:293)
    Error while loading class Landroid/test/AndroidTestCase; from file framework.odex
    Error while loading ClassPath class Landroid/test/AndroidTestCase;
    こんな感じのエラーが出ました。(この場合AndroidTestCaseが足りないのでcore-junit.odexを追加します。)
  4. アンテナピクトの扱いを変更する
    逆コンパイルしたクラスファイルを編集します。基本的にはブローヴちゃんさんの手順通りですが、展開したoutフォルダにあるcom/android/internal/telephony/gsm/GsmServiceStateTracker.smaliを編集します。
    Xperia Acroでは以下のように変更するとうまくいきました。
    :pswitch_data_22
    .packed-switch 0x0
        :pswitch_20
        :pswitch_1f
        :pswitch_1f
        :pswitch_1f
        :pswitch_20
        :pswitch_1f
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_20
        :pswitch_5
        :pswitch_1f
        :pswitch_1f
        :pswitch_20
    .end packed-switch

    ちなみに変更後と変更前でパッチを作りました。
    http://nunnun.jp/src/so-02c/GsmServiceStateTracker.smali.patch
    パッチとGsmServiceStateTracker.smaliを同一ディレクトリにおいた状態で、

    $ patch GsmServiceStateTracker.smali < GsmServiceStateTracker.smali.patch
    で適用できます。
  5. 編集したframework.odexをアセンブルします
    先ほど逆アセンブルを実行した作業ディレクトリに戻って、smaliを実行します。
    $ smali -o classes.dex out
    うまくいくとclasses.dexが作成されているはずです
  6. framework.jarを展開します
    jarファイルはzipファイルなので展開します
    $ unzip framework.jar -d framework_jar
    Archive:  framework.jar
       creating: framework_jar/META-INF/
      inflating: framework_jar/META-INF/MANIFEST.MF  
      inflating: framework_jar/preloaded-classes
  7. classes.dexを追加します
    先ほどframework.jarを展開したディレクトリにコピーします。
    $ cp classes.dex framework_jar/
    $ ls -l framework_jar/
    total 14336
    drwxr-xr-x  3 hiro  staff      102 10 10 01:44 META-INF
    -rw-r--r--  1 hiro  staff  7269368  1 12 21:40 classes.dex
    -rw-r--r--@ 1 hiro  staff    65580 10 10 01:19 preloaded-classes
  8. framework.jarを再度生成します
    先ほどの逆でzipで固めます。
    $ zip ../framework.jar.new META-INF preloaded-classes classes.dex 
      adding: META-INF/ (stored 0%)
      adding: preloaded-classes (deflated 82%)
      adding: classes.dex (deflated 56%)
    これでPC側での作業はおわり。
  9. 実機に必要なファイルをコピーします
    どこでもいいのですが、/data/local/tmpとかに新しく生成したframework.jar.newとダウンロードしたdexopt-wrapperを転送して、dexopt-wrapperを実行可能にします。
    $ adb push framework.jar.new /data/local/tmp/framework.jar.new
    2047 KB/s (3185980 bytes in 1.519s)
    $ adb push dexopt-wrapper /data/local/tmp/
    609 KB/s (5512 bytes in 0.008s)
    $ adb shell chmod 755 /data/local/tmp/dexopt-wrapper
  10. dexopt-wrapperを使ってjarをodexに変換する
    $ adb shell
    $ cd /data/local/tmp
    $ ls
    dexopt-wrapper
    framework.jar.new
    $ ./dexopt-wrapper framework.jar.new framework.odex
    --- BEGIN 'framework.jar.new' (bootstrap=0) ---
    --- waiting for verify+opt, pid=7612
    --- would reduce privs here
    --- END 'framework.jar.new' (success) ---
    $
  11. 署名をコピーする
    このままだと動かないのでオリジナルのframework.odexから署名部分だけコピーしてきます。
    $ adb shell
    $ cd /data/local/tmp
    $ busybox dd if=/system/framework/framework.odex of=framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
    20+0 records in
    20+0 records out
    20 bytes (20B) copied, 0.004334 seconds, 4.5KB/s
    $ ls -l
    -rw-r--r-- shell    shell     7384328 2012-01-12 21:53 framework.odex
    -rwxr-xr-x shell    shell        5512 2009-05-30 23:15 dexopt-wrapper
    -rw-rw-rw- shell    shell     3185980 2012-01-12 21:42 framework.jar.new
    注意 必ずbusyboxddを使ってください。間違えると、conv option disabledというエラーが返ります。
  12. framework.odexを置き換える
    これはrecoveryとかで実施した方が安全です。
    /systemをrwで再マウントして、
    # cp /data/local/tmp/framework.odex /system/framework/framework.odex.new
    # mv /system/framework/framework.odex /system/framework/framework.odex.bak
    # mv /system/framework/framework.odex.new /system/framework/framework.odex
    # sync
    とかします。

やると意外と面倒でした。
いちおう元のframework.odexとパッチを当てて署名したframework.odexの差分を取ったパッチを作りました。

  • framework.odex.patch
    元のframework.odex MD5 (framework.odex) = 7b474a8d99ab92d4286d422cd6e1d511
    パッチ適用後: MD5 (framework_new.odex) = e3ea45b180e9e71bf39d665e4ca8b1ac
    こんな感じで適用できるはずです。
    $ bspatch framework.odex.bak framework.odex.new framework.odex.patch

間違っているところとかあったら指摘よろしくお願いします。

Kindle Fireでの日本語入力 [続] / Japanese Input on Kindle Fire

  • このエントリーをはてなブックマークに追加

前回settings.dbを弄ることで日本語入力を可能にする方法を書いたが、実はもっと簡単な方法があったので備忘録的に書きたいのと、英語で教えて欲しいとリクエストがあったので、英語でも簡単にまとめてみます。

Here is the instructions that enables Japanese input method on Amazon Kindle Fire.

準備 / Before hack

rootを取ります。rootの取り方はいくらでもググれば出てくるので割愛します。過去の記事を参考にしていただいてもかまいませんが、情報が古い可能性は十分にあります。

Make sure you can access your kindle as root privileges, if not you can find a way to get root access to your kindle fire. After getting root privileges, install Android Market App into your kindle fire. You can also find a way to install Android Market on the internet.

IMEのインストール / Installing Japanese Input Method

Android Marketで好きなIMEをインストールします。ATOKなりGoogle日本語入力なりSimejiなりインストールしてください。

Install Japanese Input Method from Android Market. For example, you can install ATOK, Google Japanese Input (Google日本語入力) and Simeji. ATOK is a paid application but others are free.

IMEを有効化する / Enabling IME

ここまでは前回と同じです。前回はここでsettings.dbを弄りましたがハードルが高いので、"ime"というコマンドをadb shellでたたくことで同じことが可能ですので試してみます。

Let's enable Japanese Input Method on your kindle fire. As previrous artcle, I introduced a way to enable Japanese input method by changing settings.db however that way is bit difficult so that this time we're using another method using "ime" command on adb shell.

hiro$ adb shell
$ su
# ime list -s
com.android.inputmethod.latin/.LatinIME
com.justsystems.atokmobile.service/.AtokInputMethodService

adb shellにてKindle Fireにアクセスした後、suコマンドにてroot権限に昇格します。昇格後、ime listと打つとインストールされているIMEが一覧になって出力されます。

その後 ime enable と ime set を利用してIMEを有効化します。

After logged in your kindle fire using adb shell from your console, type "su" to access as root. Then you could see installed IME(Input Method Editor) using "ime list" command.

Finally you can enable and select IME using "ime enable" and "ime set" command.

# ime enable com.justsystems.atokmobile.service/.AtokInputMethodService
Input method com.justsystems.atokmobile.service/.AtokInputMethodService: already enabled
# ime set com.justsystems.atokmobile.service/.AtokInputMethodService
Input method com.justsystems.atokmobile.service/.AtokInputMethodService selected

何か不足している点などありましたら、指摘していただけると助かります。

More...

Home > Archives > January 2012

Search
Feeds
Google Latitude
Tag Cloud
IPv6 Meter

Page Top