论初次修改 Android framework 代码
點(diǎn)擊打開鏈接
論初次修改 Android framework 代碼
背景
公司產(chǎn)品需求,需要修改系統(tǒng) framework 層的部分界面顯示,包括聲音調(diào)節(jié)、亮度調(diào)節(jié)、長按電源關(guān)機(jī)等。
準(zhǔn)備
我并不是白手起步,有負(fù)責(zé)硬件的同學(xué)幫我搭建編譯環(huán)境、vim 編輯環(huán)境(一些輔助插件)。由于 Android 源碼結(jié)構(gòu)太過復(fù)雜,不建議強(qiáng)記,但是它的層次還是要大概清楚,比如 framework層 -> base -> core,policy,package,大部分的需求,在這三個(gè)包里面進(jìn)行代碼的修改即可。
Note:以下所有操作均在 Ubtuntu 14.04 LTS 系統(tǒng)上完成。
修改音量調(diào)節(jié)
對于不熟悉 android 源碼的同學(xué),比如我,選擇的入手點(diǎn)很重要,首先是代碼、界面的定位,找到需要修改的類和布局文件,這需要一點(diǎn)點(diǎn)耐心。先來看看原生的界面顯示:
這是我用三星s6調(diào)節(jié)音量的界面,僅供參考。
看看這張圖片有什么亮點(diǎn),咳咳,是特點(diǎn),細(xì)心的同學(xué)的已經(jīng)發(fā)現(xiàn)了,界面上有一個(gè)文本:鈴聲(不同的設(shè)備(手機(jī))、不同的場景顯示的文本不一樣,也有不顯示文本的奇葩系統(tǒng),不管是哪種情況,最多只是增加了定位的難度而已,其實(shí) android 源碼的結(jié)構(gòu)不會(huì)發(fā)生太大的變化)。文本有時(shí)候顯示的是:音量、聲音、媒體,不幸的是,公司的設(shè)備不顯示任何文本文字。
首先進(jìn)入到 android -> framework -> base 目錄下,下文不做特殊說明,都是在此目錄下,執(zhí)行以下命令:
grep "鈴聲" -r *該命令是在當(dāng)前目錄及子目錄中,尋找所有使用“鈴聲”的文件,大致結(jié)果如下(僅供參考):
很容易就看出,這些文本文字都定義在 strings.xml 資源文件中,然后我們根據(jù)任意資源名稱再次搜索,這里我們就選擇第一個(gè),命令如下:
grep "volume_ringtone" -r *結(jié)果如下:
偶偶,結(jié)果好多,我只截取了部分,不過也能看出搜索答案了,搜索結(jié)果還是在 string.xml 文件中,沒有 Java 文件,沒有布局文件,這表示我們的搜索結(jié)果是不對的(沮喪臉)。Why? 因?yàn)樵O(shè)備不是顯示“鈴聲”,用它進(jìn)行搜索當(dāng)然無結(jié)果咯,就像女朋友想買一個(gè)包包,你卻給她買了臺(tái)電腦一樣。
這個(gè)時(shí)候你就需要不斷的用不同的關(guān)鍵詞搜索,用甜言蜜語去哄女盆友。我用了:聲音、音量、語音等,功夫不負(fù)有心人,終于讓我試出來了。搜索“語音”,結(jié)果如下:
用上圖紅框中的 serviceClassVoice 進(jìn)行搜索,結(jié)果如下:
終于不再是清一色的 strings.xml 文件了,這一步基本算是完成了。最后仔細(xì)看了看,居然搜索“音聲”也能搜索出來,wtf!
Note:在沒有文本提示的情況下,只能大概的推測出中文文本,或者翻譯成英文進(jìn)行搜索,這不能缺乏耐心哦~~
根據(jù)第一步找到的 volume_adjust_item.xml 文件,進(jìn)一步定位 java 文件,命令如下:
grep volume_adjust_item -r *結(jié)果如下圖所示:
很容易就找到了 VolumePanel.java 文件,這就是調(diào)節(jié)音量的核心代碼文件,至于怎么蹂躪它,就看你的本事了。
總結(jié)
學(xué)到了很多命令,以及 Vim 編輯器的使用,以及編譯推送命令。比如 /查找、hjkl方向鍵、n和shift+n、adb push、adb pull、stop、start等。
以調(diào)節(jié)音量為例子,以此類推,調(diào)節(jié)亮度,調(diào)節(jié)關(guān)機(jī)界面等,都是差不多的步驟。
總結(jié)
以上是生活随笔為你收集整理的论初次修改 Android framework 代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改 framework 代码的经验和踩
- 下一篇: Android7.1修改系统默认多媒体音