2013/12/15

Galaxyの着信音量を固定する方法(odexファイルを改変)


Galaxyシリーズは電話の着信音が固定音量ではなく、徐々にボリュームアップしていく仕様になっています。

この着信音の音量を固定する方法の覚書です。

韓国版のGalaxy S4 LTE-A(shv-e330s、SKテレコム版)の例です。

【全体の流れ】

・必要なファイルの準備
・odexファイルを展開・編集
・classes.dexを作成
・deodexファイルを作成
・odexファイルを作成

【準備】

まず、必要な物を用意します。

SDKが使える環境になって、JAVAがインストールされている事が前提です。

Java SE ダウンロード
http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html

1)作業用フォルダ

任意のフォルダで構いませんが、今回は"SecPhone_kor/"というフォルダを作業用に用意しました。

2)アセンブラと逆アセンブラ

An assembler/disassembler for Android's dex format
https://code.google.com/p/smali/

上記のページから以下のファイルをダウンロードして作業用フォルダに保存します。

baksmali
smali
baksmali-2.0.2.jar
smali-2.0.2.jar

"baksmali-2.0.2.jar"と"smali-2.0.2.jar"は"baksmali.jar"と"smali.jar"にリネームしておきます。

3)7Z

以下から7Zをダウンロードして、解凍し、作業用フォルダに置きます。

7z002.lzh
http://madobe.net/archiver/app/dosp/7z.html

4)dexopt-wrapper

以下のサイトからdexopt-wrapperをダウンロードして解凍し、端末の"/data/local/tmp/"に置きます。

http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36

以下の様にSDKからpushしても良いですし、ESファイルエクスプローラー等を使っても構いません。

adb push dexopt-wrapper /data/local/tmp/

5)電話アプリとodexファイル

端末から以下の2つのファイルを抜き出して作業用フォルダ内に置きます。

PCの任意のフォルダにもバックアップとしても保存しておくことをお勧めします。

/system/app/SecPhone_KOR.apk
/sustem/app/SecPhone_KOR.odex

これらのファイルは、SDKを使ってPCにpullしてもよいのですが、ESファイルエクスプローラ等でコピーして端末の"/sdcard/"に置き、そこからケーブルやクラウドを介してPCにコピーしてもよいでしょう。

6)/system/framework/の中身

端末の"/system/framework/"の中身全てを作業用フォルダにコピーします。

それぞれのファイルのサイズは小さく、全体で90MB程しかありませんが、当方の環境では157個のファイルがありました。

ファイル数が多いので、今回は、作業用フォルダの中に"/system/framework/"というフォルダを作り、その中に入れました。

【deodexファイルの作成】

1)odexファイルの展開

コマンドプロンプトから作業用フォルダに入り、以下を実行します。

PCのエクスプローラで作業用フォルダを開き、Shift+右クリックから「コマンドウインドウをここで開く」を選択するとよいでしょう。

java -jar baksmali.jar -d system/framework -x SecPhone_KOR.odex -o test

作業用フォルダ内の/test/にファイルが展開されますので、コマンドプロンプトは開いたままにして、次の作業に移ります。

2)設定ファイルの編集

以下のファイルをメモ帳等にドラッグして開きます。

/test/com/android/phone/Ringer$1.smali

"setStreamVolume"で検索し、以下の部分をコメントアウトします。(行頭に"# "を付けます。)

該当箇所は2ヶ所あります。

invoke-virtual {v1, v6, v2, v3}, Landroid/media/AudioManager;->setStreamVolume(III)V

編集したら、ファイルを上書き保存して、編集に使用したメモ帳等を終了します。

3)classes.dexの作成

作業用フォルダでコマンドプロンプトから下記を実行します。

java -jar smali.jar test -o classes.dex

以下のファイルが作成されます。

classes.dex

4)deodex化

作業用フォルダでコマンドプロンプトから下記を実行します。

7z a -tzip SecPhone_KOR.apk classes.dex

作業用フォルダ内の"SecPhone_KOR.apk"が更新されます。

【odexファイルの作成と差し替え】

作成したdeodexファイル(SecPhone_KOR.apk)を端末の"/data/local/tmp/"に置き、adbから下記を実行します。

adb shell chmod 755 /data/local/tmp/dexopt-wrapper

adb shell

cd /data/local/tmp

./dexopt-wrapper SecPhone_KOR.apk SecPhone_KOR.odex

busybox dd if=/system/app/SecPhone_KOR.odex of=SecPhone_KOR.odex bs=1 count=20 skip=52 seek=52 conv=notrunc

"/data/local/tmp/"に"SecPhone_KOR.odex"が作成されますので、これを"/system/app/SecPhone_KOR.odex"と差し替えます。

ファイルを差し替えたら、端末を再起動します。


0 件のコメント:

コメントを投稿