音量パネルで着信音量以外も変更する方法

この記事の賞味期限は切れています。
投稿から1年以上経過しているため、情報が古い可能性があります。

当サイトで紹介するMODやアプリなどの内、システムファイルの改変やシステムに深く関わるものはroot化やリカバリが必須となります(root化の必要なしと明記している場合は除く)。導入は自己責任で行ってください。また、技適の無い機器の使用は自己責任です。

Gravityboxなどには音量キーを押したときに出る音量パネルに着信音量以外の
通知音量やアラーム音量を変更出来るようにする設定があります。
しかしXperiaは特殊なので動いたり動かなかったりと安定しません。
なので自分でsmaliを編集して出してしまうようにします。



まずframework.jarをapktool.batのあるフォルダでコマンドプロンプトを開き、
apktool d framework.jar

としてデコンパイルし、
\smali\android\view\VolumePanel.smali
を開きます。
Landroid/content/Context;->getResources()Landroid/content/res/Resources;で検索し、

  invoke-virtual {p1}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
    move-result-object v4
    invoke-virtual {v4, v8}, Landroid/content/res/Resources;->getBoolean(I)Z
    move-result v4

を削除して

const/4 v2, 0x0

を追記します。
(変更前)

iget-boolean v4, p0, Landroid/view/VolumePanel;->mVoiceCapable:Zで検索します。
その下にある

if-nez v4, :cond_1

を削除します。
iget-boolean v4, p0, Landroid/view/VolumePanel;->mUseMasterVolume:Zで検索(というかすぐ下ですが)
その下にある

if-nez v4, :cond_1

を削除します。
さらに少し下の

iget-boolean v4, p0, Landroid/view/VolumePanel;->mShowCombinedVolumes:Z

の下にある

if-nez v4, :cond_2


if-nez v4, :cond_1

に変更します。
(変更前)

次に#window:Landroid/view/Window;で検索します。
下にある

:cond_1

を削除して、さらにもう少し下にある

    .line (数字)
    :cond_2


    .line (数字)
    :cond_1

にします。
(変更前)

ここまででVolumePanel.smaliの編集は終了です。


ここからは
\smali\android\view\VolumePanel$StreamResources.smali
を編集します。
まずconst v6, 0x10802で検索します。
このようにみつかるので(みつからなければconst v6で検索)

move v7, v2


move v7, v11

にします。
move v6, v13と検索し、その下にある

move v10, v2


move v10, v11

にします。
次にmove v6, v2、move v5, v14と検索しそれぞれmove v6, v13と同じように変更します。
その次はconst v9, 0x10802と検索します。
少し上にconst-string v4, “RingerStream”があることを確認し、
検索結果の下にある

move v10, v11


move v10, v2

にします。
最後に、move v7, v12で検索します。

move v10, v11


move v10, v2

にします。
これでVolumePanel$StreamResources.smaliの編集も完了です。
apktool.batのあるフォルダでコマンドプロンプトを開き、

apktool b framework.jar.out

を実行しコンパイルして、
\build\apkにできたclasses.dexをframework.jarに7zipなどで無圧縮で追加すれば完了です。
zipを作るなりして書き戻したあと再起動すると音量パネルに着信音量の他に
アラームと通知音量を変更出来るバーが追加されているはずです。

いちいちzipを作ってインストールするのは面倒だ、という人のためadbでできる方法を書いておきます。

adb shell su -c “busybox mount -o rw,remount /system”
adb shell su -c “stop zygote”
adb push framework.jar /data/local/tmp
adb shell su -c “mv /data/local/tmp/framework.jar /data/local/tmp/framework.jar”
adb shell su -c “busybox cp -p /data/local/tmp/framework.jar /system/framework/framework.jar”
adb shell su -c “start zygote”

この方法の場合”stop zygote”→”start zygote”で再起動しているようなものなので後から再起動する必要がありません。


Sony Mobile Communicationsのスマートフォン、Xperia向けのカスタマイズや便利なツールを紹介しています。Xperia X PerformanceとZ4 Tabletを使用中で、Androidアプリも開発しています。

Twitter: @AndroPlus_org

コメントフォーム右上の「ログイン」メニューで各種SNSアカウントでログインできます。
匿名でコメントしたい場合は、名前とメールアドレスを入力した後「アカウントを作成せず投稿する」にチェックを入れてください。
Disqusに登録すると、返信通知を受け取れます。