Eclipse開發Android應用程序入門

Eclipse開發Android應用程序入門




By Chris Blunthtml


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


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


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


爲神馬選Android


Android是一個基於Linux內核的開源平臺, 而且被安裝在來自於不一樣廠商的上千種設備中。Android將各類移動設備的硬件如 
電子羅盤,攝像頭,GPS,方向感應,等等暴露給你的應用程序。

Android的免費開發工具可讓你以0成本開始編寫你的軟件。當你想向世界展現你的應用程序的時候,你能夠將你的軟件發佈到Google的 
Android 市場。向Andriod Market 發佈程序只一次性的收取註冊費用(25元),而且不像蘋果的App Store 
,對每一次的提交都要作檢查,除非你的程序明顯地違法,在通過一個快速檢查的流程後,才能讓你的程序提供給客戶下載和購買。github


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



  • 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的開發人員網頁中詳盡地解釋了具體的安裝配置過程app



  • 爲你的平臺下載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.eclipse


Android Open Source Project 平臺是開源的,可是不包括Google公司的私有化擴展,好比Google 
Map。若是不選擇使用Google的API,Google的地圖功能就不會在你的應用程序中生效。除非你有特別的緣由,不然咱們推薦你選擇Google平臺,由於這樣你可享受到Google的擴展類庫提供的便利。ide



  • 選擇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中內容改成以下的內容:








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

# /res/layouts/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  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








1
2
3
4
5
6
7
8
9
10
11
12
13
14

...
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








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

...
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








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

...
// 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








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

...
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








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

...
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
相關文章
相關標籤/搜索