Droid3 に ServersMan SIM LTE 100 を差してあれこれしたメモ。
APN設定
システムファイル編集
/system/etc/apns-conf.xml に設定追加。
<apn carrier="DTI"
mcc="440"
mnc="10"
apn="dream.jp"
user="user@dream.jp"
server="*"
password="dti"
auth="CHAP"
/>
/system/etc/ppp/peers/pppd-ril.options のuser/passwordを変更。
user user@dream.jp
password dti
設定適用
- Settings
- Wireless & networks
- Mobile networks
- Network Mode で GSM/UMTS を選択
- Access point names で New APN を選択
- 設定入力してSave
- Network Mode で Global を選択
これで接続は可能に。
ただし、アンテナピクトは×のままなので以下に続く。
アンテナピクト表示
使用したファイル
- jdk-7u45-windows-i586.exe
- jdk-6u23-windows-i586.exe
- 最初1.7を使っていたけど、途中から smali-1.3.2 のビルドバージョンにあわせて1.6にした。
- smali-2.0b5.jar
- baksmali-2.0b5.jar
- datasim_framework_jar_patcher_20120317.zip
- adb.exe
- smali-1.3.2.jar
- baksmali-1.3.2.jar
試行①
端末からシステムファイルを取得
>adb pull /system/framework system/framework
>adb pull /system/app system/app
逆アセンブル
>java -jar baksmali-1.3.2.jar -d system/framework -x framework.odex
UNEXPECTED TOP-LEVEL EXCEPTION:
org.jf.dexlib.Util.ExceptionWithContext: regCount does not match the number of arguments of the method
at org.jf.dexlib.Util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
at org.jf.dexlib.Code.InstructionIterator.IterateInstructions(InstructionIterator.java:92)
at org.jf.dexlib.CodeItem.readItem(CodeItem.java:154)
at org.jf.dexlib.Item.readFrom(Item.java:76)
at org.jf.dexlib.OffsettedSection.readItems(OffsettedSection.java:48)
at org.jf.dexlib.Section.readFrom(Section.java:143)
at org.jf.dexlib.DexFile.<init>(DexFile.java:431)
at org.jf.baksmali.main.main(main.java:265)
Caused by: java.lang.RuntimeException: regCount does not match the number of arguments of the method
at org.jf.dexlib.Code.Format.Instruction3rc.checkItem(Instruction3rc.java:129)
at org.jf.dexlib.Code.Format.Instruction3rc.<init>(Instruction3rc.java:79)
at org.jf.dexlib.Code.Format.Instruction3rc.<init>(Instruction3rc.java:44)
at org.jf.dexlib.Code.Format.Instruction3rc$Factory.makeInstruction(Instruction3rc.java:145)
at org.jf.dexlib.Code.InstructionIterator.IterateInstructions(InstructionIterator.java:84)
... 6 more
Error occured at code address 0
code_item @0x15ee60
baksmaliのバージョンを上げてリトライ
>java -jar baksmali-2.0b5.jar -d system/framework -x framework.odex
outディレクトリにsmaliファイルが出力される。
パッチ
out/com/android/internal/telephony/gsm/GsmServiceStateTracker.smali を開いて、regCodeToServiceState のswitchを書き換える。
.line 1762
:pswitch_data_24
.packed-switch 0x0
:pswitch_1f # 20->1f
:pswitch_1f
:pswitch_20
:pswitch_20
:pswitch_20
:pswitch_1f
:pswitch_22
:pswitch_5
:pswitch_5
:pswitch_5
:pswitch_1f # 22->1f
:pswitch_5
:pswitch_22
:pswitch_22
:pswitch_22
.end packed-switch
アセンブル
>java -jar smali-2.0b5.jar -o classes.dex out
生成した classes.dex は framework.jar のルートに突っ込む。
odexファイル生成
>adb push dexopt-wrapper /sdcard
>adb push framework.jar /sdcard
>adb shell
$ cd /sdcard
$ su
# mount -o rw,remount /dev/block/system /system
# cp dexopt-wrapper /system/bin
# chmod 755 /system/bin/dexopt-wrapper
# dexopt-wrapper framework.jar new.odex /system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar:/system/framework/com.motorola.android.frameworks.jar:/system/framework/com.motorola.android.widget.jar
--- BEGIN 'framework.jar' (bootstrap=0) ---
--- waiting for verify+opt, pid=4354
--- would reduce privs here
--- END 'framework.jar' --- status=0xff00, process failed
8,796,460byteのファイルは生成されたものの、process failed なので駄目っぽい。
試行②
APIレベルを指定していなかったので逆アセンブルからリトライ。
smaliは1.3.2に戻して、JDKも1.7から1.6にしてみる。
逆アセンブル
>java -jar baksmali-1.3.2.jar -a 10 -d system/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.<init>(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;
core-junit.odex を指定してリトライ。
>java -jar baksmali-1.3.2.jar -a 10 -c :core-junit.odex -d system/framework -x framework.odex
パッチ
①と同様に処置。
アセンブル
>java -jar smali-1.3.2.jar -a 10 -o classes.dex out
odexファイル生成
# dexopt-wrapper framework.jar new.odex /system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar:/system/framework/com.motorola.android.frameworks.jar:/system/framework/com.motorola.android.widget.jar
--- BEGIN 'framework.jar' (bootstrap=0) ---
--- waiting for verify+opt, pid=1677
--- would reduce privs here
--- END 'framework.jar' (success) ---
署名
# dd if=/system/framework/framework.odex of=new.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
conv option disabled
この状態で framework.odex を差し替えたらDroid3が起動しなくなりました。
よく見たら dd がこけてたじゃないですか!やだー!
リカバリ
SafeStrap で起動。
adb経由で framework.odex を元に戻す。
>adb push system/framework/framework.odex /sdcard
>adb shell
$ cd /sdcard
$ su
# cp framework.odex /system/framework/framework.odex
# chmod 644 /system/framework/framework.odex
とりあえず文鎮からは復旧。
試行③
署名
busybox の dd でリトライ。
# busybox dd if=/system/framework/framework.odex of=new.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
20+0 records in
20+0 records out
20 bytes (20B) copied, 0.004944 seconds, 4.0KB/s
# cp new.odex /system/framework/framework.odex
# chmod 644 /system/framework/framework.odex
# sync
# reboot
いけました!
参考
xda-developers - View Single Post - [A] How do I edit services_odex
http://forum.xda-developers.com/showpost.php?p=9369187&postcount=4
ブローヴちゃん Android + b-mobile データ専用 SIM で電界強度を表示する
http://bl.oov.ch/2012/01/b-mobile-sim.html
android_policy_odex 逆アセンブラ(ディスアセンブル)覚書|ちゃぼのブログ
http://ameblo.jp/tanuki0424/entry-10939802481.html
むう゛の framework_odexのカスタマイズ
http://m-v-n-o.blogspot.jp/2013/06/frameworkodex.html
ななしのブログ deodexしてみる
http://sniper-ta76.blogspot.jp/2012/03/deodex.html