[Android 泥水匠] Android基礎 之一:淺談Android架構到HelloWorld案例的剖析

做者:泥沙磚瓦漿木匠
網站
http://blog.csdn.net/jeffli1993
我的簽名打算起手不凡寫出鴻篇巨做的人,每每堅持不了完成第一章節。html

交流QQ羣:【編程之美 365234583】http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_AonqzL0rpdQAjjqlHQQjava

若是個人幫到了你,是否樂意捐助一下或請一杯啤酒也好呢?有你支持,乾的更好~ android

點這參與衆籌 個人支付寶:13958686678 程序員

1.1前言

  泥瓦匠又和你們見面了,在移動平臺幹過原生態開發,也幹過hybrid應用。能夠看看相關的文章 Android UI 。因此多多少少在這塊仍是有點了解。如今不少高級語言能夠開發app程序,包括Android,到我以爲目前Java語言開發Android程序仍是很火,很重要的。天然,Java的底子不可少。能夠看看泥瓦匠寫的很多基礎 Java Basic 數據庫

  咱們生活在一個通信的時代,我經歷過得2.5G時代,也就是GPRS等的時代,前面還有2G(GSM等)、1G,後面則你們熟悉的3G 4G的時代,明顯的顯示是下載速度的變化。Android則是一個這個時代通信的平臺系統。天然其中包括Android源自於PC系統的基礎,其功能包括所謂的內核系統、網絡、文件、2D、3D圖形、數據庫等。其中裏面咱們常常會使用其中的功能,他們組成了安卓(Andriod)。編程

 

本文提綱以下:小程序

  1.2 淺析Android架構網絡

  1.3 HelloWord的工程結構(★★★☆☆)架構

  1.4 編譯中學習(★★★★☆)app

  1.5 總結

1.2淺析Android架構

  Android其實也不難,泥瓦匠總是會說一些不大不小的話。可是我感受仍是有點道理,好比Android是技術,技術來源於生活。因此咱們要學會學着把技術還原到生活中,這樣其實咱們就知道其起源,其原理。對了咱們還能夠類比,好比

  咱們徹底能夠把Android看成一個地球(叫作安卓地球)。


  問: 安卓地球爲何會自轉,會公轉?(誰驅動)

  答曰:安卓地球自轉工做來自太陽對它的做用。天然同理可得:Android也有屬於它的一套驅動系統,它叫作Linux內核(Linux Kernel),裏面包括着各類底層的驅動(藍牙 USB WiFi等)和一些像對電源的管理。而後咱們之後的一切操做都是基於這個基石搭建的。

 

  二問:安卓地球上爲何有海,陸地和空氣?(擁有什麼)

  答曰:安卓地球裏面擁有不少主要功能的實現。Android有一套庫(library),好比咱們常見存儲數據操做的SQLite庫,提供了數據庫和對數據的操做。還有WebKit庫位瀏覽Web提供支持。還有不少,我後面用圖總結。另外這裏同一層的有一個核心庫和虛擬機(Dalvik),叫做Android運行時。這詞雖然有點拗口,可是泥瓦匠會給你解釋解釋。下面咱們也會詳細介紹。

 

  三問:安卓地球上的(碼)農民能種田,(碼)漁民能捕魚。這是地球對使用者的幫助。

  答曰:安卓地球公開了其操做系統的各類功能,使他們能開發應用程序時用這些功能。咱們把它叫作應用框架(Application Framework)。

 

  最後問:那些安卓地球上吃飯,泡腳的人享受着的生活。這是看得見摸得着的。那是安卓地球在應用程序使用層上,也就是咱們常常提起的應用程序。稱爲應用程序(Application)。

 

  泥瓦匠的記憶宮殿:我以爲好記性不如爛筆頭,好筆頭不如來畫個圖。因此我總結學習須要方法,學習須要思路。下面我給出的是Android架構淺析的總結圖:

組織架構

1.3HelloWord的工程結構

  跟着泥瓦匠動手吧,扯了一下架構。以爲‘紙上學來總覺淺絕知此事要躬行’。說幹就幹吧。首先碼農程序員最熟悉的Hello World的愛人瞭解透徹,別看這個小程序,其實學問很大。細節注意每每是一我的的轉折點哦。

  elicpse → 右鍵 new android application → next.. → finish

image

  圖中,紅色框框中是咱們要了解的知識。由於如今Android版本2.3開始造成了新的里程碑,因此咱們須要在兼容方面,也就是圖中Mininum Require SDK 和 Target SDK 的設置。下面是Compile With,由於這要懂得下Dalvik VM,由於咱們知道不一樣版本的編譯下會有點不一樣的區別。或是修改或是新增。DalvikVM 和 JVM到底有什麼區別呢?區別不大,但效果很大。爲什麼呢?
  由於,在PC端JVM 一般咱們javac 而後 .java文件到 .class及其打包下的 .jar。他們是基於堆棧架構,DVM呢?DVM其實也是到字節文件那塊而已。有什麼不一樣呢?
  答案在這裏:DVM(dalvik vm)基於寄存器架構,其過程是: .java → javac → .class → dx.bat → .dex → .odex化。而odex化 把文件預先提取出來做用 加快軟件加載速度和開機速度。大大使咱們在Android系統上,操做以爲方便流暢。而後大家會發現旁邊多了一個工程目錄,這是咱們要講的重點

image

  下面咱們來看看這工程的含義,其中難點我也會標註:

  1. src: 存放應用程序的.java源代碼。
  2. gen: 編譯器生成的R.java文件,存放res文件夾下全部資源的id
  3. project.properties: 指定當前工程採用的開發工具包的版本
  4. libs: 當前工程所依賴的jar包.
  5. assets: 程序中用到的全部資產,HTML、文本文件、數據庫等
  6. bin: 生成過程當中ADT生成的文件,他們生成Android應用二進制文件,包含運行時所需一切.(難點下節點講)
  7. res(resources): 資源文件.
        drawable: 存放程序所用的圖片.
        layout: 存放android的佈局文件.
        menu: 存放android的OptionsMenu菜單的佈局.
        values (應用程序所須要的數據. 會在R文件中生成id)
            strings.xml 存放android字符串.
            dimens.xml 存放屏幕適配所用到的尺寸.
            style.xml 存放android下顯示的樣式.
        values-sw600dp 7寸平板所對應的值
        values-sw720dp-land 10寸平板所對應的值
        values-v11 指定3.0版本以上的手機顯示的樣式.
        values-v14 指定4.0版本以上的手機顯示的樣式.
  8. AndroidManifest.xml: android應用程序的入口文件. 聲明瞭android裏邊的組件. 和相關配置信息.
  9. proguard-project.txt: 加密當前程序所使用.(難點下節點講)

  你們和瓦匠想的同樣,很想跑起來試試,那就跑唄:右鍵項目 → run as Android application 便可。
 

  其中補充下,項目中一個重要文件:清單文件 AndroidManifest.xml,其內容以下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.nsg.main"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="org.nsg.main.HelloActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  其中定義了版本代碼,應用運行所需的操做系統版本,還有些基礎的logo,名稱等配置。值得泥瓦匠一說的是,在activity元素裏面有個元素<intent-filter>的,它的做用:
  一、意圖篩選器名稱android.intent.action.MAIN,代表應用入口點。
  二、意圖篩選器類別android.intent.category.LAUNCHER,代表應用從設備啓動器圖標啓動。

 

泡杯熱咖啡,冬天暖暖。而後休息會,咱們下面講編譯時。

 

1.4 編譯中學習

  泥瓦匠,怎麼說編譯中學習,咱們須要學習什麼呢?
  答曰:編譯中學習,編譯工程的變化,及DVM的一些特徵。

  當咱們右鍵 run 的時候,你們會發現工程目錄下的bin文件夾會發生變化,如圖所示:

image

  這些都是什麼呢?讓咱們意義認識他們吧。

  • dexedlibs:編譯後apk所須要的支持包
  • res:裏面有所須要的一切資源:視頻 圖片等
  • lasses.dex:其實相似java文件編譯後的class。只不過android就一個文件裏面搞定。
  • apk:二進制流形式的文件
  • 下面兩個則是一些引用清單。

  爲何說DVM很支持或者很適合在移動終端使用呢。其中不少有趣的特性分析給你們:
一、dex文件把全部編譯後的文件整到一塊兒,健身了文件的尺寸和IO操做,也提升了類的查找。
二、基於寄存器,代碼執行效率高。


其餘也有不少,你們能夠去找這方面的DVM知識。
 

1.5 總結

Android第一篇我以爲是否是講的太多了,無論了,反正泥瓦匠都認爲應該知道的東西。別見怪哦~

仍是那句話,泥瓦匠想說:

如以上文章或連接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章

相關文章
相關標籤/搜索