二本渣渣學 Android 畢業=失業?

「同學,Android 沒人要了,快醒醒!」
「現在學Android,如同50年加入國軍」
「要不考慮考慮 flutter?」
「作爲一名 Android Developer 建議你搞 Java 後端,崗位多,技術到位吃飯不愁。」
「做爲 android 開發,現在轉 web 前端了,還學了些 php,android 市場現在真的不大,大城市需求少,小城市更沒有了。學 java 或者前端吧,找工作方便」

相信作爲一名Android開發者,很多人被上述流言蜚語困惑過。

零基礎怎麼學Android?
Android學習路線是怎樣的?
作爲一個Android初學者你有沒有這樣的疑惑和困擾呢?

如果有,趕緊來看看這篇最完整的Android學習路線,絕對讓你收穫滿滿!

android學習路線

初入android學習的小夥伴們都肯定有這樣的疑惑:
我應該從哪裏入手?
我應該學什麼?
我應該看哪些書?

其實任何學習都是分階段的,android學習也不例外,趕緊來看看下面是怎麼分階段學些的。

一、初級工程師

Android入門的時候,需要有一本入門書(或者****),好好學習書中的內容,同時花一年時間把Android官方文檔中的training和guide看一遍,同時通過寫博客和記筆記的方式來做總結,建議讓自己的每篇博客都有價值些。通過一年時間的學習,相信每個人都可以達到中級工程師的水平。

1、技術要求:

1)四大組件如何使用

2)如何創建Service

3)如何進行佈局

4)簡單的自定義View、動畫等常見技術

2、書籍推薦

《第一行代碼 Android》、《瘋狂Android》

二、中級工程師

1、技術要求

1)AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別;

2)Binder:從Java層大概理解Binder的工作原理,懂Parcel對象的使用;

3)多進程:熟練掌握多進程的運行機制,懂Messenger、Socket等;

4)事件分發:彈性滑動、滑動衝突等;

5)玩轉View:View的繪製原理、各種自定義View;

6)動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理;

7)懂性能優化、熟悉mat等工具

8)懂點常見的設計模式

2、學習方法

閱讀進階書籍,閱讀Android源碼,閱讀官方文檔並嘗試自己寫相關的技術文章,需要有一定技術深度和自我思考。在這個階段的學習過程中,有2個點是比較困擾大家的,一個是閱讀源碼,另一個是自定義View以及滑動衝突。

如何閱讀源碼呢?這是個頭疼的問題,但是源碼必須要讀。閱讀源碼的時候不要深入代碼細節不可自拔,要關注代碼的流程並儘量挖掘出對應用層開發有用的結論。另外仔細閱讀源碼中對一個類或者方法的註釋,在看不懂源碼時,源碼中的註釋可以幫你更好地瞭解源碼中的工作原理,這個過程雖然艱苦,但是別無他法。

如何玩轉自定義View呢?我的建議是不要通過學習自定義view而學習自定義view。爲什麼這麼說呢?因爲自定義view的種類太多了,各式各樣的絢麗的自定義效果,如何學的玩呢!我們要透過現象看本質,更多地去關注自定義view所需的知識點,這裏做如下總結:

搞懂view的滑動原理

搞懂如何實現彈性滑動

搞懂view的滑動衝突

搞懂view的measure、layout和draw

然後再學習幾個已有的自定義view的例子

最後就可以搞定自定義view了,所謂萬變不離其宗

大概再需要1-2年時間,即可達到高級工程師的技術水平。我個人認爲通過《Android開發藝術探索》和《Android羣英傳》可以縮短這個過程爲0.5-1年。注意,達到高級工程師的技術水平不代表就可以立刻成爲高級工程師(受機遇、是否跳槽的影響),但是技術達到了,成爲高級工程師只是很簡單的事。

2、書籍推薦

《Android開發藝術探索》、《Android羣英傳》

三、高級工程師

繼續加深理解」稍微深入的知識點「中所定義的內容

1)瞭解系統核心機制:

瞭解SystemServer的啓動過程

瞭解主線程的消息循環模型

瞭解AMS和PMS的工作原理

2)能夠回答問題」一個應用存在多少個Window?「

瞭解四大組件的大概工作流程

3)基本知識點的細節

Activity的啓動模式以及異常情況下不同Activity的表現

Service的onBind和onReBind的關聯

onServiceDisconnected(ComponentName className)和binderDied()的區別

AsyncTask在不同版本上的表現細節

線程池的細節和參數配置

4)熟悉設計模式,有架構意識學習方法

這個時候已經沒有太具體的學習方法了,無非就是看書、看源碼和做項目,平時多種總結,儘量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關於設計模式的學習,最近一本新書推薦給大家《Android 源碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android源碼中的設計思想。

2、書籍推薦

《Android開發藝術探索》、《Android 源碼設計模式解析與實戰》、《Android內核剖析》

延伸閱讀:Android工程師級別

一、見習工程師 實習生

1、掌握基本的Android應用開發和調試技能,瞭解Android SDK,會用Eclipse開發工具;

2、掌握基礎控件、UI佈局,能夠處理多分辨率適配;

3、具有較強的團隊協作精神及高度的責任心,會使用SVN等協同開發工具;

4、瞭解面向對象編程思想、瞭解MVC、瞭解JSON數據。

二、初級android工程師 菜鳥

1、計算機相關專業,全日制本科(統招)及以上學歷;

2、熟悉Android平臺下GUI設計和實現;

3、能夠熟練配置Android開發環境,有1年以上Android開發經驗;

4、具備紮實的java基礎;熟練掌握B/S、C/S開發,有實際項目經驗;

5、對數據結構、基本算法熟練掌握,並具備基本的算法設計能力;

6、優秀的文檔編寫和語言表達能力,良好的中英文閱讀水平;

7、必須具備良好的編程習慣;對待工作認真負責,有較強獨立解決問題的能力。

三、中級android工程師 大蝦

1、本科或以上學歷,計算機軟件相關專業;

2、2年以上android開發經驗

3、對各種系統版本和機器適配有充分的經驗

4、熟悉性能調優,崩潰處理

5、熟悉UI表現和用戶體驗

6、理解框架和背後的設計,而不是簡單的API堆砌

7、對UI控件有豐富經驗,包括自繪控件和動畫

8、紮實的編程功底,能享受編程樂趣

9、高效的學習能力和分析解決問題能力

四、高級android工程師 大牛/專家

1、本科或以上學歷,計算機軟件相關專業;

2、3年以上Android開發經驗,熟悉Android OS系統體系結構、framework層;

3、良好的Java技術功底,精通多線程、socket通信、文件操作等java底層技術;

4、精通Android的基本組件使用,熟練使用Android各種佈局與控件,熟練運用各種動畫特效;

5. 熟悉View的繪製原理,精通自定義動畫以及自定View的開發

6、有豐富的Android性能優化經驗,善於解決系統崩潰,內存溢出和兼容性問題;

7、熟悉JNI技術和代碼混淆

8、有單元測試、自動化測驗及相關框架經驗;

9、有良好的代碼習慣,要求結構清晰,命名規範,邏輯性強,代碼冗餘率低,代碼註釋清晰;

五、android架構師 大神/骨灰

1、精通Java 平臺開發,熟悉面向對象設計方法和常用設計模式;

2、精通Android 框架,深入瞭解底層服務、Binder IPC、SurfaceFlinger等技術;

3、精通Android UI佈局開發/Animation/OpenGL|ES/Multimedia 開發技術;

4、連續3年及以上Android應用開發工作經驗,其中單款產品的持續迭代時間不少於1年;

6、有豐富的軟件架構設計經驗,能快速搭建、調試或重構大規模軟件代碼,精通Java/C語言;

7、掌握JNI技術,能熟練使用Android SDK,能獨立進行應用程序開發和移植;

8、精通Android多線程,對HTTP/HTTPS/TCP/Socket等網絡通信協議有深刻理解和經驗;

9、有足夠的軟件安全意識,掌握數據加密、代碼混淆、防**、性能優化等技術;

以上就是關於最完整的android學習路線的介紹,希望大家都能晉升爲骨灰級的android架構師,哈哈哈哈……。

本文在開源項目:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄,裏面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…