Eclipse開發Android應用程序入門

  翻譯:趙錕

   轉載自http://kb.cnblogs.com/page/96781/  

   原文出處:http://www.smashingmagazine.com/2010/10/25/get-started-developing-for-android-with-eclipse/

  如今的移動設備應用程序開發充滿着讓人振奮的東西。功能強大的硬件支持,平板電腦,多樣的軟件平臺(塞班 OS,iOS,WebOS,Windows Phone 7…),移動設備開發者前景充滿了機會和挑戰。

  當你想要開始開發你的移動設備程序時,如此多的選擇可能讓你產生困擾。究竟應該選擇神馬平臺?我應該學習神馬語言?爲你計劃的項目選擇神馬工具?在本教程中,你將學會如何在Google公司的開源移動設備操作系統Android下開發應用程序。

  爲神馬選Android

  Android是一個基於Linux內核的開源平臺, 並且被安裝在來自於不同廠商的上千種設備中。Android將各種移動設備的硬件如 電子羅盤,攝像頭,GPS,方向感應,等等暴露給你的應用程序。
  Android的免費開發工具可以讓你以0成本開始編寫你的軟件。當你想向世界展示你的應用程序的時候,你可以將你的軟件發佈到Google的 Android 市場。向Andriod Market 發佈程序只一次性的收取註冊費用(25元),並且不像蘋果的App Store ,對每一次的提交都要做檢查,除非你的程序明顯地違法,在經過一個快速檢查的流程後,才能讓你的程序提供給客戶下載和購買。

  下面是Android對於開發者的優點:

  • Android的SDK可以在Windows,Mac和Linux上運行,因此你不需要爲了開發環境支付額外的新硬件投入。(譯者注:我曾近在Win7 64x + VMWare上成功的安裝Mac Snow leopard + XCode的開發環境,對於愛用盜版的人來說,這點MS優勢不是很大啊)

  • 構建於JAVA上的SDK。如果你熟悉JAVA語言,你就是事半功倍了。(譯者注:這個酷殼有篇文章討論過,大家可以參看:http://coolshell.cn

  • 你只要在Android Market上發佈應用程序,你將有潛在的成千上萬的用戶。而且你不一定非要把程序發佈在Android Market上,你還可以在你的博客上發佈。而且有傳言,Amazon已近在最近準備搭建他們自己的Android 應用程序商店了。

  • 除了了技術性的SDK 文檔外,還可以找到其他更多的使用者和開發者的資源。

  閒話少說——下面讓我們進入正題,開始開發我們的Android應用程序。

  安裝Eclipse和Android SDK

  Android應用程序的推薦開發環境是帶有Android開發包插件(Android Devlopment Toolkit (ADT))的Eclipse。我在這裏簡要說明一下安裝流程。如果你需要更多的細節,Google的開發人員網頁中詳盡地解釋了具體的安裝配置過程

  • 爲你的平臺下載Android SDK(Windows , Mac OS X 或者 Linux)。

  • 在你的硬盤上解壓下載文件 (在Linux, 我使用 /opt/local/).

  • 如果你沒有安裝Eclipse,下載並安裝Eclipse JAVA 集成開發環境包。 用於編程的話, Google推薦使用Eclipse 3.5 (Galileo).

  • 運行Eclipse 並選擇Help->Install New Software.

  • 在Available Software窗口中點擊Add按鈕。

  • 進入 Android Development Tools 的Name輸入框, 在Location 輸入框輸入https://dl-ssl.google.com/android/eclipse/

  • 檢查可用軟件中有Developer Tools並點擊OK按鈕。這將安裝Android Development Tools 和DDMS, Android的調試工具。

  • 點擊Next和Finish按鈕以完成安裝,安裝完成後,你需要重啓你的Eclipse一次。

  • 在Eclipse重啓後,選擇Window->Preference 後你可以在分類列表中看到Android這一項了。

  • 現在需要告訴Eclipse,你的Android SDK安裝在什麼地方。點擊Android項後瀏覽選擇你解壓後的Android SDK所在的路徑。例如/opt/local/android-sdk。

  • 點擊OK按鈕,保存信息。

  選擇Android 平臺

  在你開始編寫Android應用程序之前,你需要爲你需要開發應用程序的Android設備下載SDK平臺。每個平臺都有可以安裝在用戶設備上的不同版本的SDK。對於Android1.5或以上版本,有兩個可用的平臺: Android Open Source Project 和 Google.

  Android Open Source Project 平臺是開源的,但是不包括Google公司的私有化擴展,比如Google Map。如果不選擇使用Google的API,Google的地圖功能就不會在你的應用程序中生效。除非你有特別的原因,否則我們推薦你選擇Google平臺,微羣控weixinqunkong8.com因爲這樣你可享受到Google的擴展類庫提供的便利。

  • 選擇Window Android SDK and AVD Manager.

  • 點擊左欄中的Available Packages 並選擇選擇Respository中有效的Android SDK平臺。

  • 你可以選擇列表中所需要的平臺,或全選下載所有有效的平臺。當你選擇完畢,單擊Install Selected 並完成安裝。


  一旦成功的下載所有的平臺後,你就可以準備開始開發Android應用程序了。

  創建一個新的Android項目

  Eclipse的新建項目嚮導能爲你創建一個新的Android項目,並生成可以開始運行的文件和代碼。通過嚮導生成代碼,可以讓你馬上得到一個Android程序運行的直觀映像併爲你提供了一個幫助你快速入門的方法:

  • 選擇 File->New->Project…

  • 選擇Android Project

  • 在New Project 對話框, 鍵入如下的設置:

1

2

3

4

5

6

Project Name: BrewClock

Build Target: Google Inc. 1.6 (Api Level 4)

Application Name: BrewClock

Package Name: com.example.brewclock

Create Activity: BrewClockActivity

Min SDK Version: 4

  在點擊了完成按鈕之後,Eclipse將爲你創建一個新的可以運行的Android項目。注意,你通知了Eclipse生成了一個叫做BrewClockActivity的Activity。這個Activity的代碼用於運行你的應用程序。生成的代碼將在程序運行時非常簡單地顯示一條“Hello World”消息。

  包

  包名是你的應用程序標示。當你開始準備在Android Market上發佈你的應用程序的時候,Android用這個標識符精確地記錄你的應用程序的更新過程,因此讓包名唯一是非常重要的。儘管我們在這裏使用了com.example.brewclock這樣的名字空間,對於真實的應用程序,你應該選擇類似於com.你的公司名.你的應用程序名 這樣的包名。

  SDK 版本

  Min SDK Version 是你的Android程序所能運行得最早版本號。對於每個新發布的Android,SDK會增加並修改一些方法。通過選擇一個版本號,Android(Android Market)會知道你的應用程序能運行在等於或晚於指定版本的設備之上。

  運行你的應用程序

  現在讓我們開始在Eclipse中運行我們的應用程序。由於是第一次運行,Eclipse將會詢問你的項目類型:

  • 選擇Run->Run 或 按下 Ctrl+F11.

  • 選擇Android Application 並點擊 OK 按鈕.

  Eclipse 將會在一個Android設備上運行一個應用程序。在這個時候,由於你沒有任何Android設備,因此在運行時一定會返回一個失敗,並且詢問你是否要新建一個Android的虛擬設備。(AVD)

  Android 虛擬設備

  Android 虛擬設備 (AVD) 是一個模擬真實世界中Android設備的模擬器,例如移動電話或平板電腦。你可以在不買任何真實Android設備情況下,使用AVD測試你的應用。

  你可以創建任意多個你喜歡的AVD,每個可以建立在不同版本的Android平臺之上。對於你創建的每個Android設備,你可以配置不同的硬件屬性,比如是否具有物理鍵盤,是否支持GPS,攝像頭的像素,等等。

  在你開始運行你的應用程序之前,你需要創建你的AVD,來運行指定的SDK平臺(Google APIs 1.6)。

  現在讓我開始:

  • 如果還沒有開始運行你的應用程序,點擊run(或按下 Ctrl+F11)。

  • 當目標設備彈出警告,點擊Yes 以創建新的AVD。

  • 單擊Android SDK and AVD Manager 對話框內的New 按鈕.

  • 爲你的AVD鍵入如下的設置:

1

2

3

4

Name: Android_1.6

Target: Google APIs (Google Inc.) - API Level 4

SD Card Size: 16 MiB

Skin Built In: Default (HVGA)

  • 單擊 Create AVD 讓Android爲你創建一個新虛擬設備。

  • 關閉the Android SDK and AVD Manager 對話框.

  運行代碼

  再次運行你的應用程序(Ctrl+F11)。 Eclipse 將build 你的項目並運行一個新的AVD。記住,AVD模擬了一個完全的Android系統,因此你需要有耐心來等待這個緩慢的啓動過程,就如同你重啓真實的Android設備一樣。一個好的做法是不要關閉你的AVD,直到你完成了你一天的工作。
  當你的模擬器啓動後,Eclipse自動地安裝並運行你的應用程序。

  開發你第一個Android應用

  生成的代碼能良好的運行,但是你真正想要的是開發一個真實的應用程序。爲此,我們首先果一個鹹蛋的設計流程,並開始創建一個可以讓你部署在Android設備上的應用。

  大部分的開發者(包括我自己)都喜歡每天一杯咖啡或茶。在下一節中,你將開發一個簡單的泡茶計數器應用程序來記錄用戶泡了多少杯茶,併爲泡每杯茶做一個定時器。

  你可以從GitHub下載整個教程的源代碼.

  設計用戶界面

  在開發任何Android應用程序之前的第一步就是設計和開發用戶界面。下面是一個我們這個應用程序的用戶界面的一個概覽。

  用戶將能通過+和-按鈕設置一個泡茶的定時器。當單擊開始按鈕,定時器將開始按指定的時間遞減。除非用戶再次點擊按鈕以取消計時,否則當定時器爲0的時候,累計的泡茶計數brew將增加1。

  開發用戶界面

  Android 用戶界面或佈局layouts, 是通過XML文檔來描述的,可以在項目的res/layouts目錄下找到。在之前運行在模擬器上代碼中,我們可以看到由eclipse自動生成的佈局代碼在res/layouts/main.xml 中。

  Eclipse有一個圖形化的佈局設計器,通過在屏幕上的拖拽控制來完成佈局的設計,然而,我卻發現直接寫XML並使用圖形佈局來預覽是更容易的方式。

  現在讓我們對main.xml做一些工作以達到上圖的效果:

  • 在Eclipse中通過雙擊PackageExplorer的res/layouts/main.xml 來打開xml。

  • 點擊屏幕下方main.xml 來切換爲xml視圖。

  將main.xml中內容改爲如下的內容:

# /res/layouts/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">
 
<LinearLayout
   
android:orientation="horizontal"
   android:layout_width
="fill_parent"
   android:layout_height
="wrap_content"
   android:padding
="10dip">
   
<TextView
     
android:layout_width="wrap_content"
     android:layout_height
="wrap_content"
     android:textSize
="20dip"
     android:text
="Brews: " />
   
<TextView
     
android:layout_width="fill_parent"
     android:layout_height
="wrap_content"
     android:text
="None"
     android:gravity
="right"
     android:textSize
="20dip"
     android:id
="@+id/brew_count_label" />
 
</LinearLayout>
 
<LinearLayout
   
android:orientation="horizontal"
   android:layout_width
="fill_parent"
   android:layout_height
="wrap_content"
   android:layout_weight
="1"
   android:gravity
="center"
   android:padding
="10dip">
   
<Button
     
android:id="@+id/brew_time_down"
     android:layout_width
="wrap_content"
     android:layout_height
="wrap_content"
     android:text
="-"
     android:textSize
="40dip" />
   
<TextView
     
android:id="@+id/brew_time"
     android:layout_width
="wrap_content"
     android:layout_height
="wrap_content"
     android:text
="0:00"
     android:textSize
="40dip"
     android:padding
="10dip" />
   
<Button
     
android:id="@+id/brew_time_up"
     android:layout_width
="wrap_content"
     android:layout_height
="wrap_content"
     android:text
="+"
     android:textSize
="40dip" />
 
</LinearLayout>
 
<Button
   
android:id="@+id/brew_start"
   android:layout_width
="fill_parent"
   android:layout_height
="wrap_content"
   android:layout_gravity
="bottom"
   android:text
="Start" />
</LinearLayout>

  正如你所見的,Android的XML佈局文件是繁瑣的,但卻能讓你控制到屏幕的各個元素。

  在Android中最重要的接口元素是佈局Layout容器,例如例子中使用的LinearLayout 。這些元素對於用戶是不可見的,但是卻扮演者例如Buttons 和TextViews這些元素的佈局容器。

  Android中有幾種不同類型的佈局視圖layout view,每一種都用於開發不同的佈局。如同LinearLayout 和AbsoluteLayout ,TableLayout 可以讓你使用更爲複雜的基於表格結構的佈局。你可以在SDK的API文檔的通用佈局對象中查找到更多的佈局。

  關聯你的佈局Layout與代碼

  保存你的佈局,在Eclipse中點擊Run圖標或按下Ctrl+F11重新在模擬器中運行你的程序。你現看到不是之前出現的Hello World消息了,你將看到Android顯示了一個新的界面。

  如果點擊界面上的任何按鈕,他們將期望的顯示爲高亮,但是不會執行任何操作。現在讓我們在佈局修改後改進一下我們的源碼:

  # /src/com/example/brewclock/BrewClockActivity.java

...
import android.widget.Button;
import android.widget.TextView;

public class BrewClockActivity extends Activity {
 
/** Properties **/
 
protected Button brewAddTime;
 
protected Button brewDecreaseTime;
 
protected Button startBrew;
 
protected TextView brewCountLabel;
 
protected TextView brewTimeLabel;

 ...
}

  下一步,我們將修改調用onCreate。當Android啓動你的應用程序的時候,Android會首先調用這個方法。 在Eclipse生成的代碼中,onCreate把activity的視圖設置成R.layout.main。這行代碼告訴Android解釋我們的佈局配置XML文件,並顯示它。

  資源對象

  在Android中,R是一個自動生成的對象,這是一個特殊的對象,你可以在代碼中通過這個對象訪問項目中的資源(佈局,字符串,菜單,圖標,…) 。每個資源都有一個給定的id。在上面的那個佈局文件中,有一些@+id XML 屬性。我們將通過這些值來關聯佈局中的Buttons 與TextViews和我們的代碼和:

  # /src/com/example/brewclock/BrewClockActivity.java

...
public class BrewClockActivity extends Activity {
 ...
 
public void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   
// Connect interface elements to properties
   brewAddTime = (Button) findViewById(R.id.brew_time_up);
   brewDecreaseTime
= (Button) findViewById(R.id.brew_time_down);
   startBrew
= (Button) findViewById(R.id.brew_start);
   brewCountLabel
= (TextView) findViewById(R.id.brew_count_label);
   brewTimeLabel
= (TextView) findViewById(R.id.brew_time);
 }
}

  監聽事件

  爲了檢測到用戶單擊我們的按鈕,我們需要實現一個監聽器listener。你可能會從其他的事件驅動系統中熟悉監聽器或回調函數callbacks。比如Javascript/JQuery事件或Rails的回調函數。

  Android通過Listener接口提供相似的機制,例如OnClickListener,這個接口中定義了那些會被事件觸發的方法。當用戶點擊屏幕的時候,實現OnClickListener 接口將會通知你的應用程序,並告訴他們所按得屏幕按鈕。你當然也需要告訴每個button的ClickListener,以便Android知道具體通知到那個監聽器:

  # /src/com/example/brewclock/BrewClockActivity.java

...
// Be sure not to import
// `android.content.dialoginterface.OnClickListener`.
import android.view.View.OnClickListener;

public class BrewClockActivity extends Activity
 
implements OnClickListener {
 ...
 
public void onCreate(Bundle savedInstanceState) {
   ...
   
// Setup ClickListeners
   brewAddTime.setOnClickListener(this);
   brewDecreaseTime.setOnClickListener(
this);
   startBrew.setOnClickListener(
this);
 }
 ...
 
public void onClick(View v) {
   
// TODO: Add code to handle button taps
 }
}

  下一步,我們將增加每個按鈕按下的處理過程。我們將爲Activity類增加4個屬性,這些屬性將用來讓用戶設置和記錄我們泡茶時間,泡茶計數,計時器是否在運行的標誌。

  # /src/com/example/brewclock/BrewClockActivity.java

...
public class BrewClockActivity extends Activity
 
implements OnClickListener {
 ...
 
protected int brewTime = 3;
 
protected CountDownTimer brewCountDownTimer;
 
protected int brewCount = 0;
 
protected boolean isBrewing = false;
 ...
 
public void onClick(View v) {
   
if(v == brewAddTime)
     setBrewTime(brewTime
+ 1);
   
else if(v == brewDecreaseTime)
     setBrewTime(brewTime
-1);
   
else if(v == startBrew) {
     
if(isBrewing)
       stopBrew();
     
else
       startBrew();
   }
 }
}

  注意我們使用了Android提供的類CountDownTimer 。這讓我們非常容易的創建和開始一個簡單的遞減計數,這個遞減計數在遞減運行的時候,每當執行一個遞減就發出一個通知。你將在下面的startBrew 方法中使用到這個計數器。

  在下面的方法是所有處理邏輯,這些處理邏輯用於處理設置泡茶時間,開始停止計數和維護計數器。我們同樣地在onCreate方法中來初始化我們的 brewTime和 brewCount變量。

  將這些代碼放入到不同的類中是一種好做法。但是爲了簡潔,我把我們所有的代碼都放到了BrewClockActivity中:

  # /src/com/example/brewclock/BrewClockActivity.java

...
public class BrewClockActivity extends Activity
 
implements OnClickListener {
 ...
 
public void onCreate(Bundle savedInstanceState) {
   ...
   
// Set the initial brew values
   setBrewCount(0);
   setBrewTime(
3);
 }

 
/**
  * Set an absolute value for the number of minutes to brew.
  * Has no effect if a brew is currently running.
  *
@param minutes The number of minutes to brew.
 
*/
 
public void setBrewTime(int minutes) {
   
if(isBrewing)
     
return;

   brewTime
= minutes;

   
if(brewTime < 1)
     brewTime
= 1;

   brewTimeLabel.setText(String.valueOf(brewTime)
+ "m");
 }

 
/**
  * Set the number of brews that have been made, and update
  * the interface.
  *
@param count The new number of brews
 
*/
 
public void setBrewCount(int count) {
   brewCount
= count;
   brewCountLabel.setText(String.valueOf(brewCount));
 }

 
/**
  * Start the brew timer
 
*/
 
public void startBrew() {
   
// Create a new CountDownTimer to track the brew time
   brewCountDownTimer = new CountDownTimer(brewTime * 60 * 1000, 1000) {
     @Override
     
public void onTick(long millisUntilFinished) {
       brewTimeLabel.setText(String.valueOf(millisUntilFinished
/ 1000) + "s");
     }

     @Override
     
public void onFinish() {
       isBrewing
= false;
       setBrewCount(brewCount
+ 1);

       brewTimeLabel.setText(
"Brew Up!");
       startBrew.setText(
"Start");
     }
   };

   brewCountDownTimer.start();
   startBrew.setText(
"Stop");
   isBrewing
= true;
 }

 
/**
  * Stop the brew timer
 
*/
 
public void stopBrew() {
   
if(brewCountDownTimer != null)
     brewCountDownTimer.cancel();

   isBrewing
= false;
   startBrew.setText(
"Start");
 }
 ...
}

  這段代碼唯一和Android相關的就是使用setText方法來設置文本的顯示文字。在startBrew方法中,我們創建,並開始了一個CountDownTimer來開每秒遞減計數直到計數器爲0。注意,我們定義了CountDownTimer以內聯方式監聽onTick 和 onFinish方法。 onTick 方法將每1000毫秒(1秒)執行一次,並遞減, 當計數器爲0的時候,onFinish方法被調用。

  避免在你的代碼中硬編碼

  爲了使教程代碼簡單,我故意地在程序中將控件的標號直接寫到字串中(例如: “Brew Up!”, “Start”, “Stop”) 通常,這不是一個好的做法,因爲如果在大型項目中,這樣做會使得修改變得麻煩。

  Android 提供了一種簡潔的方法讓你使用R對象來使字符串和代碼分離。R 讓你在xml文件(res/values/strings.xml)定義所有你程序中字符串,並讓你可以在代碼中應用到這些字符串。例如:

  # /res/values/strings.xml

<string name="brew_up_label">Brew Up!</string>
...

  # /res/com/example/brewclock/BrewClockActivity.java

...
brewLabel.setText(R.string.brew_up_label);
...

  現在,如果你想改變Brew Up! 字樣,你只要一次性的修改strings.xml文件就行了。你的應用將生成一堆代碼來保證你程序中所有使用到這些字符串的地方都能被生效!

  運行Brew Clock

  代碼完成之後,現在是試運行程序的時候了。單擊Run 或 Ctrl+F11 在模擬器中啓動我們的應用. 所有都運行良好,你將會看到你創建的用戶界面在準備時間一到就可以喝你所泡的茶了!試着設置不同的時間,並點擊Start 觀看倒計時。

  總結

  在這個關於Android的簡單介紹中,你已學會如何安裝Android SDK和Eclipse的Android 開發工具插件(ADT)。你也學會如何創建一個模擬設備,並通過這個設備來測試你的應用程序。你還學會了如何開發Android應用程序。上面了那些作爲標題的關鍵概念在以後你自己開發Android應用程序的時候將會經常用到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章