如何針對Github上某個Android開源項目進行學習?

對於很多開源項目,以PullToRefresh為例,可以直接作為一個project library調用。對於這些項目,應該以什麼方式去學習?如果只是單純調用,自然學不到什麼,但整個項目代碼量也相對較多,又沒法仔細閱讀。題主自己寫過一些功能簡單的項目,想去了解一下更複雜的項目,求各位指點


瀉藥。在 Android 開源項目源碼解析公共模板 @codeKK 開源站 寫過分析步驟,這裡再介紹下自己的看法:

這裡的學習分為快速掌握和全部項目分析,開源項目 Android 一般分為完整項目(App)和工具庫,分析的話可概括為總分總:

1 總 ---- 功能了解

了解項目功能(Sample 和文檔)以及主要分為幾個大塊。另外明白你的需求,比如 PullToRefresh 的下拉實現。

PS:(1)大家可以自己先想想如果是自己會怎麼去實現這個項目,或許看源碼過程中會發現思想碰撞。

(2)如果時間比較緊,可以先 Google 一些該項目相關的文檔結合代碼看看,幫助快速掌握,不過網上分析文章參差不齊,需謹慎。

2 分 ---- 詳細設計

這裡正式開始代碼分析,分析過程中如果腦子記不住,多動手記下主要類、函數等作用

(1) 入口

對完整 App 來說就是 Manifest 找到入口 Activity,對於工具庫從調用介面中判斷入口類。然後在 IDE 中一步步深入即可。

PS:一般不錯的開源項目規範都比較好,類、函數、變數從名字上就可以了解作用,所以如果需要快速掌握原理的話看覺得是重點的函數即可。

(2) 核心類

在上面的一步步深入過程中已經接觸了不少類,大致了解各個類的主要作用

3 總 ---- 總體設計

(1) 功能流程圖

上面 2-(1) 的過程完成後已經大致了解項目的流程,不費事的話可以簡單畫下流程及相關類、函數。

如 Retrofit、Volley 的請求處理流程,Android-Universal-Image-Loader 的圖片處理流程圖。

(2) 總體設計

整個庫分為哪些模塊及模塊之間的調用關係。

如大多數圖片緩存會分為 Loader 和 Processer 等模塊。

4 回顧

這時候從 3-2-1(總體設計-&>流程圖-&>詳細設計-&>功能介紹)反序看,大致就能了解作者最初是怎麼設計的了

對於快速分析可以走 1-2(1)-2(2)-3(1) 的步驟。


簡單說可以採取以下幾個步驟:

  1. 了解項目的功能、組成部分,從文檔中知道它能幹嘛不能幹嘛,有什麼限制、應用場景。

  2. 大概看一下API列表,找到重要的、自己感興趣的API。

  3. 重點研究上面找到的API,圍繞它寫一些測試代碼,猜測一些邊界條件,看看它的反應是否符合自己的預期。

  4. 然後研究API的源代碼,了解一個操作到底是怎麼完成的,涉及了哪些部分。這個過程中應該忽略一些參數檢查、兼容性之類的代碼,關注主幹部分,畫出時序圖或者狀態圖等等。

最後推薦Code Reading一書:

Code Reading: The Open Source Perspective: Open Source Perspective/代碼閱讀


多動手 多思考 實踐出真理


https://github.com/forezp/banya


推薦閱讀:

Android O DP3來了
如何看待今天的小米還有小米3?
[譯] 如何通過 ArrayMap 和 SparseArray 優化 Android App
為什麼每次小米、魅族、華為等國產出高配、價格稍高的新機總有一群人再罵,他們是什麼心態?
超級觸控(super touch)這個APP是否有效,是如何做到的?

TAG:互聯網 | 程序員 | 編程 | Android | Linux運維 |