原文:http://bbs.mfunz.com/thread-310913-1-1.html
http://blog.csdn.net/Android_Tutor/article/details/5724435
http://code.google.com/p/smali/
在开始之前,你需要准备(所涉及到的工具暂时请自行Google;由于伟大的墙的限制等原因原帖里的链接很多打不开):
手机里的 framework.jar 文件(ROM必须是Deodex过的);
Java JDK;
Smali/Backsmali 工具;
文本编辑器(可以用记事本,推荐使用 Notepad++);
能够解压 jar 文件的软件(WinRAR,7Zip等);
能够访问手机系统文件的文件管理器(比如 Root Explorer,即RE管理器);
你的备份文件;
基本步骤:
将 Smali/Baksmali 工具解压到一个文件夹并将 framework.jar 放入相同目录;
运行 baksmali manager.bat;
在菜单中依次按 4 -> 2 来选择 framework.jar;
按 1 对 framework.jar 进行 Baksmali 操作;
等待,直到一个新文件夹 “framework” 出现,framework.jar 的内容被反编译出来;
不要关闭 Baksmali Manager 窗口,以后还会用到。
开始修改:
1. 修改音量调节级数
打开刚才得到的 framework 目录,找到文件 android/media/AudioService.smali ,用文本编辑器打开;
搜索字段 “max_” 直到你看到如下图所示的位置;
在图中你可以看到 “array_1ba” 字段。这个可能根据 ROM 不同而有所不同(但一般只有 ”1ba“ 这几个字母有变化)。好,继续根据这个字段的内容进行搜索,在这里我们搜索 ”array_1ba“。
你会看到如下内容:
这一段内容的实际意思跟如下所示的源码相同(来自CM7源码):
所以,如果你要修改你的媒体音量级数,你需要更改第四行的 ”f“(这里的 ”f“ 是16进制,即十进制的 15)。
我将 ”f“ 改成了 ”1e“ ,即 30 级音量调节。
修改完成后保存即可。
2. 实现平滑滚动
有一些 Android 应用在滚动窗口里的内容的时候常有迟滞、卡顿的情况。通过利用 Logcat 对系统日志进行分析,我发现我在应用中进行滚动时,系统的”垃圾收集器“工作过于频繁。
我利用 Google 查找了相关资料,发现是 Android 系统的”滚动缓存“功能导致了这个问题。
有些开发者建议在开发应用软件时在应用内置设置中禁用“滚动缓存”,但显然,不是所有程序都这么做了。
所以,下面的修改就是在 Android 系统中将”滚动缓存“关闭。所有的应用程序都不会有问题的。
进行修改之后,我在 Facebook,PlayerPRO,PowerAMP 等应用中感觉到了很大的体验改进。
步骤:
用文本编辑器打开 framework/android/widget/AbsListView.smali ;
搜索 ”ScrollingCache“ 字段,按照图示方法修改:
--
--
修改完成后保存即可。
全部修改完毕后:
回到 Baksmali Manager 窗口;
按 2 进行 smali 操作;
等待直到生成 classes.dex 文件;
用压缩解压工具打开 framework.jar;
用生成的 classes.dex 替换 framework.jar 里原有的文件;
将修改好的 framework.jar 放入手机的 /system 目录;
修改文件权限为 rw-r--r--;
将文件移动到 system/framework 目录,替换原有文件;
重启。
修改到此完成。
补充:
有部分用户报告称,音量级数修改在 PowerAMP 里不起作用,解决方法如下:
打开 PowerAMP - 设置 - 音频引擎 - 高级修改,取消选中”直接音量控制“即可。