非deodex なICS でセルスタンバイ対策
前回の記事ではアプリのdeodex を実施したが、今回はフレームワーク自体のdeodex を行う。
セルスタンバイがバッテリーを消費する問題を解決するのに有用な手段らしく、
自動化スクリプトを公開している人もいるようだ。
Android + データ専用 SIM での動作修正パッチ
Google 純正イメージはフレームワークがodex 提供のため、スクリプトでは設定できない。
スクリプトの処理を参考に、手動で変更する。
必要なプログラムの準備
以下のプログラムを準備する。
ディレクトリ構造は以下のようにした。
以下は、Android SDK にパスが通っており、ブートローダーロック解除済みで、CWM 起動ができる前提の手順。
フレームワークをdeodex 化する
作業用ディレクトリを作成する
mkdir ~androdev/work/system mkdir ~androdev/work/framework
バックアップからapk, odex をコピーする
tar xf ~androdev/backup/IMM76D_SC-04D/system.ext4.tar system/framework -C ~androdev/work/system/ cp ~androdev/work/system/framework/framework.{odex,apk} ~androdev/work/framework/
フレームワークのodex を展開する
cd ~androdev/work/framework/ java -jar ~/androdev/baksmali-1.3.2.jar -a 15 -d ~/androdev/work/system/framework -c:core-junit.odex -x ~/androdev/work/framework/framework.odex
smali ファイルを書き換える
cd ~androdev/work/framework/out/ --- com/android/internal/telephony/gsm/GsmServiceStateTracker.smali.orig 2012-04-12 19:46:32.000000000 +0900 +++ com/android/internal/telephony/gsm/GsmServiceStateTracker.smali 2012-04-12 16:36:44.000000000 +0900 @@ -3634,7 +3634,7 @@ :pswitch_1c :pswitch_1d :pswitch_1c - :pswitch_1c + :pswitch_1d :pswitch_1c :pswitch_1f :pswitch_5 @@ -3644,7 +3644,7 @@ :pswitch_1c :pswitch_5 :pswitch_1c - :pswitch_1c + :pswitch_1d :pswitch_1c .end packed-switch .end method
framework.jar のdeodex 化
cd ~androdev/work/framework/ java -jar ~/androdev/smali-1.3.2.jar -o classes.dex out zip framework.jar classes.dex
作成したファイルを端末に転送する
端末にbusybox とframework.jar を転送
adb push ~/androdev/work/busybox /data/ adb push ~androdev/work/framework/framework.jar /data/ adb shell mv /system/framework/framework.jar /system/framework/framework.jar.orig adb shell mv /system/framework/framework.odex /system/framework/framework.odex.orig adb shell mv /data/framework.jar /system/framework/framework.jar adb shell chmod 4755 /data/busybox adb shell chmod 0644 /system/framework/framework.jar
キャッシュクリア
"Wipe cache partition" "advanced" → "Wipe Dalvik Cache"
通常起動してdalvik-cache にodex を生成する
adb reboot
framework.odex をリネームしているので、/data/dalvik-cache/system@framework@framework.jar@classes.dex が生成される。
しかし、このodex はフレームワークの署名と異なるため、起動しない。
この状態で暫く放置するとadb によるコマンド操作を受け付ける。
元のframework.odex の署名を書き込む
adb が利用可能になったらCWM を起動する
adb reboot bootloader fastboot boot ~/androdev/recovery-clockwork-5.5.0.2-maguro.img
/system,/data をマウントする
"mounts and storage" → "mount /system" "mount /data"
dalvik-cache のdex ファイルをframework.odex としてコピーする
mv /data/dalvik-cache/system@framework@framework.jar@classes.dex /system/framework/framework.odex
framework.odex に、framework.odex.orig 署名を付ける
/data/busybox dd if=/system/framework/framework.odex.orig of=/system/framework/framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
busybox のdd で操作すること。システムのdd では、conv=notrunc が通らない
apk を元に戻す
署名済みodex が生成できたので、dalvik-cache に出力しないようframework.jar を元に戻す。
mv /system/framework/framework.jar.orig /system/framework/framework.jar
/system,/data をアンマウントする
"mounts and storage" → "unmount /system" "unmount /data"
通常モードで起動を確認する
adb reboot
作ればわかる!Androidプログラミング―10の実践サンプルで学ぶAndroidアプリ開発入門 (Smart Mobile Developer) 金宏 和實 翔泳社 2011-10-15 売り上げランキング : 1609 Amazonで詳しく見る by G-Tools |