论初次修改 Android framework 代码

论初次修改 Android framework 代码

背景

公司产品需求,需要修改系统 framework 层的部分界面显示,包括声音调节、亮度调节、长按电源关机等。

准备

我并不是白手起步,有负责硬件的同学帮我搭建编译环境、vim 编辑环境(一些辅助插件)。由于 android 源码结构太过复杂,不建议强记,但是它的层次还是要大概清楚,比如 framework层 -> base -> core,policy,package,大部分的需求,在这三个包里面进行代码的修改即可。

Note:以下所有操作均在 Ubtuntu 14.04 LTS 系统上完成。

修改音量调节

  1. 开始:代码定位
    对于不熟悉 android 源码的同学,比如我,选择的入手点很重要,首先是代码、界面的定位,找到需要修改的类和布局文件,这需要一点点耐心。先来看看原生的界面显示:

原生音量调节

这是我用三星s6调节音量的界面,仅供参考。

看看这张图片有什么亮点,咳咳,是特点,细心的同学的已经发现了,界面上有一个文本:铃声(不同的设备(手机)、不同的场景显示的文本不一样,也有不显示文本的奇葩系统,不管是哪种情况,最多只是增加了定位的难度而已,其实 android 源码的结构不会发生太大的变化)。文本有时候显示的是:音量、声音、媒体,不幸的是,公司的设备不显示任何文本文字。

首先进入到 android -> framework -> base 目录下,下文不做特殊说明,都是在此目录下,执行以下命令:

grep "铃声" -r *

该命令是在当前目录及子目录中,寻找所有使用“铃声”的文件,大致结果如下(仅供参考):

全局搜索“铃声”

很容易就看出,这些文本文字都定义在 strings.xml 资源文件中,然后我们根据任意资源名称再次搜索,这里我们就选择第一个,命令如下:

grep "volume_ringtone" -r *

结果如下:

搜索volume_ringtone

偶偶,结果好多,我只截取了部分,不过也能看出搜索答案了,搜索结果还是在 string.xml 文件中,没有 java 文件,没有布局文件,这表示我们的搜索结果是不对的(沮丧脸)。Why? 因为设备不是显示“铃声”,用它进行搜索当然无结果咯,就像女朋友想买一个包包,你却给她买了台电脑一样。

这个时候你就需要不断的用不同的关键词搜索,用甜言蜜语去哄女盆友。我用了:声音、音量、语音等,功夫不负有心人,终于让我试出来了。搜索“语音”,结果如下:

搜索语音

用上图红框中的 serviceClassVoice 进行搜索,结果如下:

搜索 serviceClassVoice

终于不再是清一色的 strings.xml 文件了,这一步基本算是完成了。最后仔细看了看,居然搜索“音声”也能搜索出来,wtf!

Note:在没有文本提示的情况下,只能大概的推测出中文文本,或者翻译成英文进行搜索,这不能缺乏耐心哦~~

  1. 定位 java 文件

根据第一步找到的 volume_adjust_item.xml 文件,进一步定位 java 文件,命令如下:

grep volume_adjust_item -r *

结果如下图所示:

定位java文件

很容易就找到了 VolumePanel.java 文件,这就是调节音量的核心代码文件,至于怎么蹂躏它,就看你的本事了。

总结

学到了很多命令,以及 Vim 编辑器的使用,以及编译推送命令。比如 /查找、hjkl方向键、n和shift+n、adb push、adb pull、stop、start等。

以调节音量为例子,以此类推,调节亮度,调节关机界面等,都是差不多的步骤。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值