標籤:
今天看到了一個介紹android的很不錯的文章 ,轉載到我的部落格園裡。
原文地址 http://www.cnblogs.com/cr330326/p/4229026.html
這篇的主題是”什麼是Android“,關於Android的內容,從以下幾點來介紹:
- Android系統架構
- Andorid發行的版本
- Android應用特色
- Android開發環境
- Android程式結構
- Logcat工具
- Hello World
1,Android系統架構 有圖有真相: 這是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構建自己的應用程式。比如有Active Manager、View系統。內容提供器、通知管理器等。 1.4,應用程式層 所有安裝在手機上的應用程式都是屬於這一層的,比如系統內建的連絡人、簡訊等程式,或者我們從Google Play上下載的程式,包括我們自己開發的應用程式。2,Android發行的版本 有圖有真相: 我們能看到,Android最新版已經5.0了,名叫Android 5.0 Lollipop,中文簡稱為”棒棒糖“。自從2008年9月,Google正式發布了Android 1.0系統,這也是Android系統最早的版本,隨後的幾年,Google以驚人的速度不斷更新發布Android系統,2.1、2.2、2.3系統推出使Android佔據了大量的市場。2011年2月,Google發布了Android 3.0系統,這個系統版本是專門為平板電腦設計的,但也是Android為數不多比較失敗的版本,推出之後一直不見什麼起色,市場份額也少的可憐。不過很快,在同年10月,Google又發布了Android 4.0系統,這個系統版本不再對手機和平板進行差異化區分,既可以應用在手機上也可以應用在平板上,除此之外,還引入了不少特性。 那麼Android目前市場使用方式如何呢?: 圖片來源自維基百科 自2009年12月起的Android使用者版本分析。直至2014年5月,Android的Jelly Bean為最被廣泛使用的版本,在所有使用者中佔了61%。 3,Android應用特色
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,比如百度地圖、高德地圖。要是哪天能用上大Google的地圖,那才是高大上啊。 3.5,強大的多媒體 Android系統提供了豐富的多媒體服務,比如音樂、視頻、錄音、拍照、鬧鈴等,這一切都可以在程式中通過代碼來進行控制,讓你的應用變得更加豐富多彩。 3.6,感應器 Android手機中內建了多種感應器,比如加速感應器、方向感應器,這是行動裝置的一大特點,我們可以靈活地使用這些感應器,可以做出很多在PC上無法實現的應用。比如“搖一搖"_你懂得,“搜歌搖一搖”等功能。4,Android程式結構
有圖有真相:
看是不是一目瞭然,那麼接下來就一一講解吧。
4.1,src 毫無疑問,src目錄是放置我們所有Java代碼的地方,它在這裡的含義和普通Java項目下的src目錄是完全一樣的。 4.2,gen 這個目錄裡的內容都是自動產生的,主要有一個R.Java檔案,你在項目中添加任何資源都會在其中產生一個相應的資源ID,這個檔案永遠不要手動去修改它。 4.3,assets 這個目錄裡主要可以存放一些隨程式打包的檔案,在你的程式運行時可以動態讀取到這些檔案的內容。另外,如果你的程式中使用到了WebView載入本地網頁的功能,所有網頁相關的檔案也都存放在這個目錄下。 4.4,bin 這個目錄頁不需要過多的關注,它主要包含了一些在編譯時間自動產生的檔案。當然,會包括一個編譯好的安裝包,尾碼為.apk的檔案。 4.5,libs 如果你的項目中使用到了第三方的jar包,就需要把這些jar包放在libs目錄下,放在這個目錄下的jar包都會被自動添加到構建路徑裡去。 4.6,res 這個目錄下的內容就有點多了,簡單點說,就是你在項目中使用到的所有圖片、布局、字串等資源都要存放在這個目錄下,前面提到的R.Java中的內容也是根據這個目錄下的檔案自動產生的。當然這個目錄下還有很多子目錄,圖片放在drawable目錄下,布局放在layout目錄下,字串放在values目錄下。 4.7,AndroidManifest.xml 這是你整個Android項目的設定檔,你在程式中定義的所有四大組件都需要在這個檔案中註冊。另外還可以在這個檔案給應用程式添加許可權聲明,也可以重新指定你建立項目時指定的程式最低相容版本和目標版本。 4.8,proguard-project.txt 在發布你的程式時候,有些apk檔案容易被人反編譯,所以此時這個檔案就發揮作用了,用來混淆你的程式碼,讓別人不那麼容易看到原始碼。 4.9,project.properties 指定了編譯器時候所用的SDK版本5,Logcat工具
有圖有真相:
日誌在任何項目的開發過程中都會起到非常重要的作用,在Android項目中如果你想要查看日誌則必須要使用Logcat工具。 Android提供了一個日誌工具類是Log,總共有個等級,級級遞增。
5.1,Log.v()
這個方法用於列印那些最為瑣碎的,意義最小的日誌資訊。對應層級 verbose,是Android 日誌裡面層級最低的一種。
5.2,Log.d()
這個方法用於列印一些調試資訊,這些資訊對你偵錯工具和分析問題應該是有協助的。對應層級 debug,比 verbose 高一級。
5.3,Log.i()
這個方法用於列印一些比較重要的資料,這些資料應該是你非常想看到的,可以幫你分析使用者行為的那種。對應層級 info,比 debug 高一級。
5.4,Log.w()
這個方法用於列印一些警告資訊,提示程式在這個地方可能會有潛在的風險,最好去修複一下這些出現警告的地方。對應層級 warn,比 info 高一級。
5.5,Log.e()
這個方法用於列印程式中的錯誤資訊,比如程式進入到了 catch 語句當中。當有錯誤資訊列印出來的時候,一般都代表你的程式出現嚴重問題了,必須儘快修複。對應層級 error,比 warn 高一級。 小提醒:定製自己的日誌工具
比如,你正在編寫一個比較龐大的項目,期間為了方便調試,在代碼的很多地方都列印了大量的日誌。最近項目已經基本完成了,但是卻有一個非常讓人頭疼的問題,之前用於調試的那些日誌,在項目正式上線之後仍然會照常列印,這樣不僅會降低程式的運行效率,還有可能將一些機密性的資料泄露出去。
那該怎麼辦呢,難道要一行一行把所有列印日誌的代碼都刪掉?顯然這不是什麼好點子,不僅費時費力,而且以後你繼續維護這個項目的時候可能還會需要這些日誌。因此,最理想的情況是能夠自由地控制日 志的列印,當程式處於開發階段就讓日誌列印出來,當程式上線了之後就把日誌屏蔽掉。
那麼我們可以自訂一個日誌工具類,對Android原生的工具類封裝下。
public class LogUtil { public static final int VERBOSE=1; public static final int DEBUG=2; public static final int INFO=3; public static final int WARN=4; public static final int ERROR=5; public static final int NOTHING=6; public static final int LEVEL=VERBOSE; //發布新版本時候 等級為6 public static void v(String tag,String msg){ if(LEVEL <=VERBOSE){ Log.v(tag, msg); } } public static void d(String tag,String msg){ if(LEVEL <=DEBUG){ Log.d(tag, msg); } } public static void i(String tag,String msg){ if(LEVEL <=INFO){ Log.i(tag, msg); } } public static void w(String tag,String msg){ if(LEVEL <=WARN){ Log.w(tag, msg); } } public static void e(String tag,String msg){ if(LEVEL <=ERROR){ Log.e(tag, msg); } }}
可以看到,我們在 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 就可以了。
Android系統簡介