以前のdalvik-cacheからコピーする方法では上手く行かなかったので、
dexopt-wrapper でjarからodexファイルを作成する方法をメモしておきます。
dexopt-wrapperはXDAよりどうぞ http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36
※ミラーしておきます⇒dexopt-wrapper.zip
dexopt-wrapperを事前に、スマートフォン上の実行可能な場所に置いて、
実行可能権限755をつけます。(例は、/data/local/tmp )
以下は、wimax.odexをbaksmali/smaliで編集して作成したclasses.dex を
くっつけた wimax.jar での dexopt-wrapperサンプルです。
・ファイル例 $ cd /data/local/tmp $ ls -l -rwxr-xr-x shell shell 5512 2009-05-30 23:15 dexopt-wrapper -rw-rw-rw- shell shell 620271 2012-10-05 17:18 wimax.jar ・dexopt-wrapperの実行 $ ./dexopt-wrapper wimax.jar wimax.odex --- BEGIN 'wimax.jar' (bootstrap=0) --- --- waiting for verify+opt, pid=3787 --- would reduce privs here --- END 'wimax.jar' (success) --- →これでwimax.odex が作成されます。 ・署名の追加 (オリジナルのwimax.odexからddでデータの上書きをします) $ busybox dd if=/system/framework/wimax.odex-orig of=wimax.odex bs=1 count=20 skip=52 seek=52 conv=notrunc 20+0 records in 20+0 records out 20 bytes (20B) copied, 0.008088 seconds, 2.4KB/s ・署名したwimax.odexで、wimax.odexを置き換える(元のwimax.odexはバックアップが必要) $ su -c busybox cp wimax.odex /system/framework/wimax.odex ・結果 $ busybox ls -l /system/framework/wimax.o* -rw-r--r-- 1 0 0 633048 Oct 5 08:20 /system/framework/wimax.odex ★ -rw-r--r-- 1 0 0 709528 Oct 5 07:56 /system/framework/wimax.odex-orig
■まとめ
/system/framework配下の.jarの本体(odex)ファイルは、
deodex化するのは無理なようなので、以下の手順で編集
する事になります。
1.xxx.jar と対になる dexファイルを baksmali.jar でsmali化
2.必要な編集後、smali.jarで classes.dex 化
3.xxx.jar に対して、7za a xxx.jar classes.dexで統合
~ 今回の記事はここから下の部分 ~
4.xxx.jar を端末上で、dexopt-wrapper を使ってodex 抽出。
5.オリジナルのodexファイルを使って、dd で 署名部分を上書き。
6.出来たodexファイルを、オリジナルに上書き。