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

この記事の賞味期限は切れています。掲載内容や情報が古い可能性があります。

広告あり

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”で再起動しているようなものなので後から再起動する必要がありません。

はてブ Pocket Mastodon タイトルとURLをコピー

カテゴリ:

技適の無い機器の使用は自己責任です。
中国版デバイスは日本語に対応していないものが多いため、ADBコマンドでの日本語化が必要です。
root化済み・非rootそれぞれのやり方はこちらの記事を参考にしてください。