« スマートCMの換金申請分、入金されました | トップページ | IS11Sの4.0.1.B.117は当分あてない事にしました »

2012年11月 6日 (火)

SK17iのICSでセルスタンバイ対応パッチ導入(成功)

以前、MK16aでは失敗したXPERIAのICSへアップデート後のセルスタンバイ問題解決パッチを実験用SK17iで再び試して見ました。

やり方はMK16aの時と全く同じ↓
http://tsurezure-narumamani.cocolog-nifty.com/blog/2012/06/mk16a-ics-frame.html
に書いてある通りです。

で、結果。
Sk17i_cellstandby

上手く行きました。
http://tsurezure-narumamani.cocolog-nifty.com/blog/2012/10/sk17iandroid404.html
の時のスクリーンショット時はアンテナは表示されていますが、立ちませんでした。
今回のスクリーンショットは2本立っている事が分かるかと思います。

MK16aとSK17iで何が違うんだろうかなぁ。
あ、前回にプラスして、cacheとDalvik CacheをWipeしていますが、ただMK16aの時もやった覚えあるんですよね。

う~ん、なんでだろう・・・?
まぁとりあえずSK17iのICSでは上手くいったと言うことで。
そのうちMK16aでも再チャレンジするかなぁ。

一応手順を箇条書きにしておきますね。

【事前に用意するもの】
以下のサイトより、
http://code.google.com/p/smali/
baksmali-1.X.X.jar
smali-1.X.X.jar
を取得する(X.Xはその時によってバージョンが違うと思います。私が使ったのは1.3.2でしたが、今は1.4.0が出てますね)。

これらのファイルでodexの逆コンパイル、コンパイルを行います。

以下のサイトより
http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36
dexopt-wrapper.zip
を取得します。

これでコンパイルして出来たファイルからodexへ変換させます(多分)。

7Zipが使える環境。
現在、最新は7-Zip 9.30 alphaですが、まぁこのalpha版はやめておいて、9.20で大丈夫だと思いますよ、私は9.22beta使ってますけど。
コマンドプロンプト上で動作する7za.exeも同梱されていますので使うのはどっちでも良いです。

あとは適当なテキストエディタ。Sakuraでもotbeditでも。

当然ながら端末はrootedであることは言うまでもありません。
またadbが動く環境が必要です(と言うかJAVAが動く環境)。
この辺は、多分事前に構築出来ているはず、きっと。
出来てなかったらググって環境構築して下さい。

あと、端末側にbusyboxを導入しておいて下さい。
ddコマンドを使うのですが、busyboxのddを使うので。

【やり方】
・端末より"/system/framework"以下のファイルを全て取得する(方法はお任せします。adbでpullしても良し、端末上でframeworkディレクトリごとSDカードにコピーしても良し)。
・PCに取得してきたファイル群から"framework.jar"を作業フォルダにコピーします。
 例えば"work"と言うフォルダを作成してそこにコピー
・取得したbaksmali-1.X.X.jarを使って逆コンパイルします。
・コマンドプロンプトにて、baksmali-1.X.X.jarがあるフォルダへ下ります。
 ここで、
 "java -Xmx512m -jar baksmali-1.X.X.jar --api-level 15 -d 端末より取得したframeworkディレクトリを指定 -x framework.odexを指定"
 例.frameworkディレクトリをCドライブ直下のTEMPフォルダにコピーしてある場合でTEMPフォルダにbaksmali-1.X.X.jarが置いてあると仮定。
  カレントディレクトリを"C:\TEMP"に移動してあると仮定。
 "java -Xmx512m -jar baksmali-1.X.X.jar --api-level 15 -d framework -x framework\framework.odex"
・これで逆コンパイルが始まり、完了すると"out"と言うフォルダが出来ます(上の例だとTEMP\out)。
・outフォルダ下に大量のファイルが出来ますが、修正するのは1つだけです。
 "out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali"
・GsmServiceStateTracker.smaliをテキストエディタで開き、"pswitch_data_22"で検索すると2つ目に以下のような記述が出て来ます。

    :pswitch_data_22
    .packed-switch 0x0
        :pswitch_1c
        :pswitch_1d
        :pswitch_1c
        :pswitch_1c
        :pswitch_1c
        :pswitch_1f
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_1c
        :pswitch_5
        :pswitch_1c
        :pswitch_1c
        :pswitch_1c
    .end packed-switch

 これを、
    :pswitch_data_22
    .packed-switch 0x0
        :pswitch_1c
        :pswitch_1d
        :pswitch_1d
        :pswitch_1c
        :pswitch_1c
        :pswitch_1f
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_1c
        :pswitch_5
        :pswitch_1d
        :pswitch_1c
        :pswitch_1c
    .end packed-switch

 に変更、保存します。
・次はコンパイル
 先ほどと同じ条件だと、
 "java -Xmx512m -jar smali.X.X.jar --api-level 15 -o temp\classes.dex out"
・完了すると、"classes.dex"が出来上がっているはず。
 このファイルを最初の方で作成した"work"フォルダへコピー(まぁ別にコピーしなくてもいいんだけど)。
・"work"フォルダにコピーしておいたframework.jarを7zipで開くなりして、今作成したclasses.dexを追加します。
 ※非圧縮の方が良いとか色々あるみたいですが、今回は特に意識せず圧縮して追加してOKでした。
・出来た"framework.jar"とdexopt-wrapper.zipを解凍して出来たdexopt-wrapperを端末にコピーします。
 これも方法は適宜。
 どこへコピーしても良いのですが、作業領域として、"/data/local/tmp"が良く利用されているようなので習ってそこへコピー。
 dexopt-wrapperは端末上で実行するので実行権を付与します。
 chmod 755 dexopt-wrapper(777とかでもいいですよ)
・端末にコピーしたframework.jarをodexに変換します。
 ./dexopt-wrapper framework.jar framework.odex
 ※勿論、/data/local/tmpディレクトリ上で行います。間違っても/system/framework上でやってオリジナルを壊さないよーに。
・続いて、オリジナルのframework.odexから署名部分だけをコピーします。
 busybox dd if=/system/framework/framework.odex of=framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
・あとは、オリジナルのframework.odexと今作成したframework.odexを入れ替えます。
 念のため、オリジナルはバックアップを取ってから入れ替えます。
 アクセス権やオーナー等をオリジナルと比べて違っていれば変更します。

 ※/system上のファイルの入れ替えなので、rwでremountするとかは必須ですよ。

 最後にsync×3回(回数に根拠はありませんが、大昔、Unixが世に出始めた頃はそう言われていたのですよ、おまじないですね)。

・rebootします、が起動しちゃう前にCWMを起動します。
・CWMでchcheとDalvik CacheをWipeします。
 wipe cache partition
 advanced ==> Wipe Dalvik Cache
・最後に"reboot system now"でreboot

起動時にDalvik Cacheの再構築が行われて無事起動すればOKっ!

上手くいったら、/data/local/tmpに置いたファイルは削除しときましょう。

やっぱりMK16aの時はCacheの削除が上手くいってなかったのかなぁ・・・。

|

« スマートCMの換金申請分、入金されました | トップページ | IS11Sの4.0.1.B.117は当分あてない事にしました »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/179854/56055291

この記事へのトラックバック一覧です: SK17iのICSでセルスタンバイ対応パッチ導入(成功):

« スマートCMの換金申請分、入金されました | トップページ | IS11Sの4.0.1.B.117は当分あてない事にしました »