安卓学习 之 概述(一)
一 、Android 系統(tǒng)架構(gòu)
Android 大致可以分為四層架構(gòu),五塊區(qū)域。
1.Linux 內(nèi)核層
Android 系統(tǒng)是基于 Linux 2.6 內(nèi)核的,這一層為 Android 設(shè)備的各種硬件提供了底層的驅(qū)動(dòng),如顯示驅(qū)動(dòng)、音頻驅(qū)動(dòng)、照相機(jī)驅(qū)動(dòng)、藍(lán)牙驅(qū)動(dòng)、Wi-Fi 驅(qū)動(dòng)、電源管理等。
2.系統(tǒng)運(yùn)行庫(kù)層
這一層通過(guò)一些 C/C++庫(kù)來(lái)為 Android 系統(tǒng)提供了主要的特性支持。如
- SQLite 庫(kù)提供了數(shù)據(jù)庫(kù)的支持
- OpenGL|ES 庫(kù)提供了 3D 繪圖的支持
- Webkit庫(kù)提供了瀏覽器內(nèi)核的支持等。
同樣在這一層還有 Android 運(yùn)行時(shí)庫(kù),它主要提供了一些核心庫(kù),能夠允許開(kāi)發(fā)者使用 Java 語(yǔ)言來(lái)編寫(xiě) Android 應(yīng)用。另外 Android 運(yùn)行時(shí)庫(kù)中還包含了 Dalvik 虛擬機(jī), 它使得每一個(gè) Android 應(yīng)用都能運(yùn)行在獨(dú)立的進(jìn)程當(dāng)中,并且擁有一個(gè)自己的 Dalvik 虛擬機(jī)實(shí)例。相較于 Java 虛擬機(jī),Dalvik 是專(zhuān)門(mén)為移動(dòng)設(shè)備定制的,它針對(duì)手機(jī)內(nèi)存、
CPU 性能有限等情況做了優(yōu)化處理。
3.應(yīng)用框架層
這一層主要提供了構(gòu)建應(yīng)用程序時(shí)可能用到的各種 API,Android 自帶的一些核心應(yīng)用就是使用這些API完成的,開(kāi)發(fā)者也可以通過(guò)使用這些API 來(lái)構(gòu)建自己的應(yīng)用程序。
4.應(yīng)用層
所有安裝在手機(jī)上的應(yīng)用程序都是屬于這一層的,比如系統(tǒng)自帶的聯(lián)系人、短信等程序,或者是你從 Google Play 上下載的小游戲,當(dāng)然還包括你自己開(kāi)發(fā)的程序。
二、安卓的目錄結(jié)構(gòu)
1.src
毫無(wú)疑問(wèn),src 目錄是放置我們所有 Java 代碼的地方,它在這里的含義和普通 Java 項(xiàng)目下的 src 目錄是完全一樣的,展開(kāi)之后你將看到我們剛才創(chuàng)建的 HelloWorldActivity 文件就在里面。
2.gen
這個(gè)目錄里的內(nèi)容都是自動(dòng)生成的,主要有一個(gè) R.java 文件,你在項(xiàng)目中添加的任何資源都會(huì)在其中生成一個(gè)相應(yīng)的資源 id。這個(gè)文件永遠(yuǎn)不要手動(dòng)去修改它。
3.assets
這個(gè)目錄用得不多,主要可以存放一些隨程序打包的文件,在你的程序運(yùn)行時(shí)可以動(dòng)態(tài)讀取到這些文件的內(nèi)容。另外,如果你的程序中使用到了 WebView 加載本地網(wǎng)頁(yè)的功能,所有網(wǎng)頁(yè)相關(guān)的文件也都存放在這個(gè)目錄下。
4.bin
這個(gè)目錄你也不需要過(guò)多關(guān)注,它主要包含了一些在編譯時(shí)自動(dòng)產(chǎn)生的文件。其中會(huì)有一個(gè)你當(dāng)前項(xiàng)目編譯好的安裝包,展開(kāi) bin 目錄你會(huì)看到 HelloWorld.apk,把這個(gè)文件拷到手機(jī)上就可以直接安裝了。
5.libs
如果你的項(xiàng)目中使用到了第三方 Jar 包,就需要把這些 Jar 包都放在 libs 目錄下,放在這個(gè)目錄下的 Jar 包都會(huì)被自動(dòng)添加到構(gòu)建路徑里去。你可以展開(kāi)上圖中 Android 4.0、Android Private Libraries、Android Dependencies 這些庫(kù),其中顯示的 Jar 包都是已經(jīng)被添加到構(gòu)建路徑里的。
6.res
這個(gè)目錄下的內(nèi)容就有點(diǎn)多了,簡(jiǎn)單點(diǎn)說(shuō),就是你在項(xiàng)目中使用到的所有圖片、布局、字符串等資源都要存放在這個(gè)目錄下,前面提到的 R.java 中的內(nèi)容也是根據(jù)這個(gè)目錄下的文件自動(dòng)生成的。當(dāng)然這個(gè)目錄下還有很多的子目錄,圖片放在 drawable 目錄下, 布局放在 layout 目錄下,字符串放在 values 目錄下,所以你不用擔(dān)心會(huì)把整個(gè) res 目錄弄得亂糟糟的。
7.AndroidManifest.xml
這是你整個(gè) Android 項(xiàng)目的配置文件,你在程序中定義的所有四大組件都需要在這個(gè)文件里注冊(cè)。另外還可以在這個(gè)文件中給應(yīng)用程序添加權(quán)限聲明,也可以重新指定你創(chuàng)建項(xiàng)目時(shí)指定的程序最低兼容版本和目標(biāo)版本。由于這個(gè)文件以后會(huì)經(jīng)常用到,我們用到的時(shí)候再做詳細(xì)說(shuō)明。
8.project.properties
這個(gè)文件非常地簡(jiǎn)單,就是通過(guò)一行代碼指定了編譯程序時(shí)所使用的 SDK 版本。
三、安卓的目錄結(jié)構(gòu)
所有以drawable 開(kāi)頭的文件夾都是用來(lái)放圖片的,所有以 values 開(kāi)頭的文件夾都是用來(lái)放字符串的,
layout 文件夾是用來(lái)放布局文件的,menu 文件夾是用來(lái)放菜單文件的。
之所以有這么多 drawable 開(kāi)頭的文件夾,其實(shí)主要是為了讓程序能夠兼容更多的設(shè)備。在制作程序的時(shí)候最好能夠給同一張圖片提供幾個(gè)不同分辨率的副本,分別放 在這些文件夾下,然后當(dāng)程序運(yùn)行的時(shí)候會(huì)自動(dòng)根據(jù)當(dāng)前運(yùn)行設(shè)備分辨率的高低選擇加載哪 個(gè)文件夾下的圖片。當(dāng)然這只是理想情況,更多的時(shí)候美工只會(huì)提供給我們一份圖片,這時(shí)你就把所有圖片都放在 drawable-hdpi 文件夾下就好了。
四、Android 的日志工具 LogCat
1.Log.v()
這個(gè)方法用于打印那些最為瑣碎的,意義最小的日志信息。對(duì)應(yīng)級(jí)別 verbose,是
Android 日志里面級(jí)別最低的一種。
2.Log.d()
這個(gè)方法用于打印一些調(diào)試信息,這些信息對(duì)你調(diào)試程序和分析問(wèn)題應(yīng)該是有幫助 的。對(duì)應(yīng)級(jí)別 debug,比 verbose 高一級(jí)。
3.Log.i()
這個(gè)方法用于打印一些比較重要的數(shù)據(jù),這些數(shù)據(jù)應(yīng)該是你非常想看到的,可以幫 你分析用戶行為的那種。對(duì)應(yīng)級(jí)別 info,比 debug 高一級(jí)。
4.Log.w()
這個(gè)方法用于打印一些警告信息,提示程序在這個(gè)地方可能會(huì)有潛在的風(fēng)險(xiǎn),最好 去修復(fù)一下這些出現(xiàn)警告的地方。對(duì)應(yīng)級(jí)別 warn,比 info 高一級(jí)。
5.Log.e()
這個(gè)方法用于打印程序中的錯(cuò)誤信息,比如程序進(jìn)入到了 catch 語(yǔ)句當(dāng)中。當(dāng)有錯(cuò)誤信息打印出來(lái)的時(shí)候,一般都代表你的程序出現(xiàn)嚴(yán)重問(wèn)題了,必須盡快修復(fù)。對(duì)應(yīng)級(jí)別 error,比 warn 高一級(jí)。
總結(jié)
以上是生活随笔為你收集整理的安卓学习 之 概述(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 容器学习 之 管理Volumn(十七)
- 下一篇: 安卓学习 之 Activity(二)