平臺簡介
令人激動的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
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程序。
你剛剛完成的"Hello,
World"例子我們稱之為”程序化”的界面編排。意思就是說構建你的應用程序界面是直接使用的源代碼。如果你已經完成過很多界面程序,你大概熟悉像此類
的方式是多么脆弱:一個對布局小小的修改會對源代碼造成很頭疼的事情。如果忘掉與View的緊密結合,這個導致代碼出錯和浪費你的調試時間的界面問題也會
很簡單。
這就是為什么Android提供了一種可替換的界面構建方式: 基于XML的布局文件。最簡單的解釋這個概念的方式就是展示一個例子。 我們就用剛才創建的項目來進行演示,達到相同的界面效果。
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 {
/** Called when the activity is first created. */
@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 {
/** 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開發文檔。通過下面的鏈接查看全部內容。
http://code.google.com/android/intro/hello-android.html