對于一個有追求的程序員來說源碼必讀不可鉴吹,閱讀源碼是一件令人頭疼的事。閱讀別人的代碼遠(yuǎn)比自己寫代碼要難暑刃。Linus 是Linux的早期作者铲敛,一句影響深遠(yuǎn)的話是“Read The Fucking Source Code”,這句話既體現(xiàn)了閱讀源碼的重要性籽孙,也說明了閱讀源碼對于大牛來說也是一件令人頭疼的事烈评。閱讀源碼對于中級工程師尤為重要,通過代碼可以看作者的思想犯建。如果你源碼看多了讲冠,你就可以靈活應(yīng)用不同的途徑實(shí)現(xiàn)同一效果。對于一個中級Android開發(fā)者需要閱讀什么源碼适瓦,Android系統(tǒng)源碼竿开?第三方開源庫源碼?完整項(xiàng)目源碼玻熙?這些源碼學(xué)習(xí)價值都很大否彩,那我們應(yīng)該學(xué)習(xí)哪一個?首先我們要明白我們的目的:短時間提升我們編碼技能嗦随,希望在工作能體現(xiàn)出來列荔。從這個角度來看,閱讀android系統(tǒng)源碼的價值就不是很高枚尼。所以對于一個中級工程師來說贴浙,要把第三方開源庫和完整項(xiàng)目作為主要對象。下面我就講一下看第三方開源庫和完整項(xiàng)目源碼的一些方法和技巧署恍。
前期準(zhǔn)備:
如何高效的Read fuck source code崎溃,首先需要解決的是我們用什么工具看代碼,推薦使用Sublime Text看第三方開源庫锭汛,用Android studio看完整項(xiàng)目。第三方開源庫無須編譯袭蝗,直接看代碼唤殴,使用Sublime text代碼高亮整潔,看的很爽到腥。效果如下:
也許你剛開始不適應(yīng)朵逝,不要擔(dān)心,用不了幾天你就離不開它了乡范。那問題又來了配名,看代碼我習(xí)慣了這種高亮風(fēng)格啤咽,再也無法忍受Android studio默認(rèn)的黑白風(fēng)格了。沒關(guān)系渠脉,很簡單宇整,只要設(shè)置一下,Android studio就可以和Sublime text 達(dá)到同樣的效果芋膘。先來看看設(shè)置后的效果吧鳞青。
只需下載jar包,導(dǎo)入Android studio即可为朋。設(shè)置方式詳見README文件臂拓。
開始閱讀源碼:
如果你是一個閱讀源碼的新手,那我建議你首先找一些代碼量少的习寸,自己感興趣的來看胶惰。可以參考我之前寫過的一片文章2016年最值得學(xué)習(xí)的五大開源項(xiàng)目霞溪。
如何閱讀第三方開源庫
選擇一些當(dāng)下熱門孵滞、學(xué)習(xí)價值高的第三方開源庫,我認(rèn)為最值得學(xué)習(xí)的第三方開源庫是Volly威鹿,開源項(xiàng)目解析中也有對Volly的解析剃斧。
熱門的第三方開源庫,網(wǎng)上會有很多源碼解析文章忽你,首先在網(wǎng)上找一些源碼解析文章來看看幼东,不要忘記,我們的宗旨之一“高效”科雳,這樣就可以快速的對項(xiàng)目的整體框架有一個大體的了解根蟹,再去看源碼具體實(shí)現(xiàn)就很快了。這里很重要的一點(diǎn)是如何找一些有價值的學(xué)習(xí)資料糟秘,我們最常有的就是搜索引擎简逮,今天就主要說說為什么選擇Google,以后有機(jī)會再總結(jié)一下我是如何篩選尿赚、找到有價值的學(xué)習(xí)資料散庶。要想成為高級工程師,需要有個合理的知識收集凌净、分類方法悲龟,建立自己的知識體系。因?yàn)楫?dāng)今互聯(lián)網(wǎng)時代不是比你現(xiàn)在會多少東西冰寻,而是比的你能不能最短的時間把他搞懂须教,再經(jīng)過加工創(chuàng)新,就可以變成更好的東西斩芭。對于搜索引擎:Google>bing>baidu.其實(shí)我不想黑百度轻腺,因?yàn)槲液芟肴グ俣壤纸热滑F(xiàn)在還不是一名百度工程師,就說一下事實(shí)吧贬养。Google是把你想要的挤土,最有價值的東西呈現(xiàn)在你面前,并且他做到了煤蚌。Google會把符合搜索結(jié)果耕挨、點(diǎn)擊量最大的、最有價值的東西排在最前尉桩,所以你很輕松就會找到你想要的東西筒占,唯一足的地方就是大陸的訪問速度太慢(如果你上不了Google可以點(diǎn)這里)。bing和Google差不多蜘犁,想法一樣翰苫,但是和Google相比,bing搜索到的有價值結(jié)果不是很多这橙,沒有Google的理想奏窑,還有一些來著百度知道。百度呢屈扎,第一眼看到的是廣告埃唯,一些內(nèi)容來著百度知道,呈現(xiàn)的搜索結(jié)果不是按價值排序鹰晨,你需要自己慢慢找墨叛。我平時是Google和bing結(jié)合著用。
在閱讀的過程中總會遇到一些看不懂的代碼模蜡,你可以先放一放漠趁,繼續(xù)往下看。這樣反復(fù)幾遍忍疾,就會對代碼的理解不斷加深闯传。閱讀第三方開源庫主要是學(xué)習(xí)他的設(shè)計思想。
如何閱讀開源完整項(xiàng)目
毋庸置疑使用Android studio閱讀完整項(xiàng)目卤妒,高效甥绿。閱讀完整項(xiàng)目涉及的東西比較多,項(xiàng)目的架構(gòu)不同则披,使用的第三方庫不同共缕,這就要求需要對項(xiàng)目中不熟悉的東西進(jìn)行學(xué)習(xí),也不需要都弄懂了再去看項(xiàng)目收叶,邊看邊學(xué)骄呼,遇到不會的就去搜資料學(xué)習(xí)共苛,這樣最快了判没。
第一步下載項(xiàng)目蜓萄,在真機(jī)或虛擬機(jī)上運(yùn)行,最直觀的體驗(yàn)app的功能澄峰。然后熟悉app的架構(gòu)嫉沽,mvc、mvp俏竞、mvvm绸硕,目前項(xiàng)目中mvvp用的比較少。然后打開build.gradle文件看看項(xiàng)目用了哪些網(wǎng)絡(luò)請求庫魂毁、圖片加載庫玻佩、其他庫。如果有不熟悉的席楚,上網(wǎng)找一些文章學(xué)習(xí)一下咬崔。然后就打開manifasts文件找的入口activity,順藤摸瓜往下看烦秩。同樣垮斯,不懂的地方放過≈混簦看完一遍兜蠕,再進(jìn)行下一步,不要指望一遍就可以搞定抛寝。這里給大家推薦我的開源項(xiàng)目LookLook(Github地址:https://github.com/xinghongfei/LookLook):mvp架構(gòu)熊杨,RxJava + Retrofit+okhttp,glide墩剖。項(xiàng)目結(jié)構(gòu)清晰猴凹,代碼量不是很大,學(xué)習(xí)價值高岭皂。
看源代碼的大體思想:1郊霎、第一遍不要糾結(jié)于具體實(shí)現(xiàn),先把程序的整體框架流程搞清楚爷绘。2书劝、不需要從頭到尾看,可以跳著看土至,因?yàn)槌绦虮緛砭褪悄K化的购对。項(xiàng)目的選擇也很重要,代碼量由少到多陶因,功能由簡單到復(fù)雜骡苞,入門的項(xiàng)目就是android的官方Demo。方法基本也就這么個方法,剩下就是靜下心跟者自己的感覺走解幽,反復(fù)反復(fù)再反復(fù)贴见。
如果你的項(xiàng)目看多了之后你會發(fā)現(xiàn)每個項(xiàng)目可以分為以下幾個模塊:
1. UI(activity ,fragment)
2. adapter
3. 數(shù)據(jù)實(shí)體
4. 第三方開源庫的使用躲株,網(wǎng)絡(luò)片部、圖片、其他工具
5. 一些工具類
6. 項(xiàng)目配置類
7. 自定義View
8. 其他(數(shù)據(jù)庫霜定,activity档悠、fragment的基類,API等)
任何事情都可以熟能生巧望浩,在看了一些開源項(xiàng)目后辖所,自己最好開發(fā)一個∧サ拢看項(xiàng)目源碼是一個很費(fèi)腦子的事情奴烙,不能急于求成,我之前就有點(diǎn)著急剖张,看了很多項(xiàng)目切诀,高強(qiáng)度的進(jìn)行了20多天后,精力消耗很大搔弄,掉頭發(fā)很嚴(yán)重幅虑,大腦嚴(yán)重勞累過度,休息了一個星期才緩解過來顾犹。所以建議大家制定一個合理的學(xué)習(xí)時間倒庵,做好打持久戰(zhàn)的準(zhǔn)備,不要讓自己強(qiáng)度太大炫刷。最后的感覺就是擎宝,看似不可思議的事情,只要自己靜下心來浑玛,按部就班绍申,堅持下來,最后發(fā)現(xiàn)都不過如此嘛顾彰。
最后需要記住的是如果你被龐大的源碼打敗极阅,不是因?yàn)槟惚浚且驗(yàn)槟慵痹暾窍恚蚴悄氵x擇的項(xiàng)目不對筋搏。編程就像寫小說一樣,不僅要多看厕隧,還要多練奔脐《碇埽總有一天你也會成為一個優(yōu)秀的“作家”。
小伙伴們開始 趕快Read The Fucking Source Code 吧髓迎。
后記
針對小伙伴們普遍提出的問題——代碼看不下去栈源,說說我自己的看法。
1.要有決心竖般,要有一個成為高級工程師的決心。這一點(diǎn)誰也幫不了你茶鹃,完全靠自己涣雕。可以提前暢想一下成為高級工程師后的自己闭翩,挑女朋友挣郭、買HHKB,高清顯示屏疗韵,人工力學(xué)座椅兑障、降噪耳機(jī),漂亮的房子蕉汪、汽車流译、人生贏家......
2.循序漸進(jìn),任何事情需要一個過程者疤,由易到難福澡。很多小伙伴一開始不知道看什么開源項(xiàng)目,我這里給大家列順序驹马。第一階段android的官方Demo革砸,90%都不難,有一些技術(shù)我們不常用到糯累,可以直接略過算利。第二階段2016年最值得學(xué)習(xí)的五大開源項(xiàng)目,可以挑自己感興趣的看泳姐,也可以在完整項(xiàng)目(泡在網(wǎng)上的日子)找一些效拭。首先看項(xiàng)目src文件夾大小,在500kb以下都可以接受胖秒。第三階段第三方熱門開源庫允耿,Volly,Universal Image loader等。第四階段看自己感興趣的扒怖,融會貫通较锡,擴(kuò)充知識廣度,最好自己再做一個開源項(xiàng)目盗痒,放在Github上蚂蕴。第五個階段Android系統(tǒng)源碼低散,擴(kuò)充知識的深度和廣度,成為大牛骡楼。
3.計劃熔号,給自己設(shè)定一個計劃,一個自己想完成的計劃鸟整。如幾天之內(nèi)看完這個項(xiàng)目引镊。我一般會制定周計劃、月計劃篮条,這個月學(xué)些什么內(nèi)容弟头,這個星期學(xué)一些什么內(nèi)容,不需要太詳細(xì)涉茧,簡要的內(nèi)容就可以赴恨,我會把他以便簽的形式放在電腦桌面上。一個月下來伴栓,學(xué)的東西比計劃里的東西要多伦连,但是不一定會完成全部計劃,計劃可以作調(diào)整钳垮。
4.其他惑淳。根據(jù)自己的習(xí)慣選擇。我的習(xí)慣:編程前把手洗干凈饺窿,干凈整潔的桌面汛聚,一個舒服的椅子或靠墊護(hù)腰,累了再加點(diǎn)輕音樂短荐,不定期跑步倚舀、打球,每天傍晚一個人散步忍宋。對于我來說一個人去散步很重要痕貌,去不會碰就熟人的地方,可以專心致志想很多事情.....糠排。最后剩下的就是日復(fù)一日的堅持舵稠。
如果文章對您有幫助,歡迎準(zhǔn)高級工程師歡樂打賞....