平台簡介
令人激動的Google手機作業系統平台-Android正式發布了,這是一個開放原始碼的作業系統,核心為Linux. 作為開發人員,我們所關心的是這個平台的架構以及所支援的開發語言。下面是這個平台的架構模型:
這個平台有以下功能:
+ Application framework: 可重用的和可替換的組件部分,在這個層面上,所有的軟體都是平等的。
+ Dalvik virtul machine: 一個基於Linux的虛擬機器。
+ Integrated browser: 一個基於開源的WebKit引擎的瀏覽器,在應用程式層。
+ Optimized graphics: 包含一個自訂的2D圖形庫和基於OpenGL ES 1.0 標準的3D實現。
+ SQLite: 資料庫
+ Media support: 通用的音頻,視頻和對各種圖片格式的支援(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
+ GSM Telephony: GSM 移動網路, 硬體支援。
+ Bluetooth, EDGE, 3G, and WiFi: 都依賴於硬體支援。
+ Camera, GPS, compass, and accelerometer: 都依賴於硬體支援。
+ Rich development environment: 包含一套完整的開發工具集,方便跟蹤調試,記憶體檢測和效能測試,而且提供了Eclipse的外掛程式。
下面我們就來親身體驗一下Android程式的開發之旅。
先介紹一下開發環境,下面是對系統及相關軟體的版本要求:
作業系統:
Windows XP or Vista
Mac OS X 10.4.8 or later (x86 only)
Linux (tested on Linux Ubuntu Dapper Drake)
Supported Development Environments
Eclipse
Eclipse 3.2, 3.3 (Europa)
Android Development Tools plugin (optional)
Other development environments or IDEs
JDK 5 or JDK 6 (JRE alone is not sufficient)
Not compatible with Gnu Compiler for Java (gcj)
Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows
我使用Eclipse 3.3 + JDK 1.6. + Ant 1.7 的組合。還有兩個重要的就是: Android SDK 以及 Android 用於Eclipse 中的外掛程式。
Android SDK 的下載連結: http://code.google.com/android/
如果你是第一次使用這些軟體,請注意安裝順序和設定好環境變數。 一般的順序是先安裝 JDK 然後 解壓 ant 壓縮包,然後設定 java 環境變數和 ant 環境變數, 然後是解壓 Android SDK ,再設定 Android SDK的環境變數。 總之就是把 JDK, ANT, Android SDK的路徑添加到 path 裡。
Android for eclipse plug in 在安裝過程很簡單,通過網路安裝外掛程式就可以了,這個是 URL: https://dl-ssl.google.com/android/eclipse/
具體的配置過程,可以查看:http://code.google.com/android/intro/installing.html#otherides
以下為一個hello Android的開發步驟:
建立一個項目:
建立一個新項目是很簡單的,只要你安裝了Eclipse外掛程式,並且你的Eclipse軟體版本在3.2或3.3,你就可以開始開發了。
首先, 看一下要建立"Hello, World"程式從進階層面上有哪些步驟:
1, 通過 File -> New -> Project 菜單,建立新項目"Android Project"
2, 填寫新項目各種參數。
3, 編輯自動產生的程式碼模板。
盡此而已,我們通過下面的詳細說明來完成每個步驟。
1, 建立一個新的Android項目
啟動Eclipse, 選擇 File -> New -> Project 菜單, 如果你安裝好了Android的Eclipse外掛程式,你將會在彈出的對話方塊中看到"Android Project" 的選項。
選擇“Android Project”,點擊 Next 按鈕。
2, 填寫項目的細節參數.
下面的對話方塊需要你輸入與項目有關的參數:
這個表格中詳細介紹了每個參數的含義:
Project Name: 包含這個項目的檔案夾的名稱。
Package Name: 包名,遵循JAVA規範,用包名來區分不同的類是很重要的,例子中用到的是"com.google.android",你應該按照你的計划起一個有別於這個的路徑的名稱。
Activity Name: 這是項目的主類名,這個類將會是Android的Activity類的子類。一個Activity類是一個簡單的啟動程
序和控製程序的類。它可以根據需要建立介面,但不是必須的。
Application Name: 一個易讀的標題在你的應用程式上。
在"選擇欄"的 "Use default location" 選項,允許你選擇一個已存在的項目。
3,編輯自動產生的程式碼。
當項目建立後,你剛才建立的HelloAndroid就會是包含下面的代碼.
public class HelloAndroid extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
}
}
下面我們開始修改它
[構建介面]
當一個項目建立好以後,最直接的效果,就是在螢幕上顯示一些文本,下面是完成後的代碼,稍後我們在逐行解釋。
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}
注意你還需要添加 import android.widget.TextView; 在代碼開端處。
在Android程式中, 使用者介面是由叫做Views類來組織的。 一個View可以簡單理解為可以繪製的對象,像選擇按鈕,一
個動畫,或者一個文字標籤(這個程式中),這個顯示文字標籤的View子類叫做TextView.
如何構造一個TextView:
TexiView tv = new TextView(this);
TextView的構造參數是Android程式的Context執行個體, Context可以控制系統調用, 它提供了諸如資源解析, 訪問資料庫等
等。Activity類繼承自Context類,因為我們的HelloAndroid 是Activity的子類, 所以它也是一個Context類,所以我們能用"this"在TextView構造中。
當我們構造完TextView後,我們需要告訴它顯示什麼:
tv.setText("Hello, Android");
這個步驟很簡單,當我們完成了這些步驟以後,最後要把TextView顯示在螢幕上。
setContentView(tv);
Activity的setContentView()方法指示出系統要用哪個View作為Activity的介面, 如果一個Activity類沒有執行這個方法,將會沒有介面並且顯示白屏。在這個程式中,我們要顯示文本,所以我們傳入已建立好的TextView。
好了,程式碼已經寫好,下面看看運行效果。
運行代碼: Hello, Android
使用Android的Eclipse外掛程式就可以很輕鬆的運行你的程式,選擇Run -> Open Run Dialog。你將會看到下面的對話方塊
下一步, 高亮"Android Application" 標籤, 然後按下左上方的表徵圖(就是像一片紙帶個小星星那個), 或者直接雙擊 "Android Application" 標籤, 你將會看到一個新的運行項目,名為"New_configuration".
取一個可以表意的名稱,比如"Hello, Android", 然後通過Browser按鈕選取你的項目(如果你有很多重專案在Eclipse中,確保你選擇要啟動並執行項目), 然後外掛程式會自動搜尋在你的項目中的Activity類並且將所有找到的添加在"Activity"標籤的下拉式清單中。 我們只有"Hello, Android"一個項目,所以它會作為預設選擇。
點擊"Apply" 按鈕,
到這裡,已經完成了,你只需要點擊"Run"按鈕,然後 Android的模擬器將會啟動,你的應用程式就會被顯示出來。
下次繼續介紹如何把介面的布局用XML表示以及使用命令列進行編譯和運行Android程式。
將介面實現用XML編排
你剛剛完成的"Hello, World"例子我們稱之為”程式化”的介面編排。意思就是說構建你的應用程式介面是直接使用的原始碼。如果你已經完成過很多介面程式,你大概熟悉像此類的方式是多麼脆弱:一個對布局小小的修改會對原始碼造成很頭疼的事情。如果忘掉與View的緊密結合,這個導致代碼出錯和浪費你的調試時間的介面問題也會很簡單。
這就是為什麼Android提供了一種可替換的介面構建方式: 基於XML的布局檔案。最簡單的解釋這個概念的方式就是展示一個例子。我們就用剛才建立的項目來進行示範,達到相同的介面效果。
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hello, Android"/>
AndroidXML布局檔案的大體的結構很簡單。它是一個標籤的樹,任何一個標籤就是View類的名字。在這個例子中, 它是一個很簡單的只有一個元素的樹,一個 TextView。 你可以使用任何繼承自View類的名字作為標籤的名字。包括在你的代碼中自訂的View類。這個結構可以很容易的構建介面,它比你在原始碼中使用的結構和文法更簡單。這個模式的設計構想來自於Web開發。就是可以將介面和應用程式邏輯分離的模式。
在這個例子中, 也有些是XML的屬性,下面是他們的含義:
屬性 含義
xmlns:android 這是XML命名空間的聲明,它是告訴Android的工具, 你將要涉及到公用的屬性已被定義在XML命名空間。在每一個Android的布局檔案的最外邊的標籤必須有這個屬性。
android:layout_width 這個屬性定義了在螢幕上這個View可用的寬度是多少。
android:layout_height 這個屬性定義了在螢幕上這個View可用的高度是多少。
android:text 設定TextView所包含的常值內容,當前設定為”Hello, Android”資訊
以上就是一個XML布局檔案的樣子,但是你需要放在哪裡?它要放在你的項目目錄的res/ 檔案夾下。 “res”是”resources”的縮寫,它是存放所有非代碼資源的檔案夾,包含象圖片,本地化字串和XML布局檔案。
這些Eclipse的外掛程式已經給你建立好了,在我們上面的例子中,我們沒有使用它。在包瀏覽器中,展開res目錄的layout. 並且編輯 main.xml, 替換掉那個常值內容,然後儲存。
現在,在包瀏覽狀態,開啟在代碼檔案夾中名為 R.java的檔案, 你將看到下面的內容:
public final class R {
public static final class attr {
};
public static final class drawable {
public static final int icon=0x7f020000;
};
public static final class layout {
public static final int main=0x7f030000;
};
public static final class string {
public static final int app_name=0x7f040000;
};
};
一個項目的R.java檔案是一個定義所有資源的索引檔案。使用這個類就像使用一種速記方式來引用你項目中包含的資源。這個有點特別的強大像對於Eclipse這類IDE的代碼編譯特性,因為它使你快速的,互動式的定位你正在尋找的特定引用。
到目前需要注意的重要事情是叫做”layout”的內部類和他的成員變數”main”, 外掛程式會通知你添加一個新的XML布局檔案,然後從新產生這個R.java檔案,比如你添加了新的資源到你的項目,你將會看到R.java也相應的改變了
最後重要的事情是你需要去修改你的HelloAndroid原始碼,去使用新的XML布局你的介面。替換掉編碼式的介面模式。下面是你的新代碼的樣子,你可以看到,代碼變得更加簡單了。
public class HelloAndroid extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
}
}
當你做這些改變的時候,不要僅僅複製,粘貼到你的代碼中,嘗試去體驗R.java的代碼編譯特點。你會發現它對你有很大的協助。
現在完成這些改變以後,你就可以重新運行你的程式,然後你會發現兩種不同的介面編排方式會產生同樣的效果。
調試你的項目
這個用於Eclipse中的Android外掛程式作為Eclipse中的調試器也具有優秀的相容性。要示範這些,讓我們製造一個bug在代碼中,改變你的HelloAndroid原始碼象下面這樣:
public class HelloAndroid extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Object o = null;
o.toString();
setContentView(R.layout.main);
}
}
這次簡單的變化會引起一個NullPointerException異常,如果你再次運行程式,你將會看到螢幕
要找到什麼地方出錯,需要設定個斷點在你原始碼的 “Object o = null;” 行後(你可以雙擊在Eclipse中顯示行數的左部地區), 然後選擇 Run -> Debug 選擇最後一次的運行載入。你的程式將會重起模擬器,但是這個時候它會掛起,當它走到你剛才設定的斷點的時候,在Eclipse的偵錯模式視圖中,它就會停止在你的代碼處。就像你可以在其他任意程式中做這個一樣。。
使用其它的IDE工具建立項目
調試你的項目
這個用於Eclipse中的Android外掛程式作為Eclipse中的調試器也具有優秀的相容性。要示範這些,讓我們製造一個bug在代碼中,改變你的HelloAndroid原始碼象下面這樣:
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Object o = null;
o.toString();
setContentView(R.layout.main);
}
}
這次簡單的變化會引起一個NullPointerException異常, 如果你再次運行程式,你將會看到下面的螢幕:
要找到什麼地方出錯,需要設定個斷點在你原始碼的 “Object o = null;” 行後(你可以雙擊在Eclipse中顯示行數的左部地區), 然後選擇 Run -> Debug 選擇最後一次的運行載入。 你的程式將會重起模擬器,但是這個時候它會掛起,當它走到你剛才設定的斷點的時候,在Eclipse的偵錯模式視圖中,它就會停止在你的代碼處。就像你可以在其他任意程式中做這個一樣。。
使用其它的IDE工具建立項目
如果你沒有使用Eclipse(比如你使用其他的IDE開發工具,或者簡單的只使用文本編輯和命令列工具), 那麼這個外掛程式不會幫上你忙,別擔心,你不會因為沒有使用Eclipse而丟失任何開發能力。
其實Android的Eclipse外掛程式也是將一套Android SDK的開發套件裝了。(這些工具像:模擬器,aapt, adb, ddms, 和其他的,可以參考google的相關文檔), 因此, 它也可以被其他工具封裝,比如ant.
在Android SDK中包含一個Python指令碼,叫做”activityCreator.py”, 它用於為了你的項目建立所有的原始碼和目錄的編譯環境(個人理解), 也就是會產生可用於ant編譯的build.xml. 這樣就允許你的項目從命令列方式建立或者整合到你選擇的IDE中。
比如,要建立一個HelloAndroid項目,就像剛才我們用Eclipse中的一樣, 你可以使用下面的命令:
activityCreator.py --out HelloAndroid com.google.android.hello.HelloAndroid
要編譯你的項目,你要接著使用ant命令,當命令列提示成功時候,你會看到一個名為HelloAndroid.apk的檔案在”bin”目錄下。 這個.apk檔案是一個Android的包, 它需要使用”adb”工具安裝進模擬器。
到這裡為止,我向大家展示了Android平台的程式簡單的開發執行個體,本人水平有限,翻譯的時間倉促,一定有很多錯誤和疏漏,請多提修改意見。本系列教程的主要內容都是翻譯自Google的Android開發文檔。通過下面的連結查看全部內容。
作者“如果有夢”