1. 程式人生 > >我是如何學習Android原始碼的

我是如何學習Android原始碼的

一連很長時間(從2017/06/09到2017/06/26)都在研究藍芽,而且這只是文章發表的時間,再加上組織文章和研究的時間,不知不覺中就堅持這麼久………,也寫了藍芽的三篇部落格,而且篇幅很長如下:

這裡寫圖片描述

在這裡就不放文章連結了,有需要的在我的文章中搜索即可,現在,是時候放空一下,給自己充充電了,來張美景,欣賞一下北京的晚霞。

這裡寫圖片描述

言歸正傳,先放上Android原始碼連線地址Android原始碼,至於研究原始碼的好處,估計不用我再羅嗦了。
首先,原始碼體系很龐大,在研究之前,先要搞清楚Android體系結構,如下圖所示

Android體系結構

這裡寫圖片描述

注,該圖來自原始碼,路徑為android\frameworks\base\docs\html\images\system-architecture

對與c和c++我還可以學習,但是對於Linux核心的知識真是少之又少,所以這個還需要補充完善

  1. Application:應用層,包括各種系統應用或者三方應用
  2. Application Framework:應用程式框架層,提供各種API框架,系統開發人員可以使用所有framework層相關介面。該層包括AMactivity管理器,windowManager視窗管理,ContentProvider內容提供者,ViewSystem-view系統,PackagesManager包管理器,TelephonyManager電話管理器,ResourceManager資源管理器,LocationManager位置管理,NotificationManager通知管理
  3. Libraries&Android runtime:系統庫(包括SurfaceManager圖層管理,MediaFramework媒體庫,SQLite資料庫,等如上圖所示),和核心庫,虛擬機器
  4. linux kernel:Linux核心,看圖應該是各種驅動,包括顯示卡驅動,相機驅動,快閃記憶體驅動,Binder驅動,鍵盤驅動,音訊驅動,電量管理(這個可以看出對於電量的管理是在核心層實現的,framework和上層只能獲得電量的狀態)應該還有藍芽驅動,不過沒看到

看到這麼多東西,你想學那個呢?又從哪個版本學起呢?

  1. 第一,學習Android哪個版本??這個其實倒無所謂,正所謂萬變不離其宗,按照目前,你可以研究5.1或者是6.0又或者是別的,看你自己測試機。等你徹底研究好之後再去看更新的版本就會發現基本是很好掌握的。
  2. 第二,要從哪兒入手? 我是先從最簡單的應用入手,畢竟是當時剛自學java沒幾個月,不敢研究太深。首先接觸的是settings應用–>藍芽—>鎖屏(恰巧,andriod6.0以後鎖屏位於systemui中). 在研究某版本的某應用之前,先要看看該應用在該版本的演示效果,然後再進入程式碼的研究。
  3. 對於應用的研究入口絕對是清單配置檔案,看一眼清單配置檔案你就大致可以明白該應用介面的複雜程度以及各種許可權,元件。然後找到整個程式入口,之後便是原始碼的海洋……..
  4. 第三,註釋很重要 剛開始學習的人一般都不怎麼看重註釋,但這恰恰會使你錯過很多知識。一般每個類註釋會註明該類的用法以及作用。欄位註釋會註明該欄位表示什麼意思,以及會造成何種後果。方法註釋就更不用說了,方法引數和返回值以及注意事項全在這裡
  5. 第四,學會取捨。系統原始碼程式碼量龐大至幾個甚至幾十個g,如果你每行都看其實也沒什麼大的用處。
  6. 第五,善於總結,你只需要在分析之前先要明白自己要研究的問題是什麼?在分析之後善於總結,看看自己到底還有什麼問題是剩下的。以及程式碼中有什麼樣好的設計可以供你使用的

時間尚短,經驗尚淺,只因連續幾篇技術文章,大腦需要短暫休養,此文僅當隨筆。

ps,畢竟是工作了兩年時間,有時會忍不住去給別人指導。遇到各種基礎差但夢想大的初學者。在這裡真心想引用《壞蛋是怎樣煉成的》中的一句話,出來混遲早是要還的,不要好高騖遠。總有一天,你會花費更多的時間來還你曾經欠下的技術債。
所有的擴充套件延伸都是在紮實的基礎上進行的,而且好的java基礎可以讓你事半功倍。
比如今天剛遇到一個,jdk的環境變數如何配置,跟什麼有關係,這些基本的開發環境也並不在意。
基礎不好無所謂,但是不意識到自己的基礎很差就想去做出個大神般的程式,這是很可怕的一件事。

隨便吐槽,如有雷同,純屬巧合