深刻淺出安卓,怎樣從零學好移動開發

由於近幾年來互聯網的飛速發展,安卓和iOS平臺的大量普及推廣。移動開發在當前是很熱門的一個方向。html

有很多同窗問我怎樣學習安卓。要學些什麼,難不難學。以前一直沒有想好應該怎麼回答這個問題,僅僅是簡單的說安卓自身門檻不高。並不難學。因爲我認爲準確回答一個相似這種問題每每需要靈感。現在依據個人學習體驗,作個大概的總結。面試

一、我爲何學安卓

我從剛開始接觸安卓開發到現在也有兩三年的時間了,本來我是打算作硬件方向的。對安卓僅僅是感興趣。全然沒有考慮過工做的問題。算法

後來慢慢感覺到硬件難度偏大,成就感比較低,也不太想作那種技術性很是強的東西。純技術思惟,基本不是必需和大衆用戶交流,因爲嵌入式、硬件方面通常都是比較底層的。直接用戶仍是技術人員。數據庫

我的感受長期這樣easy減小情商,做爲一個情商原本就偏低的技術宅,與非技術人員交流會更加困難(致使找對象都比較困難)。編程

因而後來慢慢改爲了安卓開發。安卓屬於大衆型產品,很是多時候需要從大衆用戶的角度去考慮問題,技術性相對弱化了。設計模式

前段時間面試,順利的進了美團的安卓研發崗位。安全

我之因此學安卓,也是因爲碰巧大一時學校有一門安卓選修課,就去學了下。有打算轉作iOS,主要是iOS開發條件比較高,最好要蘋果筆記本和蘋果設備,還有每一年100美圓的開發人員帳號(儘管可以用所謂的黑蘋果,但是聽說開發起來easy出現故障);加上以前一直沒時間,因此也還沒開始去學。微信

二、安卓要學些什麼。難度怎樣(重要)

在我看來安卓開發有兩層意思,第一層意思就是安卓自身的開發知識。而第二層意思是安卓、移動應用乃至各類軟件開發的編程思想。這二者的關係,就像文字和寫做的關係同樣。網絡

小學的時候咱們就在學習識字寫字。要說這件事難不難,顯然僅僅要肯花時間就不那麼難。畢竟咱們小時候都是這麼過來的,你能看懂我寫的這個,說明你也是認識字的。數據結構

咱們識字的目的是幹什麼呢?目的是看懂別人寫的東西,以及本身寫東西表達想法傳達給別人。會識字而沒有太多思想的人。寫不出來好文章;而有思想的人,不需要學會很是多漢字就能寫出不錯的文章,還可以隨時查字典。

相同,我認爲安卓學習也是如此。

2.1 安卓自身開發知識

第一層含義,安卓自身開發知識。僅僅要肯花時間,理解力略微好一些的人都能學會。

安卓開發首先最好有Java基礎,沒學過可以先簡單的去學習一下。

推薦兩本書《Head First Java》和《Java編程思想》(英文名《Thinking in Java》)。Head First系列的書,特色是簡單好懂,適合入門(最好有其它語言編程的基礎),但解說不是很是深刻。對於理解力夠強的人。看起來比較費時間。然後者是Java語言公認的權威經典書籍,假設想全面的學習Java。可以看後面這本書,但是難度偏大,尤爲是對於沒有學習過面向對象編程語言的人來講。

安卓開發自己的技術知識,無非就是各類封裝好的API接口函數(API=Application Programming Interface 應用程序編程接口),你僅僅要依照它的規則去調用便可了。安卓的接口有官方給出的完整說明文檔,安裝了安卓開發包後。也有自帶docs目錄,裏面就是說明文檔。

對於英文水平欠缺的人可能略微有點難度,另外,由於谷歌訪問不了,網頁版的說明文檔有些可能會打不開。假設你不想本身看官方英文文檔,你可以直接買本安卓開發的書,或者在網上找安卓學習資料。

這些資料也是別人依據官方文檔和本身學習經驗總結出來的。有時候假設需要用到一些別人很是少用到的東西,或者網上說的比較含糊,這時官方文檔是最權威、準確的參考資料。

2.2 安卓項目實戰

第一層意思很是easy掌握,也就是安卓開發的基礎知識,至關於學習怎麼識字和寫字。而第二層含義,安卓項目的實際開發。難度就要大一些了。

有些人一生就那麼過去了。歷來很是少思考複雜的問題,也沒有什麼思想。

而寫做是需要靈感和思想的,僅僅是會寫字,寫不出來好的文章。相同的道理。有些人學安卓,僅僅是掌握了主要的API,卻怎麼也寫不出好的程序來。

而後他們不知道應該怎麼作,但是又不甘落後,索性把iOS開發、Windows開發,各類程序API都學一遍。而始終僅僅能作出來一些很是easy的東西。

現在問題來了,編程究竟需要學習哪些思想呢?應該怎麼學呢?這裏的編程思想,並不是專門針對安卓而言,而是針對所有軟件開發而言。找工做的時候。你會發現。有些公司的軟件研發崗位命名招聘的是iOS。但是並不必定要求掌握iOS,有安卓、Windows或其它上層軟件開發經驗也可以。這就是因爲,僅僅要從一種編程語言、一種開發環境學到了軟件編程思想,再去學其它環境和語言下的編程就easy得多。

2.3 理論和project

軟件分爲兩部分。理論和project。

理論方面。國內的發展不是很是好。

比方人臉識別的程序。需要用到一些數學理論模型,並以此作出算法來解決這個問題。在一些有實力的公司。會有這種理論研究部門。最典型的像蘋果、谷歌、微軟這種巨頭,研究天然語言處理、圖像處理、大數據分析、人工智能等等諸多問題。蘋果的Siri。谷歌的安卓內置的語音識別引擎。微軟小冰等等。而在國內。百度的搜索引擎對天然語言的處理、科大訊飛的中英文語音處理方案等,也都是需要大量的理論知識。

因爲理論研究很是大的一個特色是不肯定性。很是可能研究了很是久也沒有成果。而實力不足的公司很是難有這種資源進行理論研究,因此在國內主要是有實力的大公司,以及國家提供經費的研究所、一些大學的實驗室,才幹有條件進行這方面的深刻研究了(順便提一句,也正是因爲這種不肯定性,國內學術腐敗比較嚴重,各類抄襲,另外即便研究不出來成果也有經費)。

一般假設一個公司軟件的研發需要用到深厚的理論。會專門給這個設置一些崗位。比方算法project師、圖像算法project師等。而安卓研發、iOS開發這類。則更偏向於project應用。固然有時候。也會涉及到一些簡單的算法問題,那些更像是小學奧數題。關鍵看解決這個問題的思路是否靈活。每每不需要很是強的理論知識。好比我在網上看到一道歷年的百度筆試題:百度地圖其中,每個地點的左側或右側需要放置地名,地名的文字是矩形區域;設計一個算法,使得儘量多的顯示地名,同一時候要考慮地圖的縮放。這個問題沒有什麼標準答案,出題者也許也想知道最好的答案;而實際實現時,就要看有沒有足夠聰明的程序猿,能給出一個儘量好的方法了。

project的特色就是把理論應用到實際上來,而且要考慮到開發成本、時間、安全性等實際問題。

專門研究這些project的東西組成了《軟件project》的學科,但是僅僅有軟件相關學院纔會去上這樣的課程。而且這樣的課程太抽象了,理論性太強,每每忽視了實踐的環節。

2.4 軟件project的重要思想:模塊化和代碼複用

軟件project思想有很是多,模塊化、代碼複用是當中很是基本、很是重要的編程思想。所謂模塊化,就是把一個完整的東西拆分紅很是多個小的模塊,每個模塊完畢必定的功能,分工協做,而後依照合適的規則則合成一個完整的系統。拿整我的類社會來講,每個人都需要衣食住行,但是實際上,有的人專門從事服裝製造,有的人專門作食品,有的人負責建築……最後整我的類社會分工協做,效率大大提升,構成一個整體。拿計算機來講。咱們的電腦由主板、內存、硬盤、屏幕、各類外設組成,每個模塊被獨立設計製造出來。並且僅僅要接口吻合,可以任意進行組合。買電腦的時候我不必定需要內置藍牙模塊。但是在需要用的時候。我可以很是輕鬆的買一個USB藍牙模塊裝在電腦上。

嫌內存過小,我也可以本身給電腦換內存,而不需要更換整個電腦。

程序也是這種,我可以寫一個模塊專門用於網絡鏈接的相關控制。之後不管作什麼應用,僅僅要用到網絡,直接把這個模塊放進去調用。積累的模塊多了,後面就能像搭積木同樣搭建很多的代碼。大大減輕了程序開發的負擔,提升了效率,節省了成本。

而模塊化開發也有利於分工合做。一個龐大的程序一我的不必定能作完,比方咱們用的Windows操做系統,代碼量可能達到幾千萬行甚至不少其它。這時候就需要很是多人共同完畢。

每個人或一個小團隊完畢一個小的模塊,並且不一樣的模塊之間規定好接口,而後同一時候進行開發。模塊化編程實現了代碼複用、提升了開發效率、有利於分工協做。等等長處。是軟件開發的核心思想之中的一個。

爲了實現模塊化,不一樣的模塊之間要儘量減少耦合度。也就是說。一個模塊對於外部至關於一個黑盒子。咱們僅僅能看到對外的接口,而模塊內部的詳細實現,與其它模塊之間的關聯應該儘量小。

這樣在改動一個模塊的時候,僅僅要保持接口不變,對於整個軟件來講就沒有影響。

2.5 軟件研發相關的學科知識

軟件開發需要的一些公共的知識,也是面試經常會問的學科知識有《數據結構和基本算法》《數據庫》《操做系統》《計算機網絡》《設計模式》等。

首先《數據結構和基本算法》差點兒是所有軟件相關技術崗位必會的。數據結構可以簡單理解成數據是怎樣進行組織並保存在電腦的內存中的,而基本算法則是研究怎樣高效的對這些數據進行讀取和處理。比方查找、排序,比較考驗智商。

數據結構和算法本來是兩種知識,但是由於他們之間的關係很是密切。因此這二者常會做爲一個學科。一塊兒學習。一般假設你從事軟件研發。要求掌握基本算法就可以了。也就是數據結構課程中介紹的算法。

假設你的算法更強,可以考慮專門從事算法研究,那也很是不錯(假設算法學的很是好,可以去谷歌總部,順便就出國了)。數據結構推薦書籍《大話數據結構》。

《操做系統》看上去彷佛和應用軟件沒有密切聯繫。但是有很是多時候,軟件設計需要用到多線程等知識,這個時候,對操做系統的原理有所瞭解,會作的更好。

畢竟應用軟件是執行在操做系統之上的。

《計算機網絡》在應用軟件中使用很是普遍,咱們用的大多數應用都需要用到網絡,因此這門課一定是很是重要的。推薦書籍《現代操做系統》、《計算機網絡》。

所謂《數據庫》,就是最常用的一種數據的保存手段。咱們用QQ給被人發送消息,一條一條的消息並不是簡單的用文本文件保存在手機裏的,而是經過數據庫進行保存的。

對於應用軟件開發來講。咱們所要學習的是數據庫的使用。通常不需要深刻了解數據庫的實現原理,因此學起來不會太難。數據庫最常用的是SQL和SQLite,二者語法很是接近。SQL語言號稱是第四代編程語言,而C語言這樣的是第三代,越是上層的語言越接近天然語言。因此SQL語法也很是好理解。有些時候用到一些不太好理解的語句,主要是因爲語句包括的邏輯比較難理解。倒不是SQL自身的問題。

舉個樣例,在一個表格mytable裏保存了全班學生的信息。有number和name兩列分別表示學號和名字。

這時我想知道小明同窗的學號。我僅僅需要用如下的語句選擇他的學號就可以了,差點兒和英語同樣:

SELECT number FROM mytable WHERE name='小明';

編程有很是多優化思想,除了提升開發效率、分工協做。還會考慮到安全問題等。這些編程思想的大量研究,人們積累了很是多技巧,《設計模式》這一課程就是對一些使用頻繁、通過了很是多人考驗、並且很是有借鑑價值的程序設計思想進行的總結。

而設計模式的精髓並不只僅是照搬那些模式,不少其它的是曾經人的經驗積累做爲靈感和素材,依據實際需求,創造出不少其它好的編程技巧和思想。

推薦書籍:《設計模式》(機械工業出版社)。《Head First Design Patterns》(中文名《深刻淺出設計模式》)。《大話設計模式》。

2.6 移動開發獨有的特色

除了上面這些之外,移動應用開發與傳統桌面應用開發相比,另外一些特別的東西。移動開發。也就是針對移動平臺進行的應用開發,手機、平板等產品。受限於有限的屏幕、CPU速度、內存、電源供應、可以隨便移動、網絡費用可能比較高等特色,移動開發就有一些比較值得注意的東西了。移動應用的界面應該簡潔、方便。button文字等設置的大一些。方便操做。充分利用手勢進行操做。還有針對安卓和iOS等不一樣平臺進行優化,符合用戶使用習慣(好比安卓有返回鍵。但是iOS沒有)。而後在程序的數據處理方面,要充分考慮移動設備自身性能。進行各類調整。這類的問題有很是多。假設需要深刻了解,可以看一些相關的書籍。

2.7 安卓開發可能用到的知識,或研究方向

在Facebook等一些公司。流行一種概念,叫作全棧project師。所謂全棧project師。說的直白一點,就是一我的獨立完畢整個項目,包含client開發、前臺網頁設計、後臺server搭建等。

這對於project師的要求很高,不只要知識面廣,而且各個方面的學習都得有必定的深度。

這裏我不打算討論什麼全棧project師,我本身對server那些也沒什麼概念。我僅僅是依據本身的經驗和了解,總結下我所以爲的、安卓開發還有可能要涉及的知識。

首先是平面設計、交互設計、用戶體驗。

移動應用做爲大衆型產品,用戶體驗至關重要。

假設有過個同類產品,功能接近。用戶確定更喜歡用戶體驗更好的產品。用戶界面需要用到設計方面的知識。固然在大部分公司,一般會有專門的交互設計相關職位。因此對於應用開發人員來講,設計方面不需要掌握的太深刻,作一點簡單瞭解固然是沒錯的。

而後上面已經說了很是多軟件project方面的問題,數據結構、設計模式、操做系統、計算機網絡等等。再也不反覆。

安卓NDK環境和JNI開發。

安卓基於Linux操做系統。主要由Java編程。但是有些時候需要用到C++。好比核心代碼需要保密,而Java保密性有所欠缺;有些程序僅僅有C++環境才幹實現;要用到一些高性能的算法等的支持,而Java運行效率偏低。這是咱們可以使用Java的JNI,調用C++開發的程序庫完畢功能。

C++的開發基本上就和在Linux上編程幾乎相同,差異在於安卓系統中有必定的權限限制。而安卓NDK就是官方給出的、用於高速開發安卓JNI程序的開發環境。

安卓系統的實現、系統級開發。

安卓系統有個很是大的特色是開源免費,所以咱們很是easy就能獲取安卓系統的源代碼進行學習。瞭解安卓系統的設計。瞭解安卓系統設計,後來咱們就可以從事偏底層的安卓開發。系統訂製。乃至安卓驅動開發、操做系統開發方面的工做。安卓是個優秀的操做系統(好比小米手機系統就進行了深度訂製)。

遊戲開發。移動遊戲眼下是很是火的行業,很是多公司從遊戲產品中得到了大量的收入,遊戲開發天然是一個不錯的選擇。大型3D遊戲每每會使用各類遊戲引擎來進行開發。由於我眼下差點兒沒有作過安卓遊戲,因此也沒有太多的瞭解。不作過多討論了。

另外還有server方面的研發。咱們手機上必備的軟件有QQ、微信、支付寶等。這些軟件很是重要的特色,不是在於軟件自身,而是因爲強大的後臺網絡服務支持。因而server方面的研發也不錯,只是這已經不直接屬於安卓應用開發的範疇了。另外還有推廣運營、管理等。和安卓開發有直接關聯,我並不太瞭解。也不作過多討論。

總體來講。學會安卓門檻很是低;但是學好安卓絕非易事。

三、安卓學習方法和技巧

3.1 總體學習思想

回到一開始文字和文章的類比上來。咱們大部分人兩三歲的時候就能學會用漢語說話,小學的時候就能認識很是多漢字。但是爲何學英語彷佛比漢語難很是多呢?至少從初中就開始學英語,各類語法、單詞,一直到大學,考四六級。直到大學畢業,很是多人的英語仍是遠不如小學畢業時的漢語水平。

我也是當中之中的一個。大學不只沒進步,反而曾經學的單詞都快忘記了。

緣由很是easy,缺少實踐。咱們學習語言的目的是爲了應用。但是在大部分人的生活環境中,根本沒有太多需要用英語來交流的地方,而後天然連單詞也慢慢忘了。假設咱們想寫文章。沒有好的想法。可以多去看看別人的文章和書籍學習學習。而有一些我的的想法,僅僅需掌握主要的文字,就可以寫了。

遇到不會寫的字。翻翻字典就行了,不是必需把各類生僻字都記住。同樣能寫出好文章。而背單詞,死記硬背記不牢;多練習多實踐,不熟悉的東西也慢慢熟悉。天然記住了。

另外實踐多了,咱們還能積累很是多好的句子,比方各類詩詞之類,寫做時就可以充分利用。

相同的道理,安卓的學習,首先是應該知道最主要的一些東西。

咱們可以大體的看一本安卓入門的書籍,依照書上說明,搭建開發環境,把常見的基本接口簡單的實踐一下,有個整體瞭解(認識常用字)。而後咱們就可以實際運用了,也就是作項目(寫做文)。

遇到問題。咱們需要本身多動腦思考,多在網上找解決方法。實在解決不了再考慮請教別人(查字典)。

假設對編程的思想掌握起來比較吃力,可以去看看網上的一些開源程序源代碼(看別人的文章)。長此以往,不只對常見的API有了瞭解,也慢慢學會了編程的思想和技巧(本身會寫文章了)。

編程時。要注意模塊化,把常用的一些本身寫好的模塊封裝起來。作好凝視。以便之後使用(好詞好句記錄)。另外,學習的東西記得及時作一些筆記和總結,假設整理的比較好,也可以發表到網上。對別人也許也會有幫助(作筆記和分享)。

軟件開發還有個很是重要的過程就是程序的調試。在安卓中,由於用的是Java,程序調試手段很是多,也很是方便。

安卓提供了一個Log接口。可以在關鍵的地方打印日誌,而後在Eclipse的LogCat窗體中查看,對於程序調試會有很是大幫助。

Java應用在執行出錯時。能直接顯示出錯的代碼位置和錯誤類型,也是在LogCat窗體中顯示,而後就很是easy找到錯誤的緣由所在了。

安卓開發時,可以電腦鏈接手機在線調試,設置斷點,查看變量的值、執行的進程和線程、內存消耗、文件等信息。詳細方法請自行搜索。

3.2 基本知識學習

說的詳細一點,安卓學習的過程大體是這種。

首先是搭建開發環境,通常用Java+Eclipse+ADT插件+Android SDK,也可以用Android Studio,詳細方法網上有很是多參考資料。開發環境中集成了安卓虛擬機,假設你沒有安卓設備,可以在虛擬機上執行程序。但是速度較慢,不支持一些傳感器等硬件設備;假設有安卓設備。最好在實際設備上執行程序。

而後是掌握安卓四大組件。尤爲是Activity和Service及其生命週期(BroadcastReceiver和ContentProvider可以後面再學)。Intent實現界面的跳轉。Menu菜單。而後是安卓的常用控件、XML佈局(Layout)等。這些是安卓最基礎的東西,可以經過編寫Demo程序的形式去學習。

網上有個文檔《深刻淺出Google Android》。裏面就經過一個簡單的安卓程序實例。介紹了這些知識。

3.3 進一步學習

到此安卓最主要的基本API就算是學習完畢了。

而後還有SQLite數據庫、各類傳感器、動畫控制、多媒體、網絡通訊、GPS定位、電源管理等API。這些API可以先僅僅做簡單瞭解,直接去寫實際項目。你可以試着寫一些簡單應用。好比計算器、音樂播放器、小遊戲。或者你所感興趣的簡單應用(一開始難度不要太大)。需要用到的API再去具體的學習,逐步鍛鍊編程能力。代碼要規範,儘量符合Java命名標準,程序代碼儘量寫成模塊化的。提升代碼複用。

記住,完畢相同的功能。在保證程序結構清晰、模塊化、規範化的基礎上。代碼量越少越好。

3.4 深刻學習,並開發高質量應用

而再到後來。你可能需要更深刻的去學習安卓,這個時候可能需要了解一些安卓系統Java層的源代碼(安卓底層用的C和C++,上層開發包中API用Java編寫)。可以在網上下載到,而後在Eclipse中設置關聯源代碼。需要查看源代碼時。直接用Eclipse轉到函數定義。就能看到安卓系統的Java層源代碼了。另外你可能需要學習《操做系統》《設計模式》《軟件project》等前面提到的課程知識,加深對軟件開發相關知識的理解。

比方你可以本身獨立完畢或者與別人合做作一些項目。可能涉及到多線程、大量數據的處理、JNI的使用、本身定義控件和界面佈局,識別特殊的用戶手勢,遊戲引擎等等(可以參考網上的開源項目。以及平時咱們用到的各類手機應用)。

個人建議是。後期作安卓應用的時候。直接作功能完整的應用,並且要通過重複測試調整;尤爲是要注重用戶體驗。還有程序的規範性、穩定可靠性(好比Java中空指針的推斷、try...catch的使用、線程通訊等)。這樣才幹很是好的學習移動開發的精髓。假設你僅僅是爲了學習那些API,作出來一些體驗很是很差的Demo級別應用,僅僅能說是學會了安卓,卻沒有學好。

也許你會認爲有些應用功能很easy,要不了多少時間就能作好,實際上遠不是那麼簡單。一個優秀的安卓應用,不只用戶界面和體驗很好,而且程序規範、穩定可靠、運行效率高。可擴展性強,想作到這一點。很的不easy。一個優秀的商業安卓應用。基本的代碼實現階段。可能僅僅佔了整個應用開發時間的1/3甚至更少。在開發以前,有很多的時間是在進行應用的策劃安排;而在開發完以後。又需要大量的時間,相應用進行重複的測試調整更新,最後才幹被公佈,從而安裝到咱們的手機上。

這裏順便一提,安卓應用開發相比iOS的一個難點來自安卓系統碎片化問題。安卓系統是開源免費的。這是一大優點,也所以對很是多國產和國外手機制造商帶來了很是大的優勢(假設沒有安卓。很是多手機廠商恐怕都深陷危機之中了。也許移動互聯網也不會發展的這麼快。不知道現在是否是iOS要稱霸天下。或者WP大受歡迎,又或者塞班還會屹立不倒)。

但是安卓的這樣的特色,致使同一款安卓應用至少要同一時候兼容各類主流手機型號。各類配置,各類屏幕尺寸,各類系統環境。而這也是迄今爲止安卓開發人員心中永遠的痛(╯﹏╰)。

四、附上個人學習經歷和部分做品

這裏簡介下個人安卓學習經歷。假設讀者能從中獲得一些啓示那最好只是了。

4.1 初學安卓

當初學單片機的時候。編程至少是底層到C語言,有時甚至是彙編指令。而後再究竟層寄存器、數字電路、模擬電路的理解,差點兒所有的東西都得本身實現。所以一開始接觸Java和安卓。我很是不習慣抽象的上層編程,總感受那些封裝好的函數調用很是難理解,因爲不知道那些函數作了些什麼。只是後來慢慢就習慣了。並且愈來愈感受到Java這種上層語言很是高效好用。

我是從大一下學期開始上選修課學習安卓的。

當時僅僅瞭解C語言,Java並不瞭解,而安卓主要是由Java開發。Java代碼尤爲是像接口之類,對於沒有學習過面向對象編程語言的人來講不太好理解。

比方我當時就一直記不住這種代碼。認爲函數裏面又有函數真心很是奇妙:

button_ok.setOnClickListener(new OnClickListener() {
void onClick(View v) {
// ...
}
});

只是現在熟悉了Java之後,這樣的代碼再常見只是了,內部的newkeyword在括號裏實例化了匿名的接口類實例,並對其抽象方法進行了實現。

當時上選修課個人感受就是全然聽不懂。依照一向的做風。我沒有認真的去聽課,而是跟着老師的課程節奏。搭建環境,借了參考書,而後上網找資料。本身學。上課給我帶來的優勢是學習氛圍。還有主要的學習方向。爲了交大做業。我用一週的時間作了一個拼圖遊戲。在當時應該是所有上選修課的人中作的很是好的,拿到了95分的高分。

只是在現在看來。那個簡單的應用僅僅能說是能用,而應用的質量過低,不是因爲功能太簡單沒有新意。而是用戶體驗很差,兼容性也太差。

4.2 參加谷歌安卓大賽

大一暑假爲了參加谷歌大學生安卓大賽(詳情百度一下就能找到),借了一本安卓書。花了幾乎相同兩個月的時間,差點兒天天從早到晚。一邊看書一邊上網找資料一邊寫代碼。

最後作了一個安卓多媒體備忘錄應用GoodMemo,得到了谷歌安卓大賽西北賽區優秀獎。當時這個程序算是讓我學會了安卓中的各類基本API,同一時候學到了很是多編程思想方面的東西(對於我來講,當時很是多東西是靠本身想出來的。過程比較慢,但是鍛鍊效果很是好;固然你可以去參考《設計模式》之類的書籍,或者看網上的開源項目)。要說代碼量。Java代碼寫了兩萬行,XML沒有統計。但是假設現在再讓我重寫一個同樣的程序。確定要不了那麼多代碼。現在再看,感受那個應用的界面仍是不夠好,對不一樣手機的兼容性也不夠。

這是當時參賽的演示視頻 http://v.youku.com/v_show/id_XNDUyMDI5MTE2.html

由於谷歌有段時間無法訪問,今年穀歌安卓大賽的主頁在這裏 http://miac.buu.edu.cn/

4.3 再次參加谷歌安卓大賽

而後就到了今年年初,我決定又一次參加一次谷歌安卓大賽,並嚴格依照軟件設計規範。編寫一個全新的高質量安卓應用。去年年底設想做品方案,想到要作一個鬧鈴應用。至於有什麼特色,我公佈到安智市場了,看介紹就知道(從我一開始作多媒體備忘錄GoodMemo以來,就和鬧鈴應用結下了不解之緣,一個好的創意真的很是難 o(╯□╰)o)。

從寒假在家開始進行界面的概念圖和交互設計,到實際編程(實際上鬧鈴數據部分的編程僅僅用了幾天就完畢了,絕大多數時間用在了界面設計上),再重複的調整和修復各類BUG,包含應用的名稱都想了很是長時間。最後仍是姐姐給個人靈感。就叫作《It's the time》。斷斷續續直到8月末,纔算是基本完畢了。

而後又找同窗幫忙體驗和提建議,對界面進行了很多調整。

面試時就演示了個人這個做品。感受還不錯。

面試結束後又再作了一些調整改進,最後最終公佈到安智市場了,可以點擊如下的連接安裝感覺一下。在9月底的時候,提交到了谷歌安卓大賽站點。臨時尚未開始評選。這也是我眼下能拿得出手的,充分考慮了用戶體驗的基本的一個應用。

但是兼容性仍是不夠,貌似在有些同窗的小米手機上無法用……深度訂製的小米手機系統真折騰人。。。至於功能,沒什麼好說的……實在想不出什麼新意。

http://www.anzhi.com/soft_1856039.html

4.4 黑客編程馬拉松

今年早些的時候,四月份的時候,我和另外兩個隊友參加了一次黑客馬拉松編程大賽。我負責所有編程工做。

連續30小時。5000行代碼。三等獎、最佳設計獎、最努力編程獎。咱們的做品Ding,是一個語音控制的鬧鈴(又是鬧鈴+_+),事實上程序BUG很是多,也沒有再去改動了,創意通常。實際價值不太大。

但是隊友設計的界面風格和宣傳視頻受到了評委一致好評。而我編程的堅持不懈也受到了獎勵。事實上雖然說應用有5000行代碼,實際上就和我前面所說,並非全都是現場完畢的,而是有一部分以前就作過相關的模塊。直接放進去用了。30小時的主要時間都用在了界面的編寫和已有代碼的移植、改動和無缺上了。

4.5 實習經歷

仍是在今年,從三月份開始到七月份,我在一家公司實習,作的是安卓開發,學了很多以前沒用到的東西,多線程、網絡、語音識別、各類第三方API(好比天氣查詢)等等。主要是學了很多技術,項目再也不細說。

4.6 最簡單的手電筒應用

在一開始打算往安卓公佈應用以前,我有一些東西不明確,比方應用簽名之類的。我的開發的應用一旦公佈出去,成爲商業應用,會有什麼需要注意的東西呢?當時糾結了很是久,也找了很多資料,決定先作個簡單的應用試一下。而後在8月份的時候,我作了一個簡易的手電筒應用SimpleLamp,公佈到市場了。當時感覺到安卓碎片化問題確實挺嚴重,即便是小小一個手電筒,原本簡單的一個API就能完畢的事。但是由於要兼容不一樣型號設備,我看網上一些代碼。還得對一些特別的手機型號進行推斷、特殊對待,至關麻煩,而市場上那些比較受歡迎的安卓手電筒應用,必強調的一個點就是兼容多少種手機型號。因此這裏我也來摻和一下,個人手電筒應用通過了更新之後,能兼容很是多型號的安卓手機(詳細多少種我無法統計,反正我認識的同窗下載使用的,都沒有出現過沒法打開手電筒的現象)。點擊如下的連接可以下載體驗。

http://www.anzhi.com/soft_1795050.html

以上就是至今爲止個人安卓學習經歷了。也歡迎你們支持個人做品SimpleLamp和It's the time。再發一遍下載地址……

It's the time http://www.anzhi.com/soft_1856039.html

SimpleLamp http://www.anzhi.com/soft_1795050.html

另外,APP開發的完整流程可以參考知乎上的這個問題和回答:

http://www.zhihu.com/question/19957949

至此,花了將近一天時間寫的安卓相關總結就算是寫完了,但願對你們有所幫助,也但願你們多多支持。

我的水平有限,有不論什麼問題和不正確的地方,歡迎指出,或和我交流討論。也歡迎你們關注個人我的主頁 http://www.hainter.com 。

你們的支持會是我最大的動力,有了動力。我會認真寫不少其它的文章來分享個人學習經驗。


本文由jzj1993原創。轉載請註明來源:http://www.hainter.com/mobile-develop

相關文章
相關標籤/搜索