【Android開篇】-- Android環境搭配
Android環境搭配
1、說明
我們主要是在windows下用Eclipse進行Android開發,故該Android的環境搭配說明只是針對Windows下的EclipseIDE版本。
2、所需軟體
軟體名稱 |
版本及軟體全稱 |
JDK1.6 |
jdk-6u13-windows-i586-p.exe |
Eclipse3.4.2 |
eclipse-java-ganymede-SR2-win32.zip |
Google Android SDK |
android-sdk-windows-2.1_r1.zip |
ADT-0.9.0 |
ADT-0.9.0.zip |
3、安裝過程
說明:各軟體的安裝過程沒有什麼特殊的選項問題,更一般的軟體安裝無二,故具體的安裝過程沒有列出;主要的問題是一些環境變數等的設定。
1)安裝JAVA JDK SE1.6
設定環境變數
①、JAVA_HOME
JAVA_HOME=C:\ProgramFiles\Java\jdk1.6.0_13(選擇你的安裝目錄)
②、JAVA_JRE_HOME
JAVA_JRE_HOME=C:\ProgramFiles\Java\jdk1.6.0_13\jre(選擇安裝目錄下的jre目錄)
③、CLASSPATH
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt. jar;%JRE_HOME%\lib;%JRE_HOME%\lib\rt.jar;%JAVA_JRE_HOME%\lib;
%JAVA_JRE_HOME% \lib\rt.jar
④、Path(要使用命令列工具必須配置)
Path=%Android_SDK_HOME%\tools;%JAVA_HOME%\bin;%JRE_HOME%\bin;%JAVA_JRE_HOME%\bin;
2)解壓Eclipse3.4.2
解壓eclipse-java-ganymede-SR2-win32.zip 到C:\EclipseForAndroid\(這個路徑及目錄可以自定義了)
3)解壓GoogleAndroidSDK
解壓android-sdk-windows-1.5_r1.zip 到C:\MobilePhoneDEV\AndroidSDK(路徑及目錄同Eclipse)
4)Eclipse 下安裝ADT0.9.0
複製ADT-0.9.0.zip 到C:\ (可以是任何位置了)
開啟C:\EclipseForAndroid\eclipse.exe(安裝位置不同,該目錄也會不同)
設定工作路徑為C:\WorkSpace
Help->Soft Ware Update->findand install->Search for new features to install -> Next ->
NewArchived site->選中C:\ADT-0.9.0.zip->OK->Finish->ADT-0.9.0.zip選勾-> Next -> Accept -> Next ->Finish- >InstallAll->Restart “YES” (Eclipse3.3版本)
Help->SoftWare Update..->Available Software->Add Site..->Local->選中ADT-0.9.0.zip ->OK->將ADT-0.9.0.zip選勾->Install…(Eclipse3.4版本)
5)設定GoogleAndroidSDK 路徑
Window->preferences->選中Android->SDKLocation中選擇GoogleAndroidSDK的安
裝路徑C:\MobilePhoneDEV\AndroidSDK->OK
二、Android專案目錄結構
1、根目錄下的檔案及資料夾應用
1)src/
該目錄用於存放編寫的JAVA原始碼
2)gen/
該目錄不用我們開發人員維護,但又是非常重要的目錄。該目錄用來存放由Android開發工具所生成的目錄;該目錄下所有的檔案都不是有Android開發人員建立的,而是由ADT自動生成的。
3)Android X.X
該目錄用於存放Android自身的jar包
4)assets/
該目錄用於存放應用中用到的類似於視訊檔案、MP3等一些媒體檔案。
5)res/
resource,為資源目錄。該目錄可以存放一些圖示、介面檔案、應用中用到的文字檔案資訊等。
6)AndroidManifest.xml
該檔案是清單檔案,它列出了應用中所使用的所有元件,如“Activity”,以及廣播接收者、服務等元件。
7)default.properties
該檔案存放了專案對應的一些環境配置,如應用要求的最低Android版本等。它一般不需要手工去修改。
2、assets與res目錄區別
資源是Android應用程式不可或缺的部分。資源是你想包含和引入到應用程式裡面的一些外部元素,比如圖片、音訊、視訊、文字字串、佈局、主題等。每個Android應用程式包含一個資源目錄(res/)和資產目錄(assets/),但資產不經常被使用,因為它們的應用很少。僅在需要讀取原始位元組流時才需要儲存資料在assets/目錄。
res/和assets/目錄均在Android專案樹的頂端,和原始碼目錄(src/)處在同一級上。資源和資產從表面上看沒多大區別,不過總體上,在儲存外部內容時資源用得更多。
真正的區別在於任何放置在資源目錄裡的內容可以通過您的應用程式的R類訪問,這是被Android編譯過的。而任何存放在資產目錄裡的內容會保持它的原始檔案格式,為了讀取它,你必須使用AssetManager來以位元組流的方式讀取檔案。所以保持檔案和資料在資源中(res/)中會更方便訪問。
資源(res/)被編譯到最終的 APK 檔案裡。Android 建立了一個被稱為R的類 ,這樣你在Java程式碼中可以通過它關聯到對應的資原始檔。R類包含的子類的命名由資源在res/目錄下的資料夾名稱所決定。
3、res/目錄下子目錄詳解
1)res/drawable資料夾
res/目錄下三個dawable資料夾(在Android1.6及以前版本只有一個drawable資料夾),【drawable-*dpi】,區別只是將圖示按解析度高低來放入不同的目錄。
①、【drawable-hdpi】用來存放高解析度的圖示。
②、【drawable-mdpi】用來存放中等解析度的圖示。
③、【drawable-ldpi】用來存放低解析度的圖示。
程式執行時可以根據手機解析度的高低選取相應目錄下的圖示。不過,如果不想準備過多圖片,那麼也可以只准備一張圖示將其放入三個目錄的任何一箇中去。
2)res/layout資料夾
該資料夾下包含佈局檔案,ADT預設自動建立的是“main.xml”檔案。預設建立的main.xml檔案格式及主要內容如下(可以自定義新增各種元件):
<?xml version=”1.0” encoding=”utf-8”?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:orientation=”vertical” android:layout_width=”fill_parent” android:layout_height=”fill_parent” > <TextView> android:layout_width=”fill_parent” android:layout_height=”wrap_parent” android:text=”@string/hello” /> </LinearLayout> <!-- LinearLayou是一種佈局方式(線性佈局) --> |
3)res/values資料夾
①、strings.xml
它用於定義字串和數值,在Activity中可以使用getResources().getString(resourceID)或getResources().getText(resourceID)取得資源。
該檔案的格式如下:
<?xml version=”1.0” encoding=”utf-8”?> <resources> <string name=”resourceID”> XXX </string> … …. </resources> |
將應用中出現的文字單獨存放在strings.xml中,主要是為了:A、國際化;B、減少應用的體積,減低資料冗餘。
②、arrays.xml
該檔案用於定義陣列,在Activity中使用getResources().getStringArray(resourceID)獲取一個String陣列。
該檔案的格式如下:
<?xml version=”1.0” encoding=”utf-8”?> <resources> <string-array name=”resourceID”> <item> XXX </item> … … <string-array> … … </resources> |
③、colors.xml
定義顏色及顏色字串陣列,可以在Activity中使用getResources().getDrawable(resourceID)或getResoureces().getColor(resourceID)獲取顏色資源。
該檔案格式如下:
<?xml version=”1.0” encoding=”utf-8”?> <resources> <color name=”resourceID(white)”> #000000 </color> … … </resources> <!-- color標籤中的name屬性中括號內的內容為name取值方式的例項 --> |
④、dimens.xml
用於定義尺寸資料,在Activity中可以使用getResources().getDimension(resourceID)獲取相關資源。
該檔案格式如下:
<?xml vesion=”1.0” encoding=”utf-8”?> <resources> <dimen name=”resourceID(height)”> 10dip <dimen> </resources> |
⑤、styles.xml
該檔案用於自定義樣式。檔案格式如下:
<?xml version=”1.0” encoding=”utf-8”?> <resources> <style name=”***”> <item name=”android:textSize”> 18px </item> <item name=”android:textColor”> #000000 </item> … … </style> </resources> |
4、gen/目錄下的R.java
R.java檔案中預設有attr、drawable、layout、string等四個靜態內部類,每個靜態內部類分別對應一種資源,如layout靜態內部類對應res/layout中的介面檔案,其中每個靜態內部類中的靜態常量分別定義一條資源識別符號。
如“public static final int main=0x7f030000;”對應的是res/layout目錄下的main.xml檔案。具體的對應關係如圖2.1。
R.java檔案除了有自動標識資源的“索引”功能外,還有一個主要的功能是:當res目錄中的某個資源在應用中沒有被使用到時,在該應用被編譯的時候系統就不會把未使用到資源編譯到應用的APK包中,這樣可以節省Android手機資源。
圖2.1 R.java與各資源對應關係圖
5、元件識別符號
1)在Activity中獲取資源
①、獲取系統資源方法:android.R.resource_type.resource_name
②、獲取自定義資源:R.resource_type.resource_name
2)在XML檔案中引用資源
①、@[package:] type / name,如個使用自己包下的資源可以省略package。
如main.xml以及AndroidMainfest.xml檔案中通過“@drawable / icon”的方式獲取圖示資源。其中“@”代表“R.java”類;“drawable”代表R.java的靜態內部類“drawable”;“icon”代表靜態內部類“drawable”中的靜態屬性“icon”,而該屬性指向res目錄下的“drawable-*dpi”中的“icon.png”圖示。
②、引用Android系統中的資源,得加上包名“android:”,如【android:textColor=“@android:color/red”】。
3)“@+id/string_name”表示式
“+”表示在R.java的名為id的內部類中新增一條記錄,該記錄的名稱為“string_name”。如“@+id/button_ok”即在R.java檔案的id這個靜態內部類中新增一條常量名為“button_ok”,該常量就是該資源的識別符號。通過該方式生成的資源識別符號,也可以通過以“@id/string_name”的方式引用。
6、AndroidManifest.xml
1)AndroidManifest.xml檔案簡介
每個應用程式都有一個功能清單檔案AndroidManifest.xml(一定是這個名字)在它的
根目錄裡。這個清單檔案給Android系統提供了關於這個應用程式的基本資訊,系統在執行
任何程式程式碼之前必須知道這些資訊。開發的Activity、Broadcast、Service都要在AndroidManifest.xml中進行定義。使用到系統自帶的服務如撥號服務、應用安裝服務、GPRS服務等都必須在AndroidManifest.xml中宣告許可權。
2)AndroidManifest.xml主要包含的功能
①、命名應用程式的Java應用包,這個包名用來唯一標識應用程式;
②、描述應用程式的元件——活動、服務、廣播接收者、內容提供者;對實現每個元件 和公佈其功能(比如,能處理哪些意圖訊息)的類進行命名。這些宣告使得Android系統瞭解這些元件以及它們在什麼條件下可以被啟動;
③、決定應用程式元件執行在哪個程序裡面;
④、宣告應用程式所必須具備的許可權,用以訪問受保護的部分API,以及和其它應用程 序互動;
⑤、宣告應用程式其他的必備許可權,用以元件之間的互動;
⑥、列舉測試裝置Instrumentation類,用來提供應用程式執行時所需的環境配置及其 他資訊,這些宣告只在程式開發和測試階段存在,釋出前將被刪除;
⑦、宣告應用程式所要求的Android API的最低版本級別;
⑧、列舉application所需要連結的庫;
3)AndroidManifest.xml檔案格式
該檔案的格式如下,應用開發者不能新增自己的元素或屬性。
<?xml version=”1.0” encoding=”utf-8”?> <manifest> <uses-permission … /> <permission … /> <permission-tree … /> <permission-group … /> <instrumentation … /> <uses-sdk … /> <uses-configuration … /> <uses-feature … /> <supports-screens … /> <application> <activity> <intent-filter> <action … /> <actegory … /> <data … /> </intent-filter> <meta-data … /> </actitvity> <activity-alias> <intent-filter> … … </intent-filter> <meta-data .. /> </activity-alias> <service> <intent-filter> … … </intent-filter> <meta-data … /> </service> <recevier> <intent-filter> … … </intent-filter> <meta-data> </recever> <provider> <grant-uri-permission .. /> <path-permission … /> <meta-data … /> </provider> <uses-library .. /> </application> </manifest> |
7、Android程式的執行流程分析
Android應用程式釋出到手機上之後,該應用的圖示時,系統會將這個點選事件包裝成一個Intent,該Intent包含兩個引數:
{ action :"android.intent.action.MAIN",
category :"android.intent.category.LAUNCHER"
}
這個意圖被傳遞給HelloWorld這個應用之後在應用的功能清單檔案中尋找與該意圖匹配的意圖過濾器,如果匹配成功,找到相匹配的意圖過濾器所在的Activity元素,再根據<activity>元素的“name”屬性來尋找其對應的Activity類。接著Android作業系統建立該
Activity類的例項物件,物件建立完成之後,會執行到該類的onCreate方法,此OnCreate
方法是重寫其父類Activity的OnCreate方法而實現。onCreate方法用來初始化Activity例項
物件。如下是HelloWorld.java類中onCreate方法的程式碼。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); … … } |
其中super.onCreate(savedInstanceState)的作用是呼叫其父類Activity的OnCreate方法來實現對介面的畫圖繪製工作。在實現自己定義的Activity子類的OnCreate方法時一定要記得呼叫該方法,以確保能夠繪製介面。setContentView(R.layout.main)的作用是載入一個介面。該方法中傳入的引數是“R.layout.main”,其含義為R.java類中靜態內部類layout的靜態常量main的值,而該值是一個指向res目錄下的layout子目錄下main.xml檔案的識別符號。因此代表著顯示main.xml所定義的畫面。
Android程式執行的整個序列圖如下所示。
圖2.2 Android引用執行序列圖