最初はやぎLabsを参考にさせてもらおうかと思ったが、再コンパイルの部分が記載ミス(classes.odexではなくclasses.dexかも?)なのかうまくいかず、そのもとになったLifeScape(root化不要法)も参考にさせて頂いた。
【準備】
カレントディレクトリに "7za.exe", "busybox", "dexopt-wrapper", "smali*.jar", "baksmali*.jar"を準備。最後の2つはそれぞれ"smali.jar", "baksmali.jar"に変名し、コピーしておく。まとめたものはここ。
ちなみに /system/xbin には初めから "dd"コマンドも"cp"コマンドも入っており、busybox必要ないかも。また、root化時に "SU_Busybox_Package.zip" をインストールしていれば、当然busyboxも入っている。
Android SDK, Java SE JDK を使えるようにする。(root化の記事参照)
端末をデバッグモードで接続。
Android 4.2.2 のAPI level は17。
【作業】
DOS窓を立ち上げて /system/framework 以下のファイルを temp フォルダに取得。
>mkdir temp
>cd temp
>adb pull /system/framework
逆コンパイル
>java -jar ..\baksmali.jar -x telephony-common.odex
必要箇所の修正
"out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali"の以下の部分を
/////////////////
.line 702
.local v13, voice_capable:Z
if-nez v13, :cond_86
/////////////////
から
/////////////////
.line 702
.local v13, voice_capable:Z
if-eqz v13, :cond_86
/////////////////
に書き換え。
再コンパイル
>java -jar ..\smali.jar --api-level 17 -o classes.dex out
>copy /y /v telephony-common.jar telephony-common.jar.org
>..\7za a -tzip -mx0 telephony-common.jar classes.dex
>cd ..
端末内で odex を作成
>adb push temp\telephony-common.jar /data/local/tmp
>adb push dexopt-wrapper /data/local/tmp
>adb shell chmod 755 /data/local/tmp/dexopt-wrapper
>adb shell rm /data/local/tmp/telephony-common.odex
>adb shell cd /data/local/tmp; ./dexopt-wrapper telephony-common.jar telephony-common.odex
>adb shell rm /data/local/tmp/telephony-common.jar
>adb shell rm /data/local/tmp/dexopt-wrapper
PC側にあるCWMのイメージファイルから起動させる
>adb reboot bootloader
>fastboot boot recovery-clockwork-6.0.3.1-mako.img
odex の入替え
>adb shell mount /data
>adb shell mount /system
>adb push busybox /data/local/tmp
>adb shell chmod 755 /data/local/tmp/busybox
>adb shell /data/local/tmp/busybox dd if=/system/framework/telephony-common.odex of=/data/local/tmp/telephony-common.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
(adb dd if...からでもできるかも。ちなみにここは逆コンパイル‐再コンパイル後のファイルに元の「署名」をうつす処理らしいが、必要ないかも。)
>adb shell cd /data/local/tmp; busybox cp telephony-common.odex /system/framework/telephony-common.odex.new
>adb shell mv /system/framework/telephony-common.odex /system/framework/telephony-common.odex.old
>adb shell mv /system/framework/telephony-common.odex.new /system/framework/telephony-common.odex
>adb shell rm /data/local/tmp/busybox
>adb shell rm -rf /data/dalvik-cache
>adb reboot
>rmdir /s /q temp
うまくいかない場合は /system/framework/telephony-common.odex.old より telephony-common.odex を復帰させればよいはず。
これでnexus4にアンテナピクトが立った。問題はこれでバッテリーの減りが遅くなるかどうかだが。