Home > Archives > January 2012
January 2012
Googleの2-step verificationが日本に対応した
- 2012-01-13 (Fri)
- Technology
Googleの2-step verificationでバックアップオプションとしてようやく日本の電話番号が使えるようになった。
2-step verificationではパスワードの他にワンタイムパスワードを入力するのだけど、そのワンタイムパスワードを受け取る手段としてGoogle AuthenticatorやSMSが存在した。普段はGoogle Authenticatorで十分なのだが、Google Authenticatorはインストールしているスマートフォンをうっかり初期化とかしてしまった際に、ワンタイムパスワードを生成できなくなって困ってしまうことが何度かあった。
そういったことを防止するために、SMSによるBackupが存在しているのだが、今までは日本の番号は対応していなかった。
それが、ようやく対応したみたい。
ただ、現状Google Calendarなどと同じようにキャリアメールしか対応してない。
スマホが普及して、かつSMSの相互運用がスタートしたので、そろそろSMSでも送ってくれてもいいのではないかと思う。
(ただキャリアメールでなく、電話でコードを受け取ることもできるので運用上は問題はなさそう)
非Deodex環境 [SO-02C] でセルスタンバイ問題を解決する
- 2012-01-12 (Thu)
- Technology
AndroidでMVNOなデータSIMを使うと電界強度(アンテナピクト)が表示されなかったり、セルスタンバイで圏外時間が100%になってしまって電池の消費が激しくなるという問題があったのだけど、それを解決する方法をブローヴちゃん: Android + b-mobile データ専用 SIM で電界強度を表示するで発見したので、試してみました。
上記のページだとdeodexされた環境で逆アセンブルして変更という手法がとられていたけど、手元にあるXperia Acroは非deodex環境だったので、deodex化せずに変更したみたので書いてみた。
注意: rooted環境じゃないとそもそもこのHackは適用できません。いつものことですが、失敗したら確実に文鎮化します。
用意するもの
- adbとかandroidをいじるときのお約束環境
- JDKとか
- Android SDKとか
- smali / baksmali - http://code.google.com/p/smali/
Android dexのアセンブラ・逆アセンブラ - dexopt-wrapper - http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36
- Android側でbusyboxをインストールしておく
- これは用意することではありませんが、あらかじめrootedにしてCWM recoveryなどでnandroid backupを取っておきましょう
手順
- 実機から
/system/frameworkを抜いてきます。
$ adb pull /system/framework framework
framework.odexとframework.jarを作業ディレクトリにコピーします
$ mkdir workspace $ cp framework/framework.odex workspace/ $ cp framework/framework.jar workspace/
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を追加します。)- アンテナピクトの扱いを変更する
逆コンパイルしたクラスファイルを編集します。基本的にはブローヴちゃんさんの手順通りですが、展開した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 - 編集した
framework.odexをアセンブルします
先ほど逆アセンブルを実行した作業ディレクトリに戻って、smaliを実行します。
うまくいくと$ smali -o classes.dex out
classes.dexが作成されているはずです 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
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
framework.jarを再度生成します
先ほどの逆でzipで固めます。
これでPC側での作業はおわり。$ 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%)
- 実機に必要なファイルをコピーします
どこでもいいのですが、/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
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) --- $
- 署名をコピーする
このままだと動かないのでオリジナルの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
busyboxのddを使ってください。間違えると、conv option disabledというエラーが返ります。 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.odexMD5 (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
- 2012-01-07 (Sat)
- Technology
前回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
何か不足している点などありましたら、指摘していただけると助かります。
