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