@echo off goto STARTPROC =============================================================================== GALAXY Note (SC-05D) Android 4.0.4 純正 ROM 用 framework.org 書き換えバッチ  自身が書き換えるためのものなので,エラーチェック等は一切なし。 従って必 要となるツール及び環境を整えておくこと。 想定環境 (ホスト):Windows 7 Ultimate (x64) 日本語版 想定環境 (SC-05D):Android 4.0.4 純正 ROM (本体のみでアップグレード) 必要ツール : ・Android JDK 等 :adb.exe と関連 DLL が含まれているもの。 ・SAMSUNG Kies 等 :デバッグモード用の GALAXY Note 用 USB ドライバーをインストール可能なもの。 事前にドライバーをインストールしてお くこと。 ・smali / baksmali :framework.odex の逆アセンブル及び再ア センブルに使用。 1.4.1 を想定。 ・Java :smali / baksmali の実行に必要となる。 あらかじめインストールしておくこと。 ・7za.exe :7-zip のコンソール用ツール。 framework.jar へ classes.dex を格納す るのに使用。ZIP 書庫への Deflate での 圧縮・格納を行えるツールなら, 別段何 でもよい。 ・dexopt-wrapper :framework.jar から odex を作成するの に使用。これがない場合は,SC-05D に直 接作成させる方法もあるが, 一時的に文 鎮化するので,CWM が必須となる。 ・busybox :作成した framework.odex に署名を付け るために使用。 あらかじめマーケットを 使って SC-05D へインストールしておく こと。実行イメージを持っている場合は, dexopt-wrapper と同じ方法で SC-05D へ 転送して実行する方法もある。 ・ClockworkMod Recovery :これを使用したリカバリーモード上での 実行を想定している。 /system と /data の RW マウントと USB ケーブルでの接続 を行えること。 SC05D-ICS-KBC-CWM-V6.0.1.2_r12- recovery.7z の使用を想定。 ・Odin3 :これで ClockworkMod Recovery の焼いて おくことを推奨。純正 ROM を焼くのにも 使用可能。 ・Check Fus Downloader 2.1:必須ではないが,これを使用して純正 ROM イメージの入手しておくことを強く 強く推奨。  前もってインストールしておくものを除いて, すべて作業ディレクトリー上に 置いておくこと。 このバッチでツールの存在等を事前チェックすることはないの で注意。  dexopt-wrapper で作成された odex の通らない環境があるので,システム自身 に作成させる方法を採っているが,作成させた際に必ず文鎮化するので, それへ の対処法が存在しない場合は,このバッチを実行してはならない。 CWM を使用し ている場合は,文鎮化 (「S」のロゴ表示後ハング。) した後リカバリーモードで 再起動し,/system と /data をマウントした上でバッチを再開させれば良い。  framework.odex の書き換え一般用のバッチなので,smali ファイルの改変は手 動となる。 =============================================================================== :STARTPROC rem === 前処理 === rem ### 作業を行うディレクトリーをここで指定すること ### set WORKDIR=c:\tmp\datasim rem ### 使用する smali の版をここで指定すること ### set SMALI=smali-1.4.1 rem ### 使用する baksmali の版をここで指定すること ### set BAKSMALI=baksmali-1.4.1 rem === 処理開始 === echo ################ echo ### 処理開始 ### echo ################ cd "%WORKDIR%" echo. echo === 保険でオリジナルの framework.* を PC へ待避 === if exist "%WORKDIR%"\org\framework.odex goto NoBackup md org adb pull /system/framework/framework.jar org\framework.jar adb pull /system/framework/framework.odex org\framework.odex :NoBackup echo. echo === /system/framework 配下を参照用としてコピー === adb pull /system/framework framework echo. echo === framework.* を作業ディレクトリーへコピー === adb pull /system/framework/framework.jar workspace\framework.jar adb pull /system/framework/framework.odex workspace\framework.odex echo. echo === framework.odex を baksmali で逆アセンブル === java -jar "%BAKSMALI%".jar -a 15 -d framework -x workspace\framework.odex echo === 手動で out/com/android/internal/telephony/gsm/ 上の === echo === GsmServiceStateTracker.smali を編集 === rem === SC-05D では 3G なら 3 と 13 を,Xi (LTE) なら 2,3, === rem === 12,13 の変更が必要となる。 === rem. rem 5279: :pswitch_data_22 rem 5280: .packed-switch 0x0 rem 5281: :pswitch_1c rem 5282: :pswitch_1d // 1 is "in service" rem 5283: :pswitch_1d // 2 is "searching" rem 5284: :pswitch_1d // 3 is "registration denied" rem 5285: :pswitch_1c // 4 is "unknown" no valid in current baseband rem 5286: :pswitch_1f // 5 is "in service, roam" rem 5287: :pswitch_5 rem 5288: :pswitch_5 rem 5289: :pswitch_5 rem 5290: :pswitch_5 rem 5291: :pswitch_1c // same as 0, but indicates that emergency call is possible. rem 5292: :pswitch_5 rem 5293: :pswitch_1d // same as 2, but indicates that emergency call is possible. rem 5294: :pswitch_1d // same as 3, but indicates that emergency call is possible. rem 5295: :pswitch_1c // same as 4, but indicates that emergency call is possible. rem 5296: .end packed-switch echo. echo ##################################################### echo ### ### echo ### GsmServiceStateTracker.smali を編集して下さい ### echo ### ### echo ##################################################### pause echo. echo === smali でアセンブルして classes.dex を作成 === java -jar "%SMALI%".jar -o classes.dex out echo. echo === framework.jar へ classes.dex を追加 === 7za u -tzip workspace\framework.jar classes.dex echo. echo === 改変した framework.jar と dexopt-wrapper を === echo === SC-05D へコピー === adb push workspace\framework.jar /data/local/tmp/framework.jar.new adb push dexopt-wrapper /data/local/tmp/dexopt-wrapper adb shell chmod 755 /data/local/tmp/dexopt-wrapper goto SKIPDEXOPT echo. echo === dexopt-wrapper を使用して odex を作成 === rem ======================================================== rem === たとえ /system/framework 上のすべての jar を指定 === rem === したとしても通らない dex が作成される。 オリジナ === rem === ルより 25k ほど小さいので, 明らかに何かが足りて === rem === いない模様。 === rem ======================================================== adb shell cd /data/local/tmp; ./dexopt-wrapper framework.jar.new framework.odex.new /system/framework/core-junit.jar:/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/android.policy.jar:/system/framework/services.jar goto RUNBUSYBOX :SKIPDEXOPT rem ===================================================== rem === dexopt-wrapper で作成した odex は通らないので === rem === システムに作成させる方法を採る。 一旦文鎮化す === rem === るので注意。 危険物認定。 === rem ===================================================== echo. echo ##################################################### echo ### ### echo ### システムに framework.odex を作成させるため, ### echo ### リブートします。 framework.odex が存在しない ### echo ### ため,必ず半文鎮化しますが,慌てずリカバリー ### echo ### モードで再起動して下さい。 (CWM を想定。) ### echo ### マウントもお忘れなく。 ### echo ### ### echo ### リカバリーモードで再起動後,処理を続行して下 ### echo ### さい。 ### echo ### ### echo ##################################################### set /p UANSRB2=リブートしますか? (y/n)... if "_%UANSRB2%" == "_y" goto DODREBOOT goto ENDPROC :DODREBOOT adb shell mv /system/framework/framework.jar /system/framework/framework.jar.old adb shell cp /data/local/tmp/framework.jar.new /system/framework/framework.jar adb shell mv /system/framework/framework.odex /system/framework/framework.odex.old adb reboot pause echo === システムが作成した classex.dex を使用する === adb shell mv /data/dalvik-cache/system@framework@framework.jar@classes.dex /data/local/tmp/framework.odex.new adb shell rm /system/framework/framework.jar adb shell mv /system/framework/framework.jar.old /system/framework/framework.jar adb shell mv /system/framework/framework.odex.old /system/framework/framework.odex :RUNBUSYBOX echo. echo === 作成した frameowork.odex に署名を付ける === adb shell busybox dd if=/system/framework/framework.odex of=/data/local/tmp/framework.odex.new bs=1 count=20 skip=52 seek=52 conv=notrunc echo. echo === 作成した framework.odex をオリジナルと置き換え === echo. set /p UANSOW=新たに作成したframework.odexをオリジナルと置き換えますか? (y/n)... if "_%UANSOW%" == "_y" goto DOOVERWRITE adb pull /data/local/tmp/framework.odex.new "%WORKDIR%"\framework.odex.new adb pull /data/local/tmp/framework.jar.new "%WORKDIR%"\framework.jar.new goto ENDOVERWRITE :DOOVERWRITE adb shell cp /data/local/tmp/framework.odex.new /system/framework/framework.odex.new adb shell chmod 644 /system/framework/framework.odex.new adb shell rm /system/framework/framework.odex adb shell mv /system/framework/framework.odex.new /system/framework/framework.odex :ENDOVERWRITE :ENDPROC echo. echo === 後処理 === adb shell rm /data/local/tmp/framework.odex.new adb shell rm /data/local/tmp/dexopt-wrapper adb shell rm /data/local/tmp/framework.jar.new rmdir /s /q "%WORKDIR%"\framework rmdir /s /q "%WORKDIR%"\out rmdir /s /q "%WORKDIR%"\workspace del "%WORKDIR%"\classes.dex if "_%UANSRB2%" == "_y" goto QRREBOOT if "_%UANSOW%" == "_y" goto QRREBOOT goto BATEND :QRREBOOT rem === リブート === echo. echo ################################################## echo ### ### echo ### リブート前にキャッシュの削除を行って下さい ### echo ### ### echo ### Wipe cache partition ### echo ### advanced → Wipe Dalvik Cache ### echo ### ### echo ################################################## pause echo. echo ##################################################### echo ### ### echo ### リブートします。 ### echo ### ### echo ### 不幸にも半文鎮化した場合は, リカバリーモード ### echo ### 等を使って待避した framework.odex をコピーす ### echo ### ることで復旧を行えます。 ### echo ### ### echo ### adb shell rm /system/framework/framework.odex ### echo ### adb push org\framework.odex ### echo ### /system/framework/framework.odex ### echo ### ### echo ##################################################### echo. set /p UANSRB=リブートしますか? (y/n)... if "_%UANSRB%" == "_y" goto DOREBOOT goto BATEND :DOREBOOT adb reboot :BATEND echo. echo ################ echo ### 処理終了 ### echo ################ echo.