閱讀郭林《第一行代碼》的筆記——第1章 開始啓程,你的第一行Android代碼

一、Android系統架構

Android大致可以分爲四層架構,五塊區域。
1.Linux內核層
Android系統是基於Linux 2.6內核的,這一層爲Android設備的各種硬件提供了底層的驅動,如顯示驅動、音頻驅動、照相機驅動、藍牙驅動、Wi-Fi驅動、電源管理等。
2.系統運行庫層
這一層通過一些C/C++庫來爲Android系統提供了主要的特性支持。如SQLite庫提供了數據庫的支持,OpenGL|ES庫提供了3D繪圖的支持,Webkit庫提供了瀏覽器內核的支持等。
同樣在這一層還有Android運行時庫,它主要提供了一些核心庫,能夠允許開發者使用Java語言來編寫Android應用。另外Android運行時庫中還包含了Dalvik虛擬機,它使得每一個Android應用都能運行在獨立的進程當中,並且擁有一個自己的Dalvik虛擬機實例。相較於Java虛擬機,Dalvik是專門爲移動設備定製的,它針對手機內存、CPU性能有限等情況做了優化處理。
3.應用框架層
這一層主要提供了構建應用程序時可能用到的各種API,Android自帶的一些核心應用就是使用這些API完成的,開發者也可以通過使用這些API來構建自己的應用程序。
4.應用層
所有安裝在手機上的應用程序都是屬於這一層的,比如系統自帶的聯繫人、短信等程序,或者是你從Google Play上下載的小遊戲,當然還包括你自己開發的程序。
結合圖1.1你將會理解得更加深刻,圖片源自維基百科。


二、Android應用開發特色

Android系統到底提供了哪些東西,供我們可以開發出優秀的應用程序。
1.四大組件
Android系統四大組件分別是活動(Activity)、服務(Service)、廣播接收器(Broadcast Receiver)和內容提供器(Content Provider)。其中活動是所有Android應用程序的門面,凡是在應用中你看得到的東西,都是放在活動中的。而服務就比較低調了,你無法看到它,但它會一直在後臺默默地運行,即使用戶退出了應用,服務仍然是可以繼續運行的。廣播接收器可以允許你的應用接收來自各處的廣播消息,比如電話、短信等,當然你的應用同樣也可以向外發出廣播消息。內容提供器則爲應用程序之間共享數據提供了可能,比如你想要讀取系統電話簿中的聯繫人,就需要通過內容提供器來實現。
2.豐富的系統控件
Android系統爲開發者提供了豐富的系統控件,使得我們可以很輕鬆地編寫出漂亮的界面。當然如果你品味比較高,不滿足於系統自帶的控件效果,也完全可以定製屬於自己的控件。
3.SQLite數據庫
Android系統還自帶了這種輕量級、運算速度極快的嵌入式關係型數據庫。它不僅支持標準的SQL語法,還可以通過Android封裝好的API進行操作,讓存儲和讀取數據變得非常方便。
4.地理位置定位
移動設備和PC相比起來,地理位置定位功能應該可以算是很大的一個亮點。現在的Android手機都內置有GPS,走到哪兒都可以定位到自己的位置,發揮你的想象就可以做出創意十足的應用,如果再結合上功能強大的地圖功能,LBS這一領域潛力無限。
5.強大的多媒體
Android系統還提供了豐富的多媒體服務,如音樂、視頻、錄音、拍照、鬧鈴等等,這一切你都可以在程序中通過代碼進行控制,讓你的應用變得更加豐富多彩。
6.傳感器
Android手機中都會內置多種傳感器,如加速度傳感器、方向傳感器等,這也算是移動設備的一大特點。通過靈活地使用這些傳感器,你可以做出很多在PC上根本無法實現的應用。

三、分析你的第一個Android程序

HelloWorld項目的目錄結構


1.src
毫無疑問,src目錄是放置我們所有Java代碼的地方,它在這裏的含義和普通Java項目下的src目錄是完全一樣的,展開之後你將看到我們剛纔創建的HelloWorldActivity文件就在裏面。
2.gen
這個目錄裏的內容都是自動生成的,主要有一個R.java文件,你在項目中添加的任何資源都會在其中生成一個相應的資源id。這個文件永遠不要手動去修改它。
3.assets
這個目錄用得不多,主要可以存放一些隨程序打包的文件,在你的程序運行時可以動態讀取到這些文件的內容。另外,如果你的程序中使用到了WebView加載本地網頁的功能,所有網頁相關的文件也都存放在這個目錄下。
4.bin
這個目錄你也不需要過多關注,它主要包含了一些在編譯時自動產生的文件。其中會有一個你當前項目編譯好的安裝包,展開bin目錄你會看到HelloWorld.apk,把這個文件拷到手機上就可以直接安裝了。
5.libs
如果你的項目中使用到了第三方Jar包,就需要把這些Jar包都放在libs目錄下,放在這個目錄下的Jar包都會被自動添加到構建路徑裏去。你可以展開上圖中Android 4.0、Android Private Libraries、Android Dependencies這些庫,其中顯示的Jar包都是已經被添加到構建路徑裏的。
6.res
這個目錄下的內容就有點多了,簡單點說,就是你在項目中使用到的所有圖片、佈局、字符串等資源都要存放在這個目錄下,前面提到的R.java中的內容也是根據這個目錄下的文件自動生成的。當然這個目錄下還有很多的子目錄,圖片放在drawable目錄下,佈局放在layout目錄下,字符串放在values目錄下,所以你不用擔心會把整個res目錄弄得亂糟糟的。
詳解項目中的資源

看到這麼多的文件夾不用害怕,其實歸納一下,res目錄就變得非常簡單了。所有以drawable開頭的文件夾都是用來放圖片的,所有以values開頭的文件夾都是用來放字符串的,layout文件夾是用來放佈局文件的,menu文件夾是用來放菜單文件的。怎麼樣,是不是突然感覺清晰了很多?之所以有這麼多drawable開頭的文件夾,其實主要是爲了讓程序能夠兼容更多的設備。在製作程序的時候最好能夠給同一張圖片提供幾個不同分辨率的副本,分別放在這些文件夾下,然後當程序運行的時候會自動根據當前運行設備分辨率的高低選擇加載哪個文件夾下的圖片。當然這只是理想情況,更多的時候美工只會提供給我們一份圖片,這時你就把所有圖片都放在drawable-hdpi文件夾下就好了。
知道了res目錄下每個文件夾的含義,我們再來看一下如何去使用這些資源吧。比如剛剛在strings.xml中找到的Hello world!字符串,我們有兩種方式可以引用它:
1.在代碼中通過R.string.hello_world可以獲得該字符串的引用;
2.在XML中通過@string/hello_world可以獲得該字符串的引用。
基本的語法就是上面兩種方式,其中string部分是可以替換的,如果是引用的圖片資源就可以替換成drawable,如果是引用的佈局文件就可以替換成layout,以此類推。
7.AndroidManifest.xml
這是你整個Android項目的配置文件,你在程序中定義的所有四大組件都需要在這個文件裏註冊。另外還可以在這個文件中給應用程序添加權限聲明,也可以重新指定你創建項目時指定的程序最低兼容版本和目標版本。由於這個文件以後會經常用到,我們用到的時候再做詳細說明。
8.project.properties
這個文件非常地簡單,就是通過一行代碼指定了編譯程序時所使用的SDK版本。

發佈了259 篇原創文章 · 獲贊 47 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章