如何針對Github上某個Android開源項目進行學習?
01-29
對於很多開源項目,以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) 的步驟。簡單說可以採取以下幾個步驟:
- 了解項目的功能、組成部分,從文檔中知道它能幹嘛不能幹嘛,有什麼限制、應用場景。
- 大概看一下API列表,找到重要的、自己感興趣的API。
- 重點研究上面找到的API,圍繞它寫一些測試代碼,猜測一些邊界條件,看看它的反應是否符合自己的預期。
- 然後研究API的源代碼,了解一個操作到底是怎麼完成的,涉及了哪些部分。這個過程中應該忽略一些參數檢查、兼容性之類的代碼,關注主幹部分,畫出時序圖或者狀態圖等等。
多動手 多思考 實踐出真理
https://github.com/forezp/banya
推薦閱讀:
※Android O DP3來了
※如何看待今天的小米還有小米3?
※[譯] 如何通過 ArrayMap 和 SparseArray 優化 Android App
※為什麼每次小米、魅族、華為等國產出高配、價格稍高的新機總有一群人再罵,他們是什麼心態?
※超級觸控(super touch)這個APP是否有效,是如何做到的?