Android SDK 2.3与Eclipse最新版开发环境搭建(一)

一、 背景和准备

1. Android简介

Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。可以把它简单理解成Linux上套了一个JAVA的壳。

Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金。Android
的程序可以采用JAVA开发,因为它的虚拟机(Virtual Machine) Dalvik,只是它将JAVA的bytecode
转成自己的格式,回避掉需要付给SUN 有关JAVA 的授权费用。因此,Android 开发环境是需要JDK的。

2. Android 网络资源

Android的网站是:http://www.android.com/,目前还可以登陆,比较悲剧的是:其Partners部分:http://source.android.com/和Developers部分:http://developer.android.com/,大陆地区已经无法访问。

Android的系统要求请参考:http://androidappdocs.appspot.com/sdk/requirements.html

当前最新版本的Android SDK下载器(真正的SDK还是需要另外下载的),小生是无法直接到官网http://developer.android.com/sdk/index.html
下载的,于是另外找了一个地址http://androidappdocs.appspot.com/sdk/index.html,下载链接和说明如下:

Android SDK for Windows
android-sdk_r08-windows.zip
http://dl.google.com/android/android-sdk_r08-windows.zip

installer_r08-windows.exe (Recommended)
http://dl.google.com/android/installer_r08-windows.exe
Android SDK for Mac OS X (intel)
android-sdk_r08-mac_86.zip
http://dl.google.com/android/android-sdk_r08-mac_86.zip
Android SDK for Linux (i386)
android-sdk_r08-linux_86.tgz
http://dl.google.com/android/android-sdk_r08-linux_86.tgz

Here’s an overview of the steps you must follow to set up the
Android SDK:
   1. Prepare your development
computer and ensure it meets the system requirements.
   2. Install the SDK starter
package from the table above. (If you’re on Windows, download the
installer for help with the initial setup.)
   3. Install the ADT Plugin for
Eclipse (if you’ll be developing in Eclipse).
   4. Add Android platforms and
other components to your SDK.
   5. Explore the contents of the
Android SDK (optional).

3. 软件包下载

a. JDK 1.6

下载网址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

当前最新版本为Java SE 6 Update 23

小生机器上安装的是:jdk1.6.0_21,也一样用,其实只要你是JDK1.5以上就可以了。

b. Android SDK下载器

下载地址上面已经给出了,可以根据你的系统选择不同的安装包。小生是windows 2003
server,因此下载了http://dl.google.com/android/android-sdk_r08-windows.zip,之后直接解压缩即可。

c. Eclipse IDE

Eclipse 3.4 (Ganymede)以后版本均可。小生下载了最新版本的Helios (3.6)

二、 JAVA环境

Windows上配置JAVA环境变量如下:

JAVA_HOME

clip_image002

Path:

clip_image004

Android是什么

一、简介

黑莓和 iPhone
都提供了受欢迎的、高容量的移动平台,但是却分别针对两个不同的消费群体。黑莓是企业业务用户的不二选择。但是,作为一种消费设备,它在易用性和
“新奇特性” 方面难以和 iPhone 抗衡。Android
则是一个年轻的、有待开发的平台,它有潜力同时涵盖移动电话的两个不同消费群体,甚至可能缩小工作和娱乐之间的差别

如今,很多基于网络或有网络支持的设备都运行某种 Linux
内核。这是一种可靠的平台:可经济有效地进行部署和提供支持,并且可直接作为面向部署的良好的设计方法。这些设备的 UI 通常是基于
HTML 的,可通过 PC 或 Mac
浏览器查看。但并不是每个设备都需要通过一个常规的计算设备来控制。想象一下传统的家用电器,例如电炉、微波炉或面包机。如果您的家用电器由
Android 控制,并且有一个彩色触摸屏,会怎么样?如果电炉上有一个 Android
UI,那么操控者甚至可以烹饪点什么东西。

二、Android术语

在 Eclipse 环境中开发 Android 应用程序需要了解 Eclipse 环境和 Android
平台的知识。了解以下术语会有助于用 Eclipse 插件开发 Android 应用程序。

Open Handset Alliance

这是一个由 Google 公司主导的组织,它由许多公共和私人组织组成。

Android

这是 Open Handset Alliance 的主打产品。它是一种针对移动设备的开放源码操作环境。

模拟器

模拟另一个系统的软件工具 —
这常常是在个人计算机(IBM®、Mac、Linux®)上运行的一个环境,它模拟另一个环境,比如移动计算设备。

Linux

一种开放源码的操作系统内核,许多计算平台都使用这种操作系统,包括服务器、桌面计算机、网络设备和移动计算设备。Android 在
Linux 内核上运行。

Dalvik Virtual Machine

Dalvik VM 是 Android 产品组合中的一种操作环境,它在运行时解释应用程序代码。Dalvik VM 与 Java
VM 相似,但是两者不兼容。

三、Android简史

Android 平台是 Open Handset Alliance 的成果,Open Handset
Alliance 组织由一群共同致力于构建更好的移动电话的公司组成。这个组织由 Google
领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。从软件开发的观点看,Android
正处在开源领域的中心位置。

市场上第一款支持 Android 的手机是由 HTC 制造并由 T-Mobile 供应的
G1。这款设备从设想到推出花了大约一年的时间,惟一可用的软件开发工具是一些实行增量改进的 SDK 发行版。随着 G1
发行日的临近,Android 团队发布了 SDK V1.0,用于这个新平台的应用程序也浮出水面。

为了鼓励创新,Google 举办了两届 “Android Developer
Challenges”,为优胜的参赛作品提供数百万美金的奖励。G1 问世几个月之后,随后就发布了 Android
Market,它使用户可以浏览应用程序,并且可以将应用程序直接下载到他们的手机上。经过大约 18
个月,一个新的移动平台进入公众领域。

四、Android平台

Android 平台被称为一个产品组合,因为它是一系列组件的集合,包括:

  • 基于 Linux 内核的操作系统
  • Java 编程环境
  • 工具集,包括编译器、资源编译器、调试器和模拟器
  • 用来运行应用程序的 Dalvik VM

Android 有丰富的功能,因此很容易与桌面操作系统混淆。Android 是一个分层的环境,构建在 Linux
内核的基础上,它包括丰富的功能。UI 子系统包括:

  • 窗口
  • 视图
  • 用于显示一些常见组件(例如编辑框、列表和下拉列表)的小部件

Android 包括一个构建在 WebKit 基础上的可嵌入浏览器,iPhone 的 Mobile Safari
浏览器同样也是以 WebKit 为基础。

Android 提供多种连接选项,包括 WiFi、蓝牙和通过蜂窝(cellular)连接的无线数据传输(例如 GPRS、EDGE
和 3G)。Android 应用程序中一项流行的技术是链接到 Google 地图,以便在应用程序中显示地址。Android
软件栈还提供对基于位置的服务(例如 GPS)和加速计的支持,不过并不是所有的 Android
设备都配备了必需的硬件。另外还有摄像支持。

过去,移动应用程序努力向桌面应用程序看齐的两个领域分别是图形/媒体和数据存储方法。Android 通过提供对 2D 和 3D
图形的内置支持,包括 OpenGL 库,解决了图形方面的挑战。由于 Android 平台包括流行的开源 SQLite
数据库,因此缓解了数据存储的负担。图 1显示一个简化的 Android 软件层次结构。

1. Android 软件层次结构

clip_image001[1]

五、应用程序架构

如前所述,Android 运行在 Linux 内核上。Android 应用程序是用 Java
编程语言编写的,它们在一个虚拟机(VM)中运行。需要注意的是,这个 VM 并非您想象中的 JVM,而是 Dalvik Virtual
Machine,这是一种开源技术。每个 Android 应用程序都在 Dalvik VM 的一个实例中运行,这个实例驻留在一个由
Linux 内核管理的进程中,如下图所示。

2. Dalvik VM

clip_image002[1]

Android 应用程序由一个或多个组件组成:

活动

具有可视 UI 的应用程序是用活动实现的。当用户从主屏幕或应用程序启动器选择一个应用程序时,就会开始一个动作。

服务

服务应该用于任何需要持续较长时间的应用程序,例如网络监视器或更新检查应用程序。

内容提供程序

可以将内容提供程序看作数据库服务器。内容提供程序的任务是管理对持久数据的访问,例如 SQLite
数据库。如果应用程序非常简单,那么可能不需要创建内容提供程序。如果要构建一个较大的应用程序,或者构建需要为多个活动或应用程序提供数据的应用程序,那么可以使用内容提供程序实现数据访问。

广播接收器

Android 应用程序可用于处理一个数据元素,或者对一个事件(例如接收文本消息)做出响应。

Android 应用程序是连同一个 AndroidManifest.xml
文件一起部署到设备的。AndroidManifest.xml
包含必要的配置信息,以便将它适当地安装到设备。它包括必需的类名和应用程序能够处理的事件类型,以及运行应用程序所需的许可。例如,如果应用程序需要访问网络
— 例如为了下载一个文件 — 那么 manifest
文件中必须显式地列出该许可。很多应用程序可能启用了这个特定的许可。这种声明式安全性有助于减少恶意应用程序损害设备的可能性。

六、所需工具

开始开发 Android 应用程序的最简捷的方式是下载 Android SDK 和 Eclipse IDE。Android
开发可以在 Microsoft® Windows®、Mac OS X 或 Linux 上进行。

本文假设您使用的是 Eclipse IDE 和用于 Eclipse 的 Android Developer Tools
插件。Android 应用程序是用 Java 语言编写的,但是是在 Dalvik VM(非 Java 虚拟机)中编译和执行的。在
Eclipse 中用 Java 语言编程非常简单;Eclipse 提供一个丰富的 Java
环境,包括上下文敏感帮助和代码提示。Java 代码通过编译后,Android Developer Tools
可确保适当地将它打包,包括 AndroidManifest.xml 文件。

虽然没有 Eclipse 和 Android Developer Tools 插件也可以开发 Android
应用程序,但是那样就需要熟悉 Android SDK。

Android SDK 是作为一个 ZIP 文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个 SDK
更新,建议有意识地组织开发环境,以便在不同的 SDK 安装之间轻松地切换。SDK 包括:

android.jar

Java 归档文件,其中包含构建应用程序所需的所有的 Android SDK 类。

documention.html docs 目录

本地和网上提供的 SDK 文档。这些文档的主要形式为 JavaDocs,以便于在 SDK
中导航大量的包。文档还包括一个高级开发指南和 Android 社区的链接。

Samples 目录

samples 子目录包含各种应用程序的源代码,包括 ApiDemo,该应用程序演示了很多 API。这个示例应用程序可以作为
Android 应用程序开发的良好起点。

Tools 目录

包含所有用于构建 Android 应用程序的命令行工具。最常用、最有用的工具是 adb 实用程序(Android Debug
Bridge)。

usb_driver

该目录包含将开发环境连接到支持 Android 的设备(例如 G1 或 Android Dev 1
解锁开发手机)所需的驱动程序。只有 Windows 平台的开发人员才需要这些文件。

Android 应用程序可以在实际的设备上运行,也可以在 Android SDK 附带的 Android Emulator
上运行。图 3 显示 Android Emulator 的主屏幕。

图 3. Android Emulator

clip_image004[1]

七、Android Debug Bridge

adb 实用程序支持一些可选命令行参数,以提供强大的特性,例如复制文件到设备或从设备复制文件。可以使用 shell
命令行参数连接到手机本身,并发送基本的 shell 命令。图 4 显示在通过 USB 线连接到 Windows
笔记本电脑的一个实际设备上运行的 adb shell 命令。

4. 使用 adb shell
命令

clip_image005[1]

在这个 shell 环境中,可以:

  • 显示网络配置,网络配置可显示多个网络连接。注意这多个网络连接:
    • lo 是本地或 loopback 连接。
    • tiwlan0 是 WiFi 连接,该连接由本地 DHCP 服务器提供一个地址。
  • 显示 PATH 环境变量的内容。
  • 执行 su 命令,以成为超级用户。
  • 将目录改为 /data/app,其中存放用户应用程序。
  • 列出包含某个应用程序的目录。Android 应用程序文件实际上是归档文件,可通过 WinZip 之类的软件查看。扩展名为
    apk。
  • 发出 ping 命令,查看 Google.com 是否可用。

从相同的命令提示符环境中,还可以与 SQLite
数据库交互,启动程序以及执行许多其他系统级任务。想像一下您正在连接到电话,因此这是非常了不起的功能。

使用Windows Live Writer的12个理由——转载一篇译文

在线写文章的时候,总可能会分心去做别的事情,比如去检查新邮件,查看一下收入,或者有人想和你聊天。我建议断开网络连接,转而使用一款离线的blog编辑器而不是你所使用的blog平台提供的编辑器,以便写篇更好的文章。

许多blogger一直没有使用离线的blog编辑器,他们没有意识到浪费了多少宝贵的时间去等待他们的blog平台加载编辑器,桌面的blog工具可以非常快的撰写,预览,保存以及发布一篇文章。

有很多桌面blog编辑器可以用,像Windows Live Writer(WLW), Ecto,
w.bloggar和Qumana。作为一个Windows的爱好者,我在用微软的Windows Live
Writer,下面是为什么我喜欢它的原因。

我为什么喜欢Windows Live Writer
  1. 离线撰写文章: 即便是网络连接有问题的时候,我也可以使用Windows Live
    Writer撰写文章,以及保存为草稿,我可以在有网络连接的时候再发布它。
  2. 不需要FTP软件:以前,为了往文章里插入图片,我不得不使用SmartFTP,然后等待图片上传,再转到WordPress的“编写文章”页面,插入图片。使用WLW,我只需要把图片复制、粘贴到文章里,当发布文章时,WLW会自动上传这些图片。
  3. 同一个地方,写多个blog:WLW支持很多blog平台,比如WordPress,Blogger和TypePad,你可以从同一个地方编写文章,即使你有多个blog平台,在也不需要每个都登陆一下。
  4. 支持插件:
    WLW允许你安装插件以扩展功能,例如,有个叫Flickr4Writer的插件,可以用来从
    Flickr
    搜索和插入图片。如果这个插件有个选项,可以搜索有CC许可并可以商业使用和修改的照片,那就更好了。
  5. 网页布局查看模式:
    WLW有个很酷的网页布局查看模式,可以在撰写的时候查看文章的样子,就像在blog上看一样。WLW也可以再你希望的时候更新blog的样式,这非常有用,如果你重新设计了你的blog。这是我喜欢的WLW功能之一。
  6. 保存草稿到日志:WLW也允许我把草稿保存到我的日志,甚至我可以再那里继续编辑它。
    Post Draft to Weblog
  7. 自动链接:
    我不需要再一次次输入常用的连接站点,WLW提供了一个叫做自动链接(工具>选项>自动链接)的功能可以让我保存这些链接(URL,文本和标题)。在一个链接上右键,选择‘添加自动链接表’就可以把它添加到自动链接表中。

  8. 图片效果:
    WLW允许给我的图片设置阴影或者相纸的效果,还有黑白色调,棕褐色调,色温调整,光照色,锐化,高斯模糊,和浮雕(阳文)效果特效。甚至可以用WLW来给图片添加水印。
    Image Effects

  9. 图片操作:通过WLW,我可以旋转图片或者调解亮度和对比度。在我这篇文章里的WLW的logo就是这么旋转的,以前我得使用Photoshop,等ps慢慢的加载。
  10. 自动保存草稿:就像WordPress编辑器,WLW也可以自动保存文章为草稿,你可以更改多久保存一次。不过要记得这个功能默认没有自动激活,你需要到工具>选项>编辑下,选择‘自动保存草稿’来激活。
  11. 插入表格:我不太了解其他的blog平台,但是我没有在WordPress编辑器上找到任何可以插入表格的选项,挡需要的时候,我不得不手动的插入表格。WLW可以很方便的插入表格。
  12. 花费时间更少:
    我不在需要登录我的WordPress管理后台,等待‘编写文章’也没加载或者保存、预览文章。使用WLW我只需点下按钮,就可以即时的保存、预览文章了,完全不需要浪费时间去登陆。
Windows Live Writer 截图

Wndows Live Writer Screenshot

上面的截图中使用WLW添加了阴影效果

WLW可以做大多数你的blog平台不能做的事情,除了一件我希望有的就是可以搜索我以前的文章。当我想要链接到他们的时候会很有用。WLW可以显示500篇以前的文章,不过一个搜索选项会令这更简单。

其他的桌面blog编辑器应该也能WLW一样,虽然我不能保证,因为除了WLW我还没有试过其他的工具。

你可以从这里下载Windows Live Writer
,从 Live
Gallery
WLWPlugins.com下载它的插件。

我希望这篇文章可以鼓励你们去使用桌面blog编辑器,他们真的节省时间,会令写blog变得更简单。

使用windows live writer同时为sina和csdn写博客

一、安装Windows Live Writer

1. WindowsXP Vista用户:

http://explore.live.com/windows-live-writer?os=other

2. Windows Server用户:有个比较老版本的live writer支持server版本

http://download.microsoft.com/download/8/0/9/809604cd-bd08-42c8-b590-49c332059e64/writer.msi

二、新浪博客设置

1. 选择“已经有webblog”:


clip_image002[1]

2. 选择其它博客服务:


clip_image004[1]

3. 设置用户名密码,请根据自己情况进行更改


clip_image006[1]

4. 这时候live writer就做一些事情:


clip_image008[1]

5. 询问是否建立临时文件夹来预览日志,建议选择:是


clip_image010[1]

6. 账户建立完成,提示如下:


clip_image012[1]

7. 现在就可以写日志啦


clip_image014[1]

8.

三、CSDN博客设置

1. 添加CSDN账户,你可以在下图中选择add:

clip_image016

2. 或者直接在菜单选择添加帐户:

clip_image018

3. 如下图,还是选择其它:

clip_image020

4. 输入账户密码,注意换成你自己的账户

clip_image022

5. 日志类型选择Metaweblog API,日志的远程发布URL栏目填写网址:
http://blog.csdn.net/deaboway/services/MetaBlogApi.aspx
,注意换成你自己的账户,点击下一步

clip_image024

6. 询问是否建立临时文件夹来预览日志,建议选择:是

clip_image026

7. 账户建立完成,提示如下:

clip_image028

8. 点击finish,就可以开始写日志啦

四、发布之后要做的事情

需要进行类别的调整,以及一些格式的调整

从KVM角度对MIDlet生命周期的剖析

当MIDlet被MIDletSuite载入器载入之后,便开始了它的生命周期.整个生命周期完全由MIDletSuite管理器进行处理.一个MIDlet有3中状态:

      
1.停止状态(Paused)

       2.激活状态(Active)

       3.销毁状态(Destroyed)

      
当MIDlet刚由载入器载入时处于停止状态,由MIDletSuite管理器将其变成激活状态,然后会调用MIDlet的startApp()方法开始MIDlet的执行.下图是MIDlet的3个状态的转换过程图:

从KVM角度对MIDlet生命周期的剖析

       
由上图可以看出MDIlet创建实例之后首先是Paused状态,然后转换成Active状态,并且Active状态和Paused状态可以多次相互转
换.因此,在Active状态时(startApp)不应该处理那些在整个MIDlet周期中只可以初始化一次的资源.

       
对应与MIDlet的3个状态,MDIlet有3个方法:

       
1.startApp()方法:
AMS会调用startApp方法来获取该MIDlet所需要的资源,然后会将MIDlet的状态改变成Active状态.

        2.pauseApp()方法:
AMS在调用该方法后,会释放MIDlet所占用的所有资源.如果此时MIDlet创建了对象,则会对对象进行转存储,并且停止当前所有的活动JAVA线程.

       
3.destroyApp()方法:
ASM调用该方法会释放MIDlet占用的任何资源,然后将管理权交给AMS或者直接退出KVM.

       
下面以MIDlet的启动过程为例,从KVM的角度来分析MIDlet如何创建并且运行的.

        当虚拟机启动之后通过Class.forName方法最先执行的是MIDletSuite载入器,该类完成MIDletSuite执行前所需要资源的初始化工作:

       
1.初始化Security Token

       
2. 初始化MIDletSuite存储类

       
3. 初始化MIDletProxyList

       
4.初始化MIDlet事件监听器

       
5.通过MIDletSuite存储类提供的方法获取JAR包中的主类,生成MIDlet对象.

       
6.调用MIDletSuite管理器开始执行MIDlet并且管理其生命周期.

        
MIDletStateHandler类充当了整个MIDlet的管理器功能,负责状态的管理和调度.MIDletSuite类完成初始化功能之后,调用MIDletStateHandler类邪恶startSuite方法启动MIDlet执行:

       
1.首先startSuite方法会向MIDlet运行队列中注册新的MIDlet

        
2.startSuite方法循环中从MIDlet运行队列中取出优先级最高的MIDlet进行处理.如果当前只有一个MIDlet,则会将其取出,并且
将其状态转换成ACTIVE,然后会调用MIDlet的startApp方法.如果此时用户点击了按钮时间,并且调用了pauseApp()方法,则
startSuite循环中会依据当前MIDlet的状态将其转换成paused状态.同样如果用户激发了destroyApp()方法并且MIDlet
执行队列中没有其他MIDlet可执行,则会回收当前MIDlet所占用的资源,并且退出startSuite中的循环.如果此时MIDlet执行队列中
还有其他MIDlet需要执行,则会在销毁当前MIDlet之后继续调度下一个优先级最高的MIDlet执行.

       
整个MDIlet的产生过程如下图所示:


从KVM角度对MIDlet生命周期的剖析

     
整个MIDlet的执行过程还涉及到事件处理过程和窗口UI的处理过程,这两个过程相对比较复杂,在以后的文章中再进行详细的描述.

~~~~~~ End ~~~~~~

作者: 姜江

BLOG: http://blog.csdn.net/jznsmail

E-Mail: [email protected]

QQ: 457283