介绍一种细化android下音量级数的方法

 

版本:Android4.0
 
1、通过修改源码实现,路径如下:
frameworks/base/media/java/android/media/AudioService.java
 1 private int[] MAX_STREAM_VOLUME = new int[] {
 2        15,  // STREAM_VOICE_CALL
 3        21,  // STREAM_SYSTEM
 4        21,  // STREAM_RING
 5        45, // STREAM_MUSIC
 6        21,  // STREAM_ALARM
 7        21,  // STREAM_NOTIFICATION
 8        45, // STREAM_BLUETOOTH_SCO
 9        21,  // STREAM_SYSTEM_ENFORCED
10        45, // STREAM_DTMF
11        45, // STREAM_TTS
12        45  // STREAM_EXCLUSIVE
13 };

 

上到上面的代码。修改其最大级别,这里已经被修改为3的倍数了。然后编译,生成新的framework.jar文件,替换你的framework.jar即可。
 
2、通过反汇编的方式进行修改
a.将/system/framework/framework.jar文件拷贝出来,然后用rar打开,提取里面的class.dex文件
b.使用baksmali.jar工具进行解压,如果你没有这个工具你也可以使用apk的反汇编工具APK Multi-Tool,随便找一个apk,然后把你的class.dex和这个apk里面class.dex替换,对这个apk进行反汇编,我们主要关心的是反汇编这个class.dex文件,通过反汇编后生成smali文件。
c.找到smali\android\media\AudioService.smali文件,也就是对应上面的java文件,定位到如下内容处:
    :array_9
    .array-data 0x4
        0x28t 0x0t 0x0t 0x0t
        0x38t 0x0t 0x0t 0x0t
        0x38t 0x0t 0x0t 0x0t
        0x78t 0x0t 0x0t 0x0t
        0x38t 0x0t 0x0t 0x0t
        0x38t 0x0t 0x0t 0x0t
        0x78t 0x0t 0x0t 0x0t
        0x78t 0x0t 0x0t 0x0t
        0x78t 0x0t 0x0t 0x0t
        0x78t 0x0t 0x0t 0x0t
        0x38t 0x0t 0x0t 0x0t
    .end array-data
上面的每一个表示一个int数值,分为4个字节,低位在前,所以我们只需要修改上面的第一个字节数据,上面的第一行 0x28t 0x0t 0x0t 0x0t,对应于STREAM_VOICE_CALL的音量级别,这里我统一都把级别调整为以前的8倍了,及0x28=40=8*5,以前级别是0-5共6个级别。
d.修改好后反汇编回来,如果你用的是第二个方法反汇编,那么你需要将apk反汇编回来,然后同样提取反汇编回来的apk里面的class.dex,将这个修改过的class文件替换文件framework.jar中以前的。自后拷贝这个framework.jar到系统中即可。
posted @ 2013-06-04 19:15  凡人修行  阅读(3615)  评论(0编辑  收藏  举报