"淺談Android"第一篇:Android系統簡介

 近來,看了一本書,名字叫作《第一行代碼》,是CSDN一名博主寫的,一本Android入門級的書,比較適合新手。看了書以後,有感而發,想來進行Android開發已經有一年多了,但欠缺系統化的學習,知識雜亂無章,沒有條理和總結。所以,想一想我是否能夠嘗試的寫些文章,來對本身以前學過的知識和工做經驗進行概括和整理,整理出本身的知識體系呢。因此,就有這篇文章的誕生,若是其中理解不到位的地方,望園裏的兄弟姐妹給予指出錯誤,咱們共同討論,一塊兒進步。我一直相信一句話,好東西要分享,不斷地分享,直至溫暖整個世界。
 目前安排是一週一篇文章,由於從前期每篇文章主題的思考,素材收集,代碼驗證,思惟導圖設計,是很耗時間的,若是碰到問題沒解決的話,就順延到下一週,寧願速度慢點,但要保證寫出來的東西是原創的,對人有幫助才行。
 這篇的主題是」什麼是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構建本身的應用程序。好比有活動管理器、View系統。內容提供器、通知管理器等。
 
  1.4,應用層
    全部安裝在手機上的應用程序都是屬於這一層的,好比系統自帶的聯繫人、短信等程序,或者咱們從Google Play上下載的程序,包括咱們本身開發的應用程序。

2,Android已發佈的版本

  有圖有真相:
 
 
 從圖中咱們能看到,Android最新版已經5.0了,名叫Android 5.0 Lollipop,中文簡稱爲」棒棒糖「。自從2008年9月,谷歌正式發佈了Android 1.0系統,這也是Android系統最先的版本,隨後的幾年,谷歌以驚人的速度不斷更新發布Android系統,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%。

 3,Android應用特點

  Android主要有什麼特點呢,有如下幾個方面來體現:html

  • 四大組件
  • 豐富的系統控件
  • 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上沒法實現的應用。好比「微信搖一搖"_你懂得,「搜歌搖一搖」等功能。

4,Android開發環境

  開發環境搭建所須要的軟件,配置等攻略,相信你們網上搜一搜,這類文章太多了。這裏只強調重要幾個工具: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,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版本

6,Logcat工具

  有圖有真相:微信

  

    日誌在任何項目的開發過程當中都會起到很是重要的做用,在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原生的工具類封裝下。
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 常量的值小於或等於對應日誌級別值的時候,纔會將日誌打印出來。ide

    這樣就把一個自定義的日誌工具建立好了,以後在項目裏咱們能夠像使用普通的日誌工具同樣使用 LogUtil,
    好比打印一行 DEBUG 級別的日 志就能夠這樣寫:LogUtil.d("TAG", "debug log");
    打印一行 WARN 級別的日誌就能夠這樣寫:LogUtil. w("TAG", "warn log");
    而後咱們只須要修改 LEVEL 常量的值,就能夠自由地控制日誌的打印行爲了。好比讓LEVEL 等於 VERBOSE 就能夠把全部的日誌都打印出來,讓 LEVEL 等於 WARN 就能夠只打印警告以上級別的日誌,讓 LEVEL 等於 NOTHING 就能夠把全部日誌都屏蔽掉。使用了這種方法以後,剛纔所說的那個問題就不復存在了,你只須要在開發階段將LEVEL 指定成 VERBOSE,當項目正式上線的時候將 LEVEL 指定成 NOTHING 就能夠了。

7,Hello World

    好了,說了這麼多,這些只是一些理論的東西,要想更深刻的理解,必需要本身動手作Demo,咱們能夠去建立一個Hello World程序試試,用Eclipse+ADT幫咱們建立的默認項目就是Hello World.
 

閱讀擴展

源於對掌握的Android開發基礎點進行整理,羅列下已經總結的文章,從中能夠看到技術積累的過程。
1,Android系統簡介
相關文章
相關標籤/搜索