Google Android手机在美亮相 能否一举成功仍是未知数 |
2008/09/24 - 手机&网通 - 陈颖芃/综合外电 |
据美联社(AP)报导,酝酿已久的Google Android智能型手机终于要在23日于纽约亮相。市调机构Strategy Analytics预估,负责销售的美国行动电信业者T-Mobile在2008年能售出40万支Android手机,为Google取得美国智能型手机市场4%的市占率。 Android文档阅读01—Android是什么?
Android是什么? Android是一个针对移动设备的程序集, 其中包括一个操作系统, 一个中间件和一些关键性应用. 本文首先概览了Android SDK提供的工具和APIs, 当您在使用Java语言来开发Android平台的应用时您会用到它们. 特性
Android的结构下图展示了Android 操作系统的主要组件结构. 每一部分都在下面的段落有详细介绍 应用程序Android会附带一些核心的应用程序, 包括一个email客户端, 短信程序, 日历, 地图, 浏览器, 通讯录等等. 所有的应用程序都是由Java语言完成的. 应用程序框架Developers have full access to the same framework APIs used by the core applications. The application architecture is designed to simplify the reuse of components; any application can publish its capabilities and any other application may then make use of those capabilities (subject to security constraints enforced by the framework). This same mechanism allows components to be replaced by the user. 开发人员可以跟那些核心应用一样, 拥有访问框架APIs的全部权限. 应用的系结构设计简化了各组件之间的重用;任何应用都可以分发自己的组件, 任何应用也可以使用这些分发的组件(应用的使用方法需遵循框架的安全性约束)。这个机制对用户来说同样适用, 他们也可以替换组件. 隐藏在每个应用后面的是一套服务和系统, 其中包括:
库Android 包含一套C/C++库, 被用于Android 系统中的各种组件中. 这些功能通过Android 应用框架展现给开发人员. 下面列出一些核心库:
Android 运行时Android包含一组核心库, 提供了Java语言核心库内的大部分功能.
Linux KernelAndroid基于Linux version 2.6内核来提供系统的核心服务, 例如安全机制, 内存管理, 进程管理, 网络堆栈和驱动模块. 该内核还扮演着一个虚拟的中间层, 该层介于硬件和其余的软件堆栈. Android文档阅读02—解析Android程序
在Android应用程序中有四个构建块:
并不是每个程序都需要所有的四个部分,你的程序可能用到它们其中一些的组合。 一旦你决定在你的程序中需要哪个组件,你应该在一个叫AndroidManifest.xml的文件中列出它们。你在这个XML文件中声明程序中用到的组件和它们的用途和需要。在Android manifest file 文档中查阅完整的细节。
ActivityActivity是Android构造块中最基本的一种,在应用中,一个activity通常就是一个单独的屏幕。每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。这个activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。大部份的应用都会包含多个的屏幕。例如,一个短消息应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。每一个这样的屏幕,就是一个activity。从一个屏幕导航到另一个屏幕是很简单的。在一些应用中,一个屏幕甚至会返回值给前一个屏幕。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。 Intent and Intent Filters
Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。Intent类用于描述一个应用想要做什么事。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。 典型的动作类型有:MAIN(activity的门户)、VIEW、PICK、EDIT等。而动作对应的数据则以URI的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW的intent,以及一个表示这个人的URI。 Android利用一个叫Intent的特殊类来实现屏幕间的切换。一个Intent描述了一个应用程序想要做什么。intent数据结构中两个最重要的部分是动作和动作对应的数据。一个典型动作的值是MAIN(活动的入口),VIEW,PICK,EDIT,和其它一些。数据表示为URI。例如,浏览一个人的联系信息,你应该创建一个带有VIEW活动的intent,并且URI的数据集指向那个人。
与之有关系的一个类叫IntentFilter。相对于intent是一个有效的做某事的请求,一个intent filter则用于描述一个activity(或者Intent Receiver)能够操作哪些intent。一个activity如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter要知道怎么去处理VIEW动作和表示一个人的URI。IntentFilter需要在AndroidManifest.xml中定义。
一个屏幕到另一个屏幕之间的导航是通过解析意图(Intent)来实现的。当向前导航时,activity将会调用startActivity (Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的 Intent对应的activity。新的activity接收到myIntent的通知后,开始运行。当startActivity方法被调用将触发解析 myIntent的动作,这个机制提供了两个关键好处:
Intent Receiver当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个Intent Receiver。虽然Intent Receiver在感兴趣的事件发生时,会使用NotificationManager 通知用户,但它并不能生成一个UI。Intent Receiver在AndroidManifest.xml中注册,但也可以在代码中使用 Context.registerReceiver()进行注册。当一个intent receiver被触发时,你的应用不必对请求调用intent receiver,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的 intent receiver广播给其它应用程序。 Service一个Service是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,我们还可以service提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。 Content Provider应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,Content Provider将会很有用。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此Content Provider处理的各种数据类型。 更详细的Content Provider资料,可以参考附带文档中的Accessing Content Providers。
Android文档阅读03—开发工具
Android SDK包含了在Android平台上开发移动应用的各种工具集。它不仅包括了Android模拟器和用于Eclipse的Android开发工具插件(ADT),而且包括了各种用来调试、打包和在模拟器上安装应用的工具。 Android EmulatorAndroid模拟器:一个运行在电脑上的手机模拟器。你可以使用这个模拟器,在真实的Android运行环境中去设计、调试和测试自己开发的应用程序。 Android Development Tools Plugin for the Eclipse IDE用于Eclipse集成开发环境的Android应用开发工具插件:它为Eclipse集成开发环境增加了强大的功能,使得创建和调试Android应用程序更加简单和快速。如果你使用Eclipse来开发Android应用,ADT插件将给你带来极大的帮助:
更多的关于ADT插件的信息,包括安装指令,请参见Installing the ADT Plugin for Eclipse。Hello Android描述了一个有用的例子程序和程序的效果图。 Dalvik Debug Monitor Service(ddms)Dalvik调试监视服务:它集成在Dalvik(Android平台的虚拟机)中,用于管理运行在模拟器或设备上的进程,并协助进行调试。你可以用它来杀死进程、选择一个特定程序来调试、生成跟踪数据、查看堆和线程数据、对模拟器或设备进行屏幕快照等等。 Android Debug Bridge (adb)Android调试桥:它用于向模拟器或设备安装应用程序的.apk文件和从命令行访问模拟器或设备。也可以用于将标准的调试器连接到运行在Android模拟器或设备上的应用代码。 Android Asset Packaging Tool (aapt)Android资源打包工具:你可以通过aapt工具来创建.apk文件,这些文件包含了Android应用程序的二进制文件和资源文件。 Android Interface Description Language (aidl)Android接口描述语言:它用来生成进程间接口代码。例如,在一个服务中可能就会用到。 sqlite3SQLite3数据库:Android应用程序可以创建和使用SQLite数据文件,而开发者和使用者也可以方便的访问这些SQLite数据文件。 Traceview跟踪显示工具:它可以生成跟踪日志数据的图形分析视图。这些跟踪日志数据由Android应用程序产生。 mksdcard创建SD卡工具:它帮助创建磁盘镜像。这个磁盘镜像可以在模拟器上模拟外部存储卡(比如SD卡)。 dxDX工具:它将.class字节码重写为Android字节码(存储在.dex文件中)。 activityCreatorAndroid文档阅读04—Application的生命周期
在多数情况下, 每个Android应用运行在自己的Linux进程中. 当一个应用的某段code需要运行的时候这个进程将会被创建, 直到不再需要该应用或系统要为其他的应用释放内存的时候才停止.
一个非常重要且少有的特性是, 应用进程的存活时间不是由这个应用直接控制的. 而是由系统决定的, 系统会根据每个已知的正在运行的应用情况来定夺, 包括, 该应用对用户的重要性和系统全部可用内存.
对于开发人员来讲, 了解每个应用组件(尤其是, Activity, Service, 和IntentReceiver)对于应用进程存活时间的影响是非常重要的. 如果没有正确使用, 可能会导致应用进程在处理重要工作的时候被系统杀掉.
在对应用进程生命周期的理解中, 一个典型的错误就是当一个IntentReceiver 接收到Intent 之后, 会在自己的onReceiveIntent()方法中开起一个线程, 而后return这个方法. 一旦这个方法return, 系统会认为这个IntentReceiver 不在处于活跃状态, 也就认为他的宿主进程不再需要(除非还包有其他活跃的应用组件). 以至于当系统需要回收内存的时候会随时释kill掉这个进程, 中止其中的子线程. 解决这个问题的办法是在IntentReceiver中启动一个Service, 这样系统会知道在这个进程中还有活跃的任务需要完成.
为了决定在内存较低的时候杀掉哪个进程, Android会根据运行在这些进程内的组件及他们的状态把进程划分成一个"重要程度层次". 其重要的程度按以下规则排序:
当需要给一个进程分类的时候, 系统会在该进程中处于活动状态的所有组件里掉选一个重要等级最高作为分类依据. 查看Activity, Service,和IntentReceiver的文档, 了解每个组件在进程整个生命周期中的贡献. 每一个classes的文档详细描述他们在各自应用的生命周期中所起得作用.
Android文档阅读05—Hello, Android!及调试
第一印象,作为一个开发人员,我们对一个新的开发框架的第一印象通常是看他的”Hello,World!”程序有多简单。在Android中,实现起来是非常简单的。 实现Hello World需要几个步骤:
以下几节讨论更加详细的内容
Let‘s jump in! 废话少说,马上开始。 创建项目创建项目非常简单,Eclipse的插件使Adroid的开发变得异常轻松。首先你需要安装一个3.3或以上版本的eclipse(译注:其实3.2也是可以的),然后给Eclipse安装一个Android插件。安装好上面的内容后,我们就可以开始了。 首先,我们来一个总结来看看到底需要几步来完成我们的"Hello, World!"。 1. 通过Eclipse的 File > New > Project 菜单创建"Android Project"项目。 2. 在新Android 项目对话框中添加项目的详细信息 3. 修改自动生成代码模板来显示一些东西 上面3步已经足够了!接下来,让我们开始吧
1. 创建Android项目 在Eclipse中选择 File > New > Project 菜单项。如果你已经成功安装了Android 插件,你会在弹出的新项目对话框中看到一个叫做“Android”的条目,包含一个”Android Project”的项目
选中"Android Project",点击 Next进行入下一步。
2. 填写项目的相关信息 这个窗口里你需要填写一些项目的相关信息.请看图中的示例:
下面解释一下屏幕上的内容:
这是计算机中保存项目文件目录的名称。 这是和Java语言意义相同的包名(Package namespace)—你的源代码将属于这个包名。同时stub Activity也将据此生成。 你所给出的报名必须保证在你的应用中是唯一的;因为这个原因,包的命名遵循域名方式(domain-style)就显得非常重要了;在实例中我们使用"com.google.android"作为包名;你可以选择一个适合你自己的包名。
Android插件将根据这个名称来创建一个stub类。他是一个继承自Activity类的子类。Activity类似一个简单的可以运行和工作的类。它能够根据你的需要创建用户界面,当然了这不是必须的。 这是你应用程序的标题。
你可以通过选择"Use default location"这个复选框来项目文件的存储位置。
3.编辑自动生成的程序代码
Android插件执行完毕后将创建一个叫做HelloAndroid类,他的内容如下:
public class HelloAndroid extends Activity { /**在activity被创建后执行*/ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); } } 创建用户界面创建好项目以后,我们要做的是在屏幕上显示一点文字。下面是完成后的代码,我们将逐行分析它:
public class HelloAndroid extends Activity {/**在activity被创建后执行*/ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); } } 在Android中,用户界面是由View来组成的。一个View就是一个drawable的对象,比如一个单选按钮,一个动画,或者(本例中)是一个文字标签。View子类型中用来显示文字 类是TextView。 下面演示如何构建一个TextView的实例
TextView tv = new TextView(this); TextView构造函数中的参数类型是Context。Context类可以简单的理解为系统的句柄;他提供访问了诸如资源、数据库以及程序设置的服务。Activity类继承自Context。我们的HelloAndroid类继承自Activity类,他同时也继承了Context。正因为如此我们才能使用’this’这个参数来创建TextView。
上面我们已经创建了一个TextView,下面我们来让他显示些文字:
tv.setText("Hello, Android"); 这里没有什么好说的。 我们已经创建了一个TextView并且告诉了他要显示什么,最后就是让他显示在屏幕上了,就像下面这样:
setContentView(tv); setContentView()方法让系统知道哪个View是与Activity的界面有联系的。如果你的Activity没有执行这个方法,界面将什么都不会显示,系统只会显示空屏幕。我们的目的是要显示一些文字,所以我们在这个方法的参数中填上TextView。
这就是我们Android中的"Hello, World"了!接下来当然是看看如何运行它了。 运行程序:Hello, AndroidAndroid提供的Eclipse插件使得运行我们的程序非常简单。选择Run > Open Run Dialog菜单;你会看到一个这样的对话框:
接下来,选中"Android Application"这一项。点击左上角按钮(文档图标上有个加号的那个)或者简单双击"Android Application"项。你会得到一个叫做"New_configuration" 新launcher。
选择一个更好的名字,比如"Hello, Android", 点击"Browse"按钮选择你的项目。(如果你现在打开了多个Android的项目,一定要确认你选择了正确的那个)。Android插件会自动的扫描你的项目来查找Activity 的子类,在"Activity:" 标签下面的下拉框中列出所有的选项。你的"Hello, Android" 只有一个,他将作为缺省的选项。 点击 "Apply" 按钮。示例如下:
大功告成!点击run按钮,Androi模拟器将运行。当模拟器启动完成你将看到你的程序。到这里我们就完成了。
这就是我们Android中 “Hello,World”。很简单吧,嗯?下面的章节我们会探讨一些比较深入的东西,对你学习Android肯定有所帮助。 通过XML Layout构造用户界面你刚刚完成"Hello, World"时通过编程来创建用户界面的。也就是说你在你的程序代码中来创建界面。如果你以前做过很多的界面编程,你一定知道有个非常麻烦的事情:在一大段代码中找到并且修改一个小的界面变化是很头疼的。而且也容易忘记属性与视图之间的关系,从而导致错误,浪费大量的时间来调试代码。
这就是Android提供了一个替代创建用户界面的模式:基于XML的XML Layout文件。解释这个概念的最好方法就是创建一个例子。这个XML Layout文件实现了我们上面用程序代码实现的功能。
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Hello, Android" /> 一般的Android XML Layout 文件 结构非常简单。它由树形的标记组成,每一个标记都是一个View类。在上面这个例子中只有一个元(element)-TextView。你可以在XML layout中使用任何一个继承自View的类,也包括你自己定义的类。这样简单的结构和语法使我们能够比使用代码更快的创建用户界面。它的灵感来自Web开发中用户界面与程序逻辑分开的模式。
这个例子中只有4个XML属性,下面列出含义: android:layout_width 这个属性定义了使用宽度,磁力中使用最大可用宽度。 android:layout_height 同上,使用可用的屏幕高度 android:text TextView显示的文字内容,这个例子中显示 "Hello, Android
这就是XML layout的内容,但是该将它放在那里呢?在项目的res/ 目录中。这个"res"是对"resources"的缩写,这个目录中存放项目中所有不是代码的资源或文件。包括:图片,本地字符串,XML layout文件。
Eclipse插件已经为我们创建了这些XML文件。在我们上面的例子中,我们根本没有使用过他们。在Package Explorer中展开res/layout,目录,修改其中的main.xml文件。使用上面的文本替换掉他的内容。现在从Package Explorer中的源代码文件夹中打开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的代码提示功能可以更快找到需要的内容。
其中最重要的两个内部类就是"layou"和"main"。Eclipse插件会根据你在XML layout文件中更改自动生成R.java文件。当时你在项目中添加了其他资源后你会先R.java会马上发生变化。
最后一件事就是你要修改你的HelloAndroid 代码,让程序使用XML layout文件定义的界面而不是采用我们以前的硬编码方式。看看现在的代码,简单多了:
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类的代码自动完成,这是你或许感觉到R类的作用了。
好,现在你已经完成了修改,让我们重新运行一下程序---你要做的就是点击以下有绿色箭头图标的Run按钮,或者选择Run>Run菜单来运行。你会看到和以前相同的结果。我们可以看出两种不同的布局方法结果是相同的。
我们只是对XML layouts有了个大概的了解,你需要阅读用户界面部分的完整文档来获取进一步的信息。 调试程序Android的Eclipse的插件也能够完美的与Eclipse的调试器集成。为了证实这一点,我们来做一个简单的测试。将你HelloAndroid 程序的代码改成这样: 这段代码很明显将产生一个NullPointerException 异常。运行后你看到:
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); } }
为了找出错误,我们在"Object o = null;"这一行设置一个断点(你可以通过双击eclipse编辑器行号左边的空余部分来创建)。选择 Run > Debug菜单进入到调试模式。你的程序在模拟器中重新启动,但是这次程序会在运行到断点的地方停住。就行你在其他开发工具中那样,你可以在Eclipse的Debug Perspective中检查代码。 不使用eclipse创建项目如果你不使用Eclipse(比如其他IDE或者是使用简单的文本编辑器和命令行工具),那么Android的Eclipse插件就帮不了你了。但是别太担心--你不会因为不使用Eclipse而失去某些功能。
Android 插件实际上只是对SDK里面的工具做了一下封装。因此可以使用其他工具来封装这些工具,比如‘ant‘来编译文件。(像emulator, aapt, adb, ddms这些工具都可以在文档中找到使用的方法)
Android SDK 同时包含了一个名称为"activityCreator.py"的Python的程序脚本,用来创建项目中的代码和目录,以及一个兼容‘ant‘的build.xml文件。这使得你可以通过命令行或者使之与其他的IDE工具集成。
例如,创建一个想刚才我们在eclipse中创建的HelloAndroid 项目,你可以使用这样的命令: activityCreator.py --out HelloAndroid com.google.android.hello.HelloAndroid 为了编译这个项目,你必须使用ant命令。当命令成功完成后,你可以在‘bin‘目录中找到一个HelloAndroid.apk文件。这个.apt文件就是一个Android 包,你可以使用‘adb‘工具把它安装到模拟器中。 Android 文档的阅读顺序因为看了看Android Blog, 在最新的文章里面介绍了几篇文章,其中一篇是<<以开发者的眼光来看Android SDK>>,作者在其中分析了的关于DOC的阅读顺序引起了我的兴趣,确实,那么多的文档,应该怎么看呢?哪些是必须先弄明白的?哪些应该先知道个大概,今后引用的时候再细细阅读?现在简要的介绍一下原作者的观点,希望能帮上你的忙。
1. 首先当然是要知道,什么是Android? 2. 读一下Anatomy of an Android Application 能够知道一个Android application 中到底都有些什么东西 3. 接着可以读一下 Development Tools 文档 4. 然后可以看一下关于什么周期的文章 Lifecycle of an Android Application 5. 现在可以动手了,玩玩hello world 吧,Hello Android 6. 回去读一下 Installing the SDK文档,再这篇文章的后半部分讲了很多关于Debug的功能和技巧 7. 开始Notepad Application 的制作和学习吧,如果你真正弄懂了关于这个应用程序的4个练习,你已经从菜鸟开始转向高手喽。 8. Developing Android Applications 花了很多时间来介绍更多的细节,包括如何实现UI,数据存储和读取,安全问题等 9. 最后,你现在可以自由的漫步在links中了,找你感兴趣的读读吧。 |
联系客服