Eclipse开发Android应用程序入门




ByChris Blunt


翻译:赵锟
原文出处: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 ProjectGoogle.


Android Open Source Project平台是开源的,但是不包括Google公司的私有化扩展,比如Google
Map。如果不选择使用Google的API,Google的地图功能就不会在你的应用程序中生效。除非你有特别的原因,否则我们推荐你选择Google平台,因为这样你可享受到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为你创建一个新虚拟设备。
  • 关闭theAndroid 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 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








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 =

更多相关文章

  1. 利用半透明对话框实现新浪微博android客户端首次运行时的提示界
  2. 针对Android(安卓)模拟器启动慢的问题
  3. Android(安卓)studio4.0 解决导入包Error 报错问题
  4. selector选择器
  5. Android开发实战三之导入现有Android工程项目
  6. android背景选择器selector用法汇总
  7. Android设置权限问题
  8. 教你配置安卓开发环境!(附带开发通讯教程)
  9. Ubuntu 下用 Eclipse 编译调试 Android(安卓)NDK 工程

随机推荐

  1. Android代码优化
  2. [百度空间] [原]跨平台编程注意事项(三):
  3. Android应用程序模型:应用程序,任务,进程,线
  4. 【Android】lib依赖
  5. android 4.4 电池电量管理底层分析(C\C+
  6. 下载并编译Chrome浏览器For Android
  7. Android状态栏功能介绍
  8. Android资源文件在配置文件中的使用
  9. android系统开发 AP 和 BP 简要说明
  10. android支持https通讯,交叉编译 libcurl l