Android心得1.1–Android項目的目錄與安裝以及啟動過程分析

1.Android項目的目錄架構

src : java原代碼存放目錄

gen : 自動生成目錄

gen 目錄中存放所有由Android開發工具自動生成的文件。目錄中最重要的就是R.java文件。 這個文件由Android開發工具自動產生的。Android開發工具會自動根據你放入res目錄的xml界面文件、圖標與常量,同步更新修改R.java文件。正因為R.java文件是由開發工具自動生成的,所以我們應避免手工修改R.java。R.java在應用中起到瞭字典的作用,它包含瞭界面、圖標、常量等各種資源的id,通過R.java,應用可以很方便地找到對應資源。另外編繹器也會檢查R.java列表中的資源是否被使用到,沒有被使用到的資源不會編繹進軟件中,這樣可以減少應用在手機占用的空間。

res : 資源(Resource)目錄

在這個目錄中我們可以存放應用使用到的各種資源,如xml界面文件,圖片或數據。

res/drawable 專門存放png、jpg等圖標文件。在代碼中使用getResources().getDrawable(resourceId)獲取該目錄下的資源。drawable文件下有三個文件:drawable-hdpi、drawable-ldpi、drawable-mdpi分別代表高中低三種尺寸的屏幕大小。Android系統自動根據實際手機屏幕大小調用者三個文件的其中一個。

res/layout 專門存放xml界面文件,xml界面文件和HTML文件一樣,主要用於顯示用戶操作界面。

res/values 專門存放應用使用到的各種類型數據。不同類型的數據存放在不同的文件中,如下:

· strings.xml 定義字符串和數值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得資源。它的作用和struts中的國際化資源文件一樣。

<?xml version="1.0" encoding="UTF-8"?>

<resources>

  <string name="itcast">傳智播客</string>

</resources>

 

· arrays.xml 定義數組。

<?xml version="1.0" encoding="utf-8"?>

<resources>

   <string-array name="colors">

        <item>red</item>

        <item>yellow</item>   

        <item>green</item>   

        <item>blue</item> 

   </string-array>

</resources>

 

· colors.xml 定義顏色和顏色字串數值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得這些資源。例子如下:

 <?xml version="1.0" encoding="UTF-8"?>

<resources>

  <color name="contents_text">#ff000000</color>

</resources>

 

· dimens.xml 定義尺寸數據,在Activity中使用getResources().getDimension(resourceId) 取得這些資源

 <?xml version="1.0" encoding="UTF-8"?>

<resources>

  <dimen name="key_height">50dip</dimen>

</resources>

 

· styles.xml 定義樣式。

<?xml version="1.0" encoding="utf-8"?>

<resources>

   <style name="itcastText" parent="@style/Text">

        <item name="android:textSize">18px</item>

        <item name="android:textColor">#008</item>

   </style>

</resources>

 

res/anim/ 編譯成幀動畫的XML文件。

res/xml/ 在Activity中使用getResources().getXML()讀取該目錄下的XML資源文件。

res/raw/ 該目錄下的文件將直接被復制到設備上。編譯軟件時,這些數據不會被編譯,它們被直接加入到程序安裝包裡。 為瞭在程序中使用這些資源,你可以調用getResources().openRawResource(ID) , 參數ID形式:R.raw.somefilename。

 

assets :資源目錄

Android除瞭提供/res目錄存放資源外,在assets目錄下也可以存放資源文件,而且/assets目錄下的資源文件不會在R.java自動生成ID,所以讀取其下的文件 必須指定文件路徑,如:file/android_assets/xxx.3gp.

AndroidManifest.xml : 功能清單文件

 這個文件列出瞭應用程序所提供的功能,在這個文件中,你可以指定應用程序使用到的服務,還需要在改文件中聲明權限(如電話服務、互聯網服務、短信服務、GPS服務等等)。另外當你新添加一個Activity的時候,也需要在這個文件中進行相應配置,隻有配置好後,才能調用此Activity。還有你開發好的各種組件(Activity、ContentProvider、BroadcastReceiver、Service即四大組件)也需要在改文件中進行配置。

default.properties:項目環境信息,一般是不需要修改此文件,比如告訴開發工具(即Eclipse)開發的Android應用程序的版本號:Project target.target=android-8。

2.   清單文件中部分代碼的含義

包名用於圍標;

<android:icon=”@drawable/icon”>這個的含義分別是:icon翻譯過來是圖標的意思,@代表R文件;所以這個表達式代表的含義是該應用的圖標ID是R文件下的drawable下的icon;

<android:name=”.MainActivity”>,MainActivity如果是當前包下的類,則“.”可以省略,但是建議別省略,否則容易出錯;如果是子包下的類,則一定不能省略。例如:<android:name=”.sub.MainActivity”>

Activity一定要放在所在包或其子包中,不能放在其他包中。

清單文件是在軟件安裝的時候被讀取的,而不是在程序運行的時候。可以把清單文件看成是一個註冊表,實際上不是啊!

3.   <inter-filter>是意圖過濾器,作用是:對數據進行過濾,如果匹配怎幹一些事,否則什麼都不幹;意圖代表一個想法,是用來匹配你要做的事情。

意圖過濾器標簽中包含兩個參數標簽。分別是<activity>、<categroy>分別是動作名稱和類別名稱。這兩個參數的作用是:把應用安裝和顯示在手機的啟動列表中,不加這兩個參數也行,但是你編寫的應用不會顯示在手機的啟動列表中。即中兩個參數是應用的啟動入口,所以這兩個參數隻能出現在一個activity中,不能出現在多個,因為一個應用程序隻有有一個入口。

4.  應用的安裝過程分析

   .javaà.classà.dex(通過Android SDK下的dx工具)à打包(簽名,開發工具自行進行)à.apk     

.dex和.apk文件在工作空間的相應項目(即應用)下的bin文件下,所有.java類都編譯進一個.dex文件中;

簽名在Eclipse下的windowàproferrncesàAndroidàBuild中,Default debug keystore

    內部執行的程序時:adb install c:\xxx.apk.

 5.  應用的啟動過程分析

   (1)過程分析。

創建線程à創建主線程à在主線程中實例化Activityà操作系統會把應用有關的信息(context)存在Activity中à調用onCreate()方法(此方法由android系統調用而非程序員調用)

  (2)采用sdk安裝目錄tools下的adb命令進行軟件的安裝和卸載:

  安裝:adb install c:\hello.apk

  卸載:adb uninstall <應用的包名> 例子:adb uninstall cn.cadn.phone;

 

6.      Android顯示單位

px (pixels)像素

   一般HVGA代表320×480像素,這個用的比較多。

dip或dp (device independent pixels)設備獨立像素

   這個和設備硬件有關,一般為瞭支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。

sp (scaled pixels — best for text size)比例像素

   主要處理字體的大小,可以根據系統的字體自適應。

除瞭上面三個顯示單位,下面還有幾個不太常用:

 in (inches)英寸

 mm (millimeters)毫米

 pt (points)點,1/72英寸

為瞭適應不同分辨率,不同的像素密度,推薦使用dip ,文字使用sp。

7.  佈局介紹

   有四種:LinearLayout(線性佈局)、RelativeLayout(相對佈局)、TableLayout(表格佈局)、FrameLayout(幀佈局)。

   佈局還分為為水平佈局(horizontal)和垂直佈局(vertical)。
頂級元素一定要指明命名空間,非頂級的可以不指明,但是一旦用作頂級元素時則一定要指明命名空間。例如:

<LinearLayout xmlns:android=”www.aiwalls.com

https://schemas.android.com/apk/res/android”>

作者:tianyazaiheruan

發佈留言