android告别篇-对于源码我的一些看法
1.背景
? ? ? ? 即將結束在sony移動的實習了,在最后的日子有一些傷感有一些感觸,對于android這個傾注一年心血的技術有太多話要說。感謝sony移動的各位大牛們給我這個機會,讓我徹徹底底的看清了android的本質。沒有這次工作經歷,我對android的印象可能會一直停留在sdk層。這一年陸陸續續的寫關于android方面的博客,算上這一篇應該正好20篇。從最初的介紹一些小控件的使用,到現在寫一些簡單的源碼操作,是時候寫一篇總結了。。。2.需要的資料 ??
? ? ? 胡亂扯一下學習android源碼所需要的便利條件吧。? ? (1)多套android源碼
? ? ?? 因為android系統是開源的,所以源碼都是比較容易獲得的。我這里要說的是我們在學習源碼的時候不要光盯著最新版本或是跟我們手機適配的版本來學習。看看以前的版本的源碼,我們就知道android的源碼的進化過程,在這之中,更可以體會到google的嚴謹。
?????? 舉一個源碼進化的例子。在4.2之前的版本,surfaceview的功能都是寫在surfaceview這一個類中的,但是在之后的版本對于surfaceview的操作都專門寫了一個新的類-surfaceControl。
??? (2)linux操作系統
??????? 如果在windows下搞android源碼是及其可怕的。因為我們在生成sdk或是手機系統的時候要用到make,mm等指令。。源碼中每層的makefile文件將零散的類連接在一起,而這些操作都需要在linux環境下完成。
??? (3)opengrok
??????? 不懂的可以google一下,這個軟件讓你查看源碼更方便,上萬的文件,總不能一個文件夾一個文件夾找吧。。上個圖
???????????????????????????????? 2-1 opengrok視圖
???????????
???? (4)刷機工具以及一部可刷的root手機
??????? 最低要求是有root權限。因為操作系統級的app這是必須的,而且不root的話也不能用adb shell。
3.adb shell
????????? 搞源碼一定會用到的,這個是sdk中自帶的google提供的一個操作手機內部資源的工具。具體能使先很多功能,像是抓取log,push/pull一些東西,增加一些service等。有興趣可以看看這個【android-tips】adb 常用命令匯總(持續更新中)
4.android系統的層次以及之間的關系
????
???????????????????????????????????????????????????? 4-1?? android源碼結構
? ? ? ? ????
?????? 這張圖已經看得很清楚了,在源碼中有三層:linux kernel(c語言和匯編),native函數(c和c++),framework(java)。
???????????? linux-kernel我沒涉及過,不知道怎么改。。一般的操作主要是集中在native層和framework層。
???????????
??????? 先上一張源碼內部文件的組成圖。
?????????????????????????????????????????????????????????? 4-2 源碼文件夾結構
? ? ? ? ? ? ?
?????? framework層的函數就是在圖中的frameworks文件夾中。里面就是平時我們在代碼中import的那些包。比如說我們常用的所有view類,都在這里
???????????????????????????????????????????????????????????? 4-3 view的位置
????????????????????
???????????????? framework層的大多功能都是從native的函數中來的。只是在framework層做成sdk中可以直接調用的接口,native層函數和framework層函數的橋梁就是jni。
5.ndk
??????????? 很多做android的人都知道ndk,ndk的功能可以用一句話概括,就是“越過framework層直接調用native函數”。具體的安裝和用法可以參見。android圖文介紹NDK安裝及簡單jni demon的實現
6.關于hook
???????????? hook就是源碼鉤子,很多人聽說過但沒有用過。我嘗試過搞過一個hook,hook其實就是提取一些源碼中沒有提供接口的功能。比如說當系統渲染界面的顯示的時候,google沒有提供方法來得知每個字應該畫到哪,我們要想知道每個字的坐標,就要去看它的渲染文件,然后在里面加上自己的方法然后把需要的信息提取出來。
寫到最后:對于android系統的理解,我還停留到比較膚淺的水平。不過對于系統再熟,也只是了解一個系統,最重要的是明白它的結構的原理,知道它處理數據的算法,說白了就是設計模式和算法。寫給曾經那個停留在app層拿著android入門擺弄各種控件的自己,you are still? too naive too simple!
總結
以上是生活随笔為你收集整理的android告别篇-对于源码我的一些看法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android SQLite数据库用法图
- 下一篇: MySQL for Mac 安装和基本操