如何成為 Android 開發高手?


我也來填個坑回答這個問題,很明顯我不是高手,也沒資歷,更沒有指導意義!,主要是有感於作為獨立開發者,有哪些可以分享的經驗?目前Admob月入$6k左右,勉強實現屌絲的財務自由!

在Android源碼上的摸索自認還欠缺火候,大家如果這方面要入門,可以看看我的這個回答

大牛們是怎麼閱讀 Android 系統源碼的?

這個答案僅僅限於Android 應用程序的開發,因為我是Google Play的Top Developer,勉強能夠以自己的經歷回答這個問題。

1.紮實的基礎,包含語言(Java,C++),演算法,計算機原理等。

我相信高樓大廈都是一沙一石一磚一瓦,大學時很少缺課,也積極學習新的技術,國內的大學教研水平參差不齊,老師很多也是敷衍了事,我覺得這都不是不學好基礎課程的借口。見過很多同事或朋友因為基礎不紮實而出現各種技術上提高的瓶頸,我覺得成為一個合格的開發者的首要條件是紮實的基礎,當然如果大家且參與工作了,可能時間都碎片化,擠擠時間,為自己補補基礎理論,這也會讓你的工作更得心應手。

2.Android介面的熟悉

對Android Api詮釋的最深刻莫過於於Google 寫的SDK Samples了,我開始進入Android開發,就是對照著Android開發文檔和Samples來理解的。這個可以分為兩個過程,一個過程快速了解全部或大部分的Api。一個過程為根據項目需要來深刻理解和運用某個方面的Api。

3.專一於某個方面的開發

我覺得這個對於Android源碼開發也是非常重要的,在龐大的Android源碼庫中熟悉其中某一個開源庫都是非常困難的,所以我給自己的要求是追求開發的深度而非廣度,一直以來全職工作也是局限於Android UI部分。

我覺得計算機發展到現在這個階段,任何一個方面都是成千上萬前輩們心血累計的結果,精通某一方面就需要付出極大的努力,而廣泛涉獵的結果只會讓你精力分散,很難深入!

因為工作大多是從事Android UI部分的,所以我更願意從事圖形相關的開發,開發了一些流暢的遊戲以及一個高效的Launcher(操作界面繪製到60fps)。嗯?當然工作還是業餘收入也還不錯!很多公司也願意招從事某方面的人。

4.熱愛

雖然這個比較籠統和精神化,這幾天和TSF的朋友聊下有感,熱愛技術和用戶是源動力。

就這樣吧!想到什麼就繼續填坑...


以下適合沒有開發經驗者,對於碼農不適用:

1、你得喜歡開發,強烈的感受到那種看到自己的代碼運行後得到你想要的結果後的那種幸福的感覺。(上c語言課程的時候,只要自己做過作業一般都能體驗到這種感覺吧)

2、找一本好的書。(怎麼找?上amazon看看用戶的review就差不多知道哪個適合你了)

拿到書之後循序漸進,不要跳躍閱讀(你還沒到這個程度),連前言都不要放過,一字一句的讀。裡面講到例子的時候,打開開發平台跟隨例子(不要copy代碼,而要一字一句的敲進去,感受語法和開發環境)

3、如果你看完一章後你發現很多東西不明白,請重新再看這章。(如果看了幾遍還不明白,請換一本書,這本書不適合你)

4、不要開始就嘗試看android的reference(還沒到時候,龐大的library會讓你迷失,進而失去學習的興趣)

5、一章一章的跟隨書本進行,完成所有的範例(如果有作業的話,一併完成),進行到全書的一半的時候,你應該掌握了初步的開發技能,對android的資源、api的應用也積累了一定的程度,這個時候可以嘗試超越書上的範疇。你花在查閱android文檔上面的時間應該越來越多,因為你內心洶湧著一種衝動:把書上提到的範例更佳完善化。Ok,你必須開始使用文檔,學習各種新的資源和api。

6、嘗試採用項目驅動法看書:打開新的一章,首先看看這一章的範例擬實現的功能是什麼,自己思考一下該如何實現,需要使用到哪些新的資源和api,通過查閱文檔嘗試獨立完成。無論最後完成到什麼程度,先把程序跑起來再說。之後再去閱讀這一章的內容,看看作者是怎麼做的,你的方法跟他的方法差別在哪裡。

7、在開始學習開發的時候,時刻保持著自己的學習動力是來自於內心的創造衝動。暫時別考慮什麼盈利模式和市場研究。在你寫出一個令你自己滿意的app之前,不用想著你可以靠這個賺多少錢。否則你會迷失在門口。(退一萬步說,即使你最終完成的作品並不能給你帶來金錢的收入,你在此過程中收穫的快樂也是你無法評估的)能否賺錢是另外一個話題了,因為那是一個市場運作問題,在你學習開發的過程中沒有必要過多去關心它。

8、第一本書完成學習後,可以再換幾本書看看(可以泛讀,了解不同的作者,不同的寫作風格中所給你帶來的新的觀念)

9、確立一個項目(我想每個嘗試學習一種新平台開發的人,在起始階段都會有一個模糊的項目),沒錯就是它,是時候獨立的實現它了。這是你第一個真正的項目,不要太龐大。把人機互動給初步建立起來就差不多了,然後有一個不錯的UI。這是你的第一個作品,完成之後可以給朋友體驗一下,從用戶的角度看看它的表現如何。

10、後面的路還很長,當你走到這一步的時候,相信你會自己規划了...


Stackoverflow上有一個關於如何學習android開發的詳細討論

參考:

http://stackoverflow.com/questions/475152/how-can-i-learn-android


我覺得Android開發上有三個層次技術:

1. 第一個層次和傳統的嵌入式Linux最接近,主要涉及的是CPU、GPU以及外設的驅動以及使能方面。多需要熟悉Linux內核,Android框架定義中驅動的介面規範等等,這部分開源社區的力量最大。這個層次技術主要需求方是是各種CPU和Android設備解決方案供應商。

2. 第二個層次主要是涉及Android框架中間件部分,如多媒體/3D框架,Java虛擬機等等,這部分Google控制的是最嚴格的,因為他要控制 Android各種feature以及捆綁自己的移動互聯網應用,必須規範中間件。這部分所涉及的軟體技術也最多,從各種C/C++庫,Java虛擬機性 能,用戶體驗抽象到資料庫設計等等很大的內涵。開發的一般也是選擇一個方向發力。另外深度定製Android ROM重點也是這個層次。

3. 第三個層次就是App開發層次,這個層次主要就是利用Android SDK開發了。很多C/C++出身的覺得是用Java開發,其實Java就是啥都是指針的C++,外帶try/catch以及垃圾收集,上手其實是很快的。Android程序最重要一點是理解生命周期概念,將一個Activity和Linux進程關係搞清楚,啥時候這個進程啟動,啥時候睡眠,啥時候退出,後台的事件循環如何運行的,最後時刻要提醒自己虛擬機在運行,垃圾收集在運行。Google Code上有還多參考代碼,在看中學,體會很快的。

另外,本人採用了一種特別的模式來進行Android程序開發:Java只負責界面,用NDK來做各種複雜的業務和數據處理,Java與NDK之間設計好API以及事件傳遞方式(Android SDK 中Localsocket就可以很好用做事件發送)。這種方式適合C/C++背景的開發人員上手Android,Java無需達到熟練即可。


Android學習之路 這個也許對你有幫助


多看看別人寫的代碼,理解,思考。我是剛入行的android程序員,大家一起加油吧!


多練唄,還有什麼好辦法?技術活,還是那句話,熟能生巧。說實話我覺得現在的編程和修自行車沒多大區別。


首先你得清楚你的高手的定位——是底層硬體呢,還是應用層的軟體?想成為全才幾乎不現實,如果鑽研底層的話,可以研究C/C++,至少得會搞個ROM出來,這樣才能配的上高手;如果專註於APP,那麼得把Java搞透了,然後伺服器端開發也要通曉,畢竟現在的一流移動應用幾乎都得與伺服器通信...


根據近期面試Android高工的經歷與自己越來越廣的經歷再次對答案進行補充(由於答案範圍其實可以扯的很遠,以下答案就只涉及到技術知識點層面)。

首先上一張Android架構圖(面試有很大幾率被問,不熟悉的趁這機會趕緊補補~)

從Android架構得出我們必須要掌握的知識點:

1、Linux知識(Android是基於Linux內核的,編譯Android源碼也必須在Linux上,所以必須掌握Linux的基礎知識(操作區別、簡單指令、進程等),可以裝個VM虛擬機沒事玩玩)

2、C/C++知識(Android大部分核心庫是C/C++的動態鏈接庫,系統大部分隱藏API都是在這裡面的,而且你看哪條面試中沒寫要求熟悉NDK(Java+C/C++形式)開發,所以必須熟悉C/C++知識,C語言看譚浩強的《C語言程序設計》就可以,NDK推薦看《Android C++高級編程》一書,剛出的)

3、Java知識(Android是80%的Java package,IDE和語言都是Java,沒理由不具備精通級的Java知識(尤其是多線程、I/O流、面向對象思想、http和socket網路等,面試必問題),Java的進階書書大家都知道就不再提了)

4、T-SQL知識(可以只是基礎的增刪改查和子查詢)

其他做為高工要掌握的知識:

1、數據結構(基礎)

2、設計模式(推薦看《大話設計模式》,然後再帶入Android API看設計模式在Android中的應用)

3、Web開發語言+Html+JS(推薦php和jsp,做到最後怎麼著都得熟悉一門Web開發語言)

以上皆是知識點,以下是我認為可以有的一些點:

1、GitHub(這簡直就是擺在那裡的財富,各種你需要的Android的例子上面都有,只是你必須要學會去搜索)

2、Android ROM(想想自己做一個專屬的ROM屌不屌)

3、afinl、thinkandroid等各種Android開源快速開發框架(要是能參與開源項目就離大牛不遠了)

4、iOS開發(我是很羨慕人家用蘋果機我用win7系統的)

5、各種Android開發論壇(學習最快的形式是交流和傳授)

如覺得還有技術方面提升的地方再補充!


我覺得首先要有Java的基礎,大概把Java se方面入門了就差不多(Java推薦馬士兵的視頻)。然後是學習android的基本知識,像android四大組件啊,各種控制項(這裡推薦mars的視頻)。做了以上兩步,你應該對安卓有個大概了解。那麼,你可以真正開始安卓開發學習了——在網上找各種源碼,先看看應用的實現,自己嘗試著實現一遍,有不懂的地方馬上補,最後看看別人是怎麼寫的。


這個問題太難回答了,不過我可以說說我的看法。

1. android是基於linux,所以要熟悉linux系統,特別是嵌入式linux系統

2. android平台的程序都是通過Java語言開發的,所以要熟悉java語言

3. android系統級的程序或者底層調用NDK開發,需要用到C/C++

4. 大多數android應用都是客戶端應用,所以對UI的設計及界面開發也要有足夠的了解。

5. 高手有很多種,比如做ROM、開發系統應用、一般的WEB手機端應用、Android遊戲。。。


看源碼。。。自從down了android源碼後。api都手冊完全不需要了。。。任何手冊都是基於源碼而來的。但有些方法的描述很無厘頭。還是自己看邏輯去理解比較靠譜


入手Android 應用app開發快半年,感覺一直都在摸索,感覺還沒有入門,需要學習的東西太多了:

1. java語言

2. android ui設計和app交互設計,頁面布局,動畫效果

3. android 後台服務

等等等等

像樓上周昌說的, 第三個層次就是App開發層次。

移動互聯網節奏非常快,好多東西都是現學現做,建議從開源項目入手,推薦幾個開源客戶端:

飯否Android客戶端/foursquare開源客戶端,學習多線程、http、mvc設計模式

beem客戶端:學習xmpp協議,後台服務與Activity之間的通信。

摸透這些客戶端的精華之後,做一般的app應用就沒有太多問題了。難點還是在交互設計上


之前做過一些嵌入式linux的東西,在轉向android之後,我覺得比較適合我的就是做ndk這一塊。開發的層面很多,前面的前輩說的也很詳細,我覺得還是要結合實際,從一點出發,專註一個層面的學習,不要怕。


用步步高的一句廣告詞,「哪裡不會點哪裡」。

理論再深,抱著書本比劃再熟練,都沒有親身實踐一下好得多。

Linux的內核,C/C++的底層,Java虛擬機作為頂層開發語言……這些東西當然很重要,但更重要的是自己的探索。如同在Android上的一個小小的點擊操作一樣,哪裡不會點哪裡。點准,點深。


無他,唯手熟爾


首先選擇方向:底層、應用、遊戲?如果沒有基礎的,就乖乖的開始學習基礎知識,從CoreJava到Android基礎,然後再用實例去練習簡單的demo,進而複雜的demo,最後相對有選擇性的學習,比如遊戲,學一些框架,應用的話就多學一些和server端交互的知識,底層的話還得學C


路只有一條,積累 Android 項目開發經驗,多做總結,經常接觸一下 Android 最新的開發技術。


如果實在不知道如何學習,那麼可以有的放矢式的學習android。

因為大多數人學習android就是為了找一份工作,你倒不妨去招聘網站上去看看招聘android開發人員,都需要具備哪些技能,現在的社會就是要改變自己去適應社會,這樣你才有機會,而不是等著工作的機會自己找上門。

就拿我個人來說,剛開始學習android開發也是沒有頭緒,剛開始工作的才4K,後來自己不斷改變自己去適應社會,不到2年的時間,我的薪水已經12K了。

還有一個就是項目經驗,多做項目,對android的理解也就水到渠成了。


在任何一個領域,如果你想成為高手,都必須要有1萬小時的訓練時間以上。在編程領域,通常的指標是編碼10萬行。如果再精細到android,你需要能對其中某一特定的模塊有深入了解,例如多媒體,無線通信或者framework.


推薦閱讀:

sdk manager更新失敗,顯示Download interrupted: read timed out,應該如何解決?
Vivo Xplay5要配備6G內存。Android系統真的需要這麼大的內存嗎?
達到什麼技術水平的 Android 或 iOS 開發者算高手?
「安卓(Android)被曝植入稜鏡代碼」可信度如何?如果是真的,這段代碼能做什麼?
Android 中開關和複選框的區別是什麼?

TAG:Android開發 | Android | 科學 |