近來,看了一本書,名字叫做《第一行代碼》,是CSDN一名部落客寫的,一本Android入門級的書,比較适合新手。看了書之後,有感而發,想來進行Android開發已經有一年多了,但欠缺系統化的學習,知識雜亂無章,沒有條理和總結。是以,想想我是否可以嘗試的寫些文章,來對自己之前學過的知識和工作經驗進行歸納和整理,整理出自己的知識體系呢。是以,就有這篇文章的誕生,如果其中了解不到位的地方,望園裡的兄弟姐妹給予指出錯誤,我們共同讨論,一起進步。我一直相信一句話,好東西要分享,不斷地分享,直至溫暖整個世界。
目前安排是一周一篇文章,因為從前期每篇文章主題的思考,素材收集,代碼驗證,思維導圖設計,是很耗時間的,如果碰到問題沒解決的話,就順延到下一周,甯願速度慢點,但要保證寫出來的東西是原創的,對人有幫助才行。
這篇的主題是”什麼是Android“,關于Android的内容,從以下幾點來介紹:
Android系統架構
Andorid已釋出的版本
Android應用特色
Android開發環境
Android程式結構
Logcat工具
Hello World
有圖有真相:
這是Android系統架構圖,夠一目了然了吧,Android大緻可以分為四層架構,五塊區域。
Linux核心層(Linux Kernel)
系統運作層
應用架構層(Application Framework)
應用層(Applications)
1.1,Linux核心層
Android系統是基于Linux 2.6核心的,這一層為Android裝置的各種硬體提供了底層的驅動,如顯示驅動、音頻驅動、照相機驅動、藍牙驅動、WiFi驅動、電源管理等。
1.2,系統運作層
這一層通過一些C/C++庫來為Android系統提供了主要的特性支援,比如SQLite庫提供了資料庫的支援,OpenGL|ES庫提供了3D繪圖的支援,Webkit庫提供浏覽器核心的支援等。同時,在這一層還有Android運作時庫,它提供了一些核心庫,能允許開發者使用Java來編寫Android應用。其中,關鍵是Dalvik虛拟機,它使得我們每一個Android應用都能運作在獨立的程序當中,并且擁有一個自己的Dalvik虛拟機執行個體,相比Java虛拟機(JVM),Dalvik是專門為移動裝置定制的,它對手機記憶體、CPU性能有限等情況做了優化處理。
1.3,應用架構層
這一層主要提供了建構應用時可能用到的API,Android自帶的一些核心應用程式就是使用這些API完成的,開發者可以通過使用這些API建構自己的應用程式。比如有活動管理器、View系統。内容提供器、通知管理器等。
1.4,應用層
所有安裝在手機上的應用程式都是屬于這一層的,比如系統自帶的聯系人、短信等程式,或者我們從Google Play上下載下傳的程式,包括我們自己開發的應用程式。
從圖中我們能看到,Android最新版已經5.0了,名叫Android 5.0 Lollipop,中文簡稱為”棒棒糖“。自從2008年9月,谷歌正式釋出了Android 1.0系統,這也是Android系統最早的版本,随後的幾年,谷歌以驚人的速度不斷更新釋出Android系統,2.1、2.2、2.3系統推出使Android占據了大量的市場。2011年2月,谷歌釋出了Android 3.0系統,這個系統版本是專門為平闆電腦設計的,但也是Android為數不多比較失敗的版本,推出之後一直不見什麼起色,市場佔有率也少的可憐。不過很快,在同年10月,谷歌又釋出了Android 4.0系統,這個系統版本不再對手機和平闆進行差異化區分,既可以應用在手機上也可以應用在平闆上,除此之外,還引入了不少特性。
那麼Android目前市場使用情況如何呢?如圖所示:
圖檔來源自維基百科
自2009年12月起的Android使用者版本分析。直至2014年5月,Android的Jelly Bean為最被廣泛使用的版本,在所有使用者中佔了61%。
Android主要有什麼特色呢,有以下幾個方面來展現:
四大元件
豐富的系統控件
SQLite資料庫等持久化技術
地理位置定位
強大的多媒體
傳感器
3.1,四大元件
什麼是四大元件?分别是活動(Activity)、服務(Service)、廣播接收器(BroadCast Receiver)和内容提供器(Content Provider)。其中活動(Activity)就是Android應用程式中看得東西,也是使用者打開一個應用程式的門面,并且與使用者互動的界面,比較高調。服務(Service),則比較低調了,一直在背景默默的付出,即使使用者退出了,服務仍然是可以繼續運作的。廣播接收器(BroadCast Receiver),則允許你的應用接收來自各處的廣播消息,比如電話、短信等,可以根據廣播名稱不同,做相應的操作處理,當然了, 除了可以接受别人發來的廣播消息,自身也可以向外發出廣播消息,自産自銷。内容提供器(Content Provider),則為應用程式之間共享資料提供了可能,比如你想要讀取系統電話本中的聯系人,就需要通過内容提供器來實作。
3.2,豐富的系統控件
Android系統為開發者提供了豐富的系統控件,我們可以編寫漂亮的界面,也可以通過擴充系統控件,自定義控件來滿足自我的需求,常見控件有:TextView、Buttion、EditText、一些布局控件等。
3.3,持久化技術
Android系統還自帶了SQLite資料庫,SQLite資料庫是一種輕量級、運算速度極快的嵌入式關系型資料庫。它不僅支援标準的SQL文法,還可以通過Android封裝好的API進行操作,讓存儲和讀取資料變得非常友善。
3.4,地理位置定位
移動裝置和PC相比,地理位置定位是一大亮點,現在基本Android手機都内置了GPS,我們可以通過GPS,結合我們的創意,打造一款基于LBS的産品,是不是很酷的事情啊,再說,目前火熱的LBS應用也不是空穴來風的,不過在天朝,因為可惡的GFW,隻能用些本土化的地圖API,比如百度地圖、高德地圖。要是哪天能用上大谷歌的地圖,那才是高大上啊。
3.5,強大的多媒體
Android系統提供了豐富的多媒體服務,比如音樂、視訊、錄音、拍照、鬧鈴等,這一切都可以在程式中通過代碼來進行控制,讓你的應用變得更加豐富多彩。
3.6,傳感器
Android手機中内置了多種傳感器,比如加速傳感器、方向傳感器,這是移動裝置的一大特點,我們可以靈活地使用這些傳感器,可以做出很多在PC上無法實作的應用。比如“微信搖一搖"_你懂得,“搜歌搖一搖”等功能。
開發環境搭建所需要的軟體,配置等攻略,相信大家網上搜一搜,這類文章太多了。這裡隻強調重要幾個工具:Android SDK、Eclipse、ADT。
4.1,Android SDK
Android SDK谷歌提供的Android開發工具包,在開發Android程式時,我們需要引用該工具包,裡面包含了開發Android應用程式的API。
4.2,Eclipse
開發Java應用程式的神器,最好用IDE工具之一,特點是開源、超強的插件功能、可支援多種語言開發。當然除此之外,谷歌也推出了Android Studio,專門針對Android程式定制的,但因為Android Studio才剛推出不久,不太穩定,畢竟新工具問題還是比較多的,Eclipse被應用已經很成熟了,網上各種關于Eclipse疑難雜症的解決方案很多,相比Android Studio就比較少了。
4.3,ADT
ADT全稱叫做"Android Development Tools",是谷歌提供的一個Eclipse插件,用于在Eclipse提供一個強大的、內建的Android開發環境。
有圖有真相:
從圖中看是不是一目了然,那麼接下來就一一講解吧。
5.1,src
毫無疑問,src目錄是放置我們所有Java代碼的地方,它在這裡的含義和普通Java項目下的src目錄是完全一樣的。
5.2,gen
這個目錄裡的内容都是自動生成的,主要有一個R.Java檔案,你在項目中添加任何資源都會在其中生成一個相應的資源ID,這個檔案永遠不要手動去修改它。
5.3,assets
這個目錄裡主要可以存放一些随程式打包的檔案,在你的程式運作時可以動态讀取到這些檔案的内容。另外,如果你的程式中使用到了WebView加載本地網頁的功能,所有網頁相關的檔案也都存放在這個目錄下。
5.4,bin
這個目錄頁不需要過多的關注,它主要包含了一些在編譯時自動産生的檔案。當然,會包括一個編譯好的安裝包,字尾為.apk的檔案。
5.5,libs
如果你的項目中使用到了第三方的jar包,就需要把這些jar包放在libs目錄下,放在這個目錄下的jar包都會被自動添加到建構路徑裡去。
5.6,res
這個目錄下的内容就有點多了,簡單點說,就是你在項目中使用到的所有圖檔、布局、字元串等資源都要存放在這個目錄下,前面提到的R.Java中的内容也是根據這個目錄下的檔案自動生成的。當然這個目錄下還有很多子目錄,圖檔放在drawable目錄下,布局放在layout目錄下,字元串放在values目錄下。
5.7,AndroidManifest.xml
這是你整個Android項目的配置檔案,你在程式中定義的所有四大元件都需要在這個檔案中注冊。另外還可以在這個檔案給應用程式添權重限聲明,也可以重新指定你建立項目時指定的程式最低相容版本和目标版本。
5.8,proguard-project.txt
在釋出你的程式時候,有些apk檔案容易被人反編譯,是以此時這個檔案就發揮作用了,用來混淆你的程式代碼,讓别人不那麼容易看到源代碼。
5.9,project.properties
指定了編譯程式時候所用的SDK版本
日志在任何項目的開發過程中都會起到非常重要的作用,在Android項目中如果你想要檢視日志則必須要使用Logcat工具。
Android提供了一個日志工具類是Log,總共有個等級,級級遞增。
6.1,Log.v()
這個方法用于列印那些最為瑣碎的,意義最小的日志資訊。對應級别 verbose,是Android 日志裡面級别最低的一種。
6.2,Log.d()
這個方法用于列印一些調試資訊,這些資訊對你調試程式和分析問題應該是有幫助的。對應級别 debug,比 verbose 高一級。
6.3,Log.i()
這個方法用于列印一些比較重要的資料,這些資料應該是你非常想看到的,可以幫你分析使用者行為的那種。對應級别 info,比 debug 高一級。
6.4,Log.w()
這個方法用于列印一些警告資訊,提示程式在這個地方可能會有潛在的風險,最好去修複一下這些出現警告的地方。對應級别 warn,比 info 高一級。
6.5,Log.e()
這個方法用于列印程式中的錯誤資訊,比如程式進入到了 catch 語句當中。當有錯誤資訊列印出來的時候,一般都代表你的程式出現嚴重問題了,必須盡快修複。對應級别 error,比 warn 高一級。
小提醒:定制自己的日志工具
比如,你正在編寫一個比較龐大的項目,期間為了友善調試,在代碼的很多地方都列印了大量的日志。最近項目已經基本完成了,但是卻有一個非常讓人頭疼的問題,之前用于調試的那些日志,在項目正式上線之後仍然會照常列印,這樣不僅會降低程式的運作效率,還有可能将一些機密性的資料洩露出去。
那該怎麼辦呢,難道要一行一行把所有列印日志的代碼都删掉?顯然這不是什麼好點子,不僅費時費力,而且以後你繼續維護這個項目的時候可能還會需要這些日志。是以,最理想的情況是能夠自由地控制日志的列印,當程式處于開發階段就讓日志列印出來,當程式上線了之後就把日志屏蔽掉。
那麼我們可以自定義一個日志工具類,對Android原生的工具類封裝下。
可以看到,我們在 LogUtil 中先是定義了 VERBOSE、 DEBUG、 INFO、 WARN、 ERROR、NOTHING 這六個整型常量,并且它們對應的值都是遞增的。然後又定義了一個 LEVEL 常
量,可以将它的值指定為上面六個常量中的任意一個。接下來我們提供了 v()、 d()、 i()、 w()、 e()這五個自定義的日志方法,在其内部分别調用了 Log.v()、 Log.d()、 Log.i()、 Log.w()、 Log.e()這五個方法來列印日志,隻不過在這些自定義的方法中我們都加入了一個 if判斷,隻有當 LEVEL 常量的值小于或等于對應日志級别值的時候,才會将日志列印出來。
這樣就把一個自定義的日志工具建立好了,之後在項目裡我們可以像使用普通的日志工具一樣使用 LogUtil,
比如列印一行 DEBUG 級别的日 志就可以這樣寫:LogUtil.d("TAG", "debug log");
列印一行 WARN 級别的日志就可以這樣寫:LogUtil. w("TAG", "warn log");
然後我們隻需要修改 LEVEL 常量的值,就可以自由地控制日志的列印行為了。比如讓LEVEL 等于 VERBOSE 就可以把所有的日志都列印出來,讓 LEVEL 等于 WARN 就可以隻列印警告以上級别的日志,讓 LEVEL 等于 NOTHING 就可以把所有日志都屏蔽掉。使用了這種方法之後,剛才所說的那個問題就不複存在了,你隻需要在開發階段将LEVEL 指定成 VERBOSE,當項目正式上線的時候将 LEVEL 指定成 NOTHING 就可以了。
好了,說了這麼多,這些隻是一些理論的東西,要想更深入的了解,必須要自己動手做Demo,我們可以去建立一個Hello World程式試試,用Eclipse+ADT幫我們建立的預設項目就是Hello World.
源于對掌握的Android開發基礎點進行整理,羅列下已經總結的文章,從中可以看到技術積累的過程。
1,Android系統簡介
2,ProGuard代碼混淆
3,講講Handler+Looper+MessageQueue關系
4,Android圖檔加載庫了解
5,談談Android運作時權限了解
6,EventBus初了解
7,Android 常見工具類
8,對于Fragment的一些了解
9,Android 四大元件之 " Activity "
10,Android 四大元件之" Service "
11,Android 四大元件之“ BroadcastReceiver "
11,Android 四大元件之" ContentProvider "
13,講講 Android 事件攔截機制
14,Android 動畫的了解
15,Android 生命周期和啟動模式
16,Android IPC 機制
17,View 的事件體系
18,View 的工作原理
19,了解 Window 和 WindowManager
20,Activity 啟動過程分析
21,Service 啟動過程分析
22,Android 性能優化
23,Android 消息機制
24,Android Bitmap相關
25,Android 線程和線程池
26,Android 中的 Drawable 和動畫
27,RecylerView 中的裝飾者模式
28,Android 觸摸事件機制
29,Android 事件機制應用
30,Cordova 架構的一些了解
31,有關 Android 插件化思考
32,開發人員必備技能——單元測試