[Pro.android.3][读书笔记]Android 01 Android简介 连载

 

转自http://blog.163.com/wangli_601/blog/static/122950173201162411490673/ 

计算机一直在变的更易用、更人性化。手持设备也已经朝着智能设备发生了巨大的变化。移动电话不在只是通讯工具,它们已经有能力传输数据和视频。但是现在例如手机,平板设备或者是其它移动设备已经变得更像一台电脑。大量的传统的电脑制造商例如:华硕,惠普以及戴尔正在制造各式各样基于Android系统的智能设备。操作系统,计算平台,编程语言以及开发框架正在转移并应用到移动设备上。

 我们也看到大量的如潮水般得应用程序开始迁移到移动设备上。在此书中,我们将为您展示如何让您在使用Android平台开发的技术更上一个台阶。。(http://developer.android.com/index.html), 一个开源的移动/平板开发框架。

 本章,我们将会总体介绍Android以及SDK,对于重点的包我们会给大家做一个精简的概要,并且对于后续章节的学习内容做一个介绍。并且告诉大家如何使用Android源码,着重指出Android平台下开发的好处。

 

为新一代个人电脑打造的全新平台

事实上现在诸如移动电话这类的设备能够成为普通的计算平台对于编程人员来说是一个非常好的消息。从Android3.0开始我们可以把平板电脑也加入到这类设备中了。这就意味着更加广阔的市场。

Android正是迎合了移动设备,它是一个全面完整的平台,底层由基于Linux系统管理硬件,内存以及进程。Android提供的Java开发库包含了通话,视频,音频,图像处理,网络连接,应用程序界面组建以及大量其它方面的设备支持。

 Android SDK除了AWT和SWING以外,支持绝大多数的Java功能——标准版(Java SE)。

取而代之的是Android框架自身提供的UI框架。因为使用Java开发应用,你必须要安装Java虚拟机才能运行字节码。虚拟机提供必要的优化帮助Java程序在运行性能上达到C和C++的水平。Android提供了他自己优化的JVM来运行编译后的Java字节码文件。因为手持设备的内存,运算速度以及电量都是有限的。这个虚拟机叫做Dalvik VM,我们将在后面的主题“深入研究Dalvik VM”中详细探讨。

    下面的图片是对于Android软件运行的总体结构(我们将在“理解Android软件结构中”进行详细讲解)。

 

 

Android的历史

    移动电话有很多种类的操作系统,例如:塞班,Window Mobile,Mobile Linux,苹果,Moblin以及很多其他类型的操作系统。所以,没有那种操作系统成为一种标准。开发移动应用程序可用的开发API和环境受到非常大的限制,看起来远落后于桌面应用框架。在如此鲜明的对照下,Android平台承诺开源的,免费的,一直的开发框架。

    谷歌成立Android公司,于2005年开始开发Android平台,核心开发人员包括Andy Rubin,Rich Miner,Nick Sears和Chris White.

 

    在2007年,在Open Handset Alliance联盟的组织下,一群工业领袖都聚集在了Android平台周围。到2009年有入下一些企业:Sprint Nextel ,T-Mobile,Samsung,Song-Ericsson,Toshiba,Vodafone,Google,Intel,Texas Instruments。

    直到2011年,这个名单已经超多80个成员,如果你想详细了解都有哪些企业你可以访问Open Handset Alliance的主页 www.openhandsetalliance.com

    根据网站,联盟组织的目标是让Android平台成为移动领域的第一。Android被设计成为为电话制造商,平板厂商已经应用程序开发人员服务的平台。所有的成员同意通过开源组织Apache License 2.0Version开放源代码。

    Android SDK在2007年11月首次发布。接着在2008年9月,T-Mobile公司表示T-Mobile G1正式发布。第一台基于Android的智能手机诞生了。不久之后,谷歌发布Android SDK

    Release Candidate 1.0。同年的10月,谷歌在Apache许可下发布了Android平台的源码。到2010年,谷歌推出了基于只能手机的Android SDK 2.3版本,并命名为Gingerbread,

    并且到2011年3月升级到2.3.3版本。在2011年前段时间,推出一个完善的应用于平板设备的Android版本,Android3.0命名为Honeycomb。摩托罗拉 XOOM是最早打在这个系统的平板电脑。

    随着Android的发布,它的关键目标之一就是允许应用程序与其它应用程序之间相互协作以及复用其它应用程序的组件。这种复用不仅仅只局限于服务(services),也包括数据(data)以及用户界面(user interface)。正因如此Android平台拥有大量的公开的可复用的组件。

    Android归功他的基于网络资源的云计算以及它在本地数据存储上的优势持续吸引了开发人员的眼球。Android支持关系型数据库。

    在1.0和1.1版本,Android并不支持软键盘,需要物理键盘的支持。Android在2009年4月推出的1.5版本中修复了这个问题并且加入了大量的其它的特性,例如高级媒体记录能力,widgets,以及活动的文件夹等等。

    在2009年得9月Android推出1.6版本并且在月内相续推出Android2.0版本。在2009年得圣诞节前后大量的基于Android设备相续推出。在这个版本里,加入了高级搜索能力,以及文本向音频转化。

    Android2.0支持HTML5。重写了联系人的API,进行了彻底的检查。并也加入了对Flash的支持。每天,在新类型的应用程序商店中,越来越多的基于Android的应用程序在不断增长。许多想购买基于Android平板电脑的用户现在完全可以去购买。

    在Android2.3版本里,一些重要的新特性包括管理员可以安全的远程操作数据,摄像头和视频可以在光线不好的条件下正常使用,无线的热点功能,性能的提升,增强了蓝牙的功能,能够在SD卡中安装应用程序,OpenGL ES2.0的支持,增强了备份功能,增强了搜索能力,手机信用卡,增强了传感器的功能,视频通话,以及增强的应用市场。

    最新的Android3.0是基于平板设备以及拥有双核的设备,比如:Nvidia Tegra2。主要的特性包括支持大尺寸的屏幕,一个被叫做Fragments碎片的新概念被推出。据透露,Android3.0基于平板的特性诸如:ActionBar,Drag,Drop。主屏幕控件被增强,更多可用的UI控件,在3D支持方面,OpenGL已经被增强到ES2.0。它是一个让关注平板设备的朋友兴奋消息。

 

深入Dalvik VM

    作为Android的一部分,谷歌花费了大量的时候讨论为低处理能力的设备设计一个完善的方案。手持设备在内存,速度等方面与PC有着8到10年的差距。并且他们电量是非常有限的。所以在手持设备上运行的平台需要非常严格,这就需要设计人员把所有的事情做的很完善。如果你去看Anroid的包,你就会发现他们非常清晰的展示了Android的所有的特性。

    不同的Google团队分别根据标准Java虚拟机重写了新的虚拟机。Dan Bornstein实现了关键性的虚拟机,这个虚拟机被命名为Dalvik VM——Dalvik是冰岛一个城镇的名字。Dalvik VM 装载普通的Java字节码文件,然后把他们联合成一个或多个Dalvik Executable(.dex)文件。它可以从并联的二进制文件中多次拷贝信息,这要比.Jar文件省去一半以上的空间开销。

    谷歌在Dalvik VM中仍然使用了垃圾回收机制。但是它已经省去即时编译器。在近期的版本Android2.3中已经加入了即时编译。据报道,这样将原始性能提升2到5倍。并且将大部分应用的性能提升10%到20%。

    Dalvik VM使用另外一种汇编代码生成,它使用寄存器替代堆存储关键数据。谷歌希望通过此技术得到至少30%的性能提升。我们应该指出,在Android里的代码最终是由DalvikVM执行。这些代码不是基于Java的字节码而是.dex。这意味着你不能直接执行字节码文件。你必须将字节码文件转换成可连接的.dex文件才可以执行。

    这种性能的提升延伸到Android SDK的其他方面。例如:使用XML定义用户界面,但是所有的XML将被编译成二进制文件。Android提供特殊的结构使用这些XML数据。

 

理解Android软件结构

    至此,已经讨论过了Android的历史以及一些特性,包括Dalvik VM。我们已经暗示了Java编程中的堆栈是可用的。在本章,我们将讨论Android开发方面的话题,看下图来开始我们的讨论。

 

    Android的核心是使用Linux负责驱动硬件,资源访问,电源管理以及其他的操作系统功能。

    Linux提供了硬件驱动包括显示器,摄像头,键盘,无线,闪存,音频,以及(IPC)内部计算单元。虽然核心是Linux,但是绝大多数的应用采用Java语言开发并且在Dalvik中运行。

    在Linux上一层,是一些C/C++的库,例如OpenGL,WebKit,FreeType,Secure Sockets Layer(SSL),C运行时库,SQLite,以及Media。系统的C库基于Berkeley Software

    Distribution(BSD),用来调用Linux的底层设备。视频库基于PacketVideo的(www.packetvideo.com)OpenCORE。这些库能够记录和回放格式化的视频和音频。另一个叫做Surface Manager的库控制系统的2D和3D图形的显示。更多的原生库将在后续的版本中添加进来。

    WebKit库提供了浏览器的支持,它和Google Chrome以及苹果的Safari类似。FreeType库提供了字体的支持,SQLite同样也是一个开源的关系型数据库并且不光只用于Android。为了进行Android数据库开发,你可以获取并且使用一些工具操作SQLite。

    大多数的应用程序框架通过Dalvik VM访问这些的核心库。Dalvik VM可以说是Android平台的大门,正如我们之前指出的,Dalvik是一个完善的并联运行的虚拟机,它替代了Java标准的虚拟机。Java应用程序访问这些核心库的时候,每一个应用都将获得一个它们自己的虚拟机实例。

    Android Java API是主要的库,它包含了通讯(telephony),资源(resources),本地化(locations),界面(ui),数据(content providers)以及包管理(package managers)等等。使用Java进行Android的应用程序开发。比如说Home,Contacts,Phone,Browser等等。

    Android也支持自定义谷歌的2D图形库——Skia。这个库是使用C和C++开发的。Skia也是构成Google Chrome浏览器的核心。Android对于3D的编程接口是基于Khronos Group的 OpenGL ES实现的。OpenGL ES包含的OpenGL是针对嵌入式系统的。

    从媒体的角度来看,Android平台支持最常见的格式为音频,视频和图像。从无线角度来看,Android已经API来支持蓝牙,EDGE,3G,WiFi和移动通信全球系统(GSM)电话,不过这些都依赖于硬件设备。

 

使用Android SDK开发应用系统

    在本节中,我们将向您介绍的高级Android的Java API,你会来开发基于Android的最终用户应用程序。我们将简要地谈论Android仿真器,Android的基础组件,用户界面??编程,服务,媒体,电话,动画,和OpenGL。

 

Android模拟器

    Android SDK和Eclipse的ADT插件共同用来开发Android应用程序。你可以使用这个集成开发环境工具来开发,调试,以及测试你的Java应用程序。不过你也可以只使用Android SDK不采用ADT插件的情况下进行开发,这样你需要使用命令行的工具。两种方式都支持模拟器的使用。使用模拟器你可以运行,调试以及测试你的应用程序。90%的应用程序开发不需要真正的设备,使用模拟器就可以很好的完成开发工作。完全版的Android具备绝大多数设备所具有的特性。模拟器支持包括USB连接,摄像头,影像捕获,电话,电池模拟,蓝牙,无线,NFC(近距离无线通讯技术),以及图形绘制(OpenGL ES2.0)。

    在Android模拟器通过一个完成的开源的“处理器的工作仿真“技术,称为QEMU由Fabrice Bellard开发(http://bellard.org/qemu/)。和一些允许在一个操作系统上模拟其他系统的技术是一样的。QEMU到模拟CPU的水平。

    基于Android模拟器,处理器是基于ARM的。ARM是32位微处理器架构的基础上精简指令集计算机(RISC),其中设计简单,速度是通过降低数在指令集的指令。模拟器上运行的Android模拟出于Linux版本的处理器。

    ARM被广泛的用于低水平处理能力的手持设备和其它的嵌入式设备。在市场上销售的大多数移动产品都是基于此处理器架构的。

    你可以在Android SDK 文档中找到模拟器更详细的介绍http://developer.android.com/guide/developing/tools/emulator.html

 

Android界面

       Android使用一个UI框架,类似于其他桌面型,功能齐全的用户界面框架。事实上,它更现代,在本质上是异步的。而Android UI本质上是一种第四代UI框架,如果你考虑到传统的基于C微软Windows API的第一代和C++的MFC(微软基础类)的第二代。基于Java的Swing UI框架将是第三代,远远超出了MFC所提供的设计灵活性。而Android的用户界面,Java的FX,微软的Silverlight,和Mozilla的XML用户界面语言(XUL)属于这一第四代UI框架,其中的用户界面是新类型声明和独立的主题。

       Android通过定义XML文件进行界面编程。然后,在您的UI应用程序加载这些XML视图定义的窗口。甚至应用程序中的菜单也是加载自XML文件。在Android里,屏幕和窗体叫做Activity。Activity可以承载复杂的视图,来组成一个逻辑单元。Views是Android最基本得界面组成,你可以进一步它们结合起来,形成所谓的view groups。Views内部使用canvases,painting和用户交互,这些都是在Android中逻辑的可替换的界面组件。Android3.0引入了另一个概念叫作fragments(片段),允许开发人员在平板电脑上显示大块的视图和功能。平板设备提供了足够大的可分割成多个activity的屏幕空间,而fragments提供了方块的抽象。

       Android框架的其中一个重要的概念就是对于activity窗体的生命周期的管理。固定的协议,是Android可以管理这些状态,如:用户隐藏,恢复,停止,关闭活动窗体。您将在第二章获得这些基本知识,并且将介绍Android开发环境的搭建。

      

Android核心组件

       Android的UI框架与Android的其他部分,依赖于一个新的概念——意图(Intent)。意图是多种想法的融合:窗体消息(windowing messages),行动(action),发布和订阅模型(publish-and-subscribe),进程间通讯(inter-process communication)和应用注册(application registries)。这里有一个使用Intent类型执行开始网页浏览的实例:

public static void invokeWebBrowser(Activity activity)

{

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.google.com"));

activity.startActivity(intent);

}

       在这个实例中,通过Intent,告诉Android开启合适的窗体显示网页内容。Android会根据安装在浏览器的清单设备,Android将选择一个合适的一个显示该网站。你将在第五章学习到关于Intent更多的内容。

       Android已经广泛的支持各种资源,这些资源包含常见的元素以及文件。例如:字符串,位图,以及一些不是很常见的基于XML的视图定义。Android框架使用一种新的方式利用这些资源,使得操作起来更简单,直观,方便。下面是一个例子,资源ID是自动生成的XML文件中定义的资源。

public final class R {

public static final class attr { }

public static final class drawable {

public static final int myanimation=0x7f020001;

public static final int numbers19=0x7f02000e;

}

public static final class id {

public static final int textViewId1=0x7f080003;

}

public static final class layout {

public static final int frame_animations_layout=0x7f030001;

public static final int main=0x7f030002;

}

public static final class string {

public static final int hello=0x7f070000;

}

}

在上面个的类文件中,每一个自动生成的ID要么是一个XML元素要么是一个完整的文件。当你要使用这些定义的资源的时候,你必须使用生成的ID来代替。这样间接的操作给本地化带来了很大的帮助。(第三章将会讲述R.java文件以及有关资源的更多详细的内容。)

       Android中另一个新概念是内容提供者(Content Provider)。内容提供者是一个抽象的数据源。底层的SQLite数据库使得内容提供者成为一个强大的应用程序开发工具。我们将在第四章讨论内容提供者。在第三,四,五章节中,我们将讨论Intent,Resource以及Content Provider是如何促进Android的开放性的。

 

高级界面概念

       我们已经指出,XML在Android界面中起着关键作用。让我们来看一个例子,这个例子说明了如何使用XML做一个包含了文本框的布局。

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

       你将使用此XML文件生成的ID,将此布局加载到窗口。(第六章将做进一步讲解)。Android还提供了广泛的菜单支持(内容分布在第七章),从标准的菜单到上下文菜单,你会发现在Android中可以非常方便的使用菜单进行工作,因为这些菜单资源ID是自动生成的。

下面是如何定义一个菜单的XML文件

android:orderInCategory="10"

android:title="clear" />

android:orderInCategory="5"

android:title="show browser" />

       Android支持多种对话框,并且在Android中所有的对话框都是异步的。这些异步的对话框对于那些习惯了一些窗体框架下同步对话框的开发人员来说,是一个特殊的挑战。我们将在第七章讨论对话框,在第八章也将提供一些处理异步对话框的方案。

       Android也提供了对于动画的支持。Android提供了两种类型的动画支持:补间动画和逐帧动画。Android能够通过动画回调,插件以及转换矩阵的方法平滑的播放动画。

       除此之外,Android还允许您定义一些动画的XML资源文件。查看这个实例,许多图片会逐帧的播放,形成动画。

android:oneshot="false">

……

       底层的图形库支持标准的变换矩阵,允许缩放,移动和旋转。摄像头对象在图形库中提供深度和预测,使得在一个二维表面模拟3D图像(我们将在十六章进一步探索动画)

       Android通过实现标准的OpenGLES 1.0和2.0,对于3D图形绘制也有很好的支持。OpenGL ES与OpenGL类似,是以C作为基础的编写的应用程序接口。在Android SDK中因为是基于Java语言进行开发,所以需要使用Java绑定来访问OpenGL ES。Java ME已经通过Java Specification Request(JSR)定义了这种绑定,Android使用同样的Java绑定来实现对OpenGL ES的访问。如果你对于OpenGL编程不太熟悉,学习难度会比较大。但是我们已经在这里回顾了最基础的部分,所以当你完成了第二十章,你就已经可以开始在Android编程中使用OpenGL。从Android3.0开始,加入了一种基于脚本访问OpenGL ES2.0的方法。

       Android有很多新的概念,这些信息围绕在你的指尖。当你使用你的homepage的时候,首先是活动的文件夹(live folders)。使用live folders,你可以发布一个在homepage的文件夹集合,这个集合内容随着底层的数据变换而改变。可以采用设备或者网络来改变数据。(我们将在第二十一张讨论live folders)

       第二个以homepage为基础的思路是home screen widget。Home screen widget被用于使用UI组件在homepage上描绘信息。这些信息可以定期更改,例如:可以是你存储的邮件信息。我们在第二十二章将会讲解screen widgets。Home screen widget在Android3.0中被加强了,包括当后台数据改变的时候会随之更新的列表。这些内容将在第三十一章进行阐述。

       综合的Android搜索功能是基于homepage的第三个想法。使用综合搜索既可以搜索到设备上的数据也可以通过网络进行搜索。Android的搜索超越了普通的搜索功能并与允许你通过通过搜索控制火灾关闭命令。我们将在第二十三章进行探讨。

       Android支持触摸屏并且通过手势运动控制设备。Android允许记录下任何手势作为一个已知的手势。接下来这个手势可以用于指示应用程序的具体行动。第二十五章

       传感器现在变成了移动设备用户体验的一个重要的组成部分。第二十六章

       另一个需要创新的是移动设备的动态性配置。比如它可以很容易的改变一个手持设备的观看模式(纵向和横向之间),或者你可以是你的手持涉设备编程一台笔记本电脑。在Android3.0中引入了一个叫做片段的概念来有效地处理这些变化。在第二十九章将讨论fragments。

       本书还将在第三十章介绍Android3.0的新特性action bars。Action bars使Android和桌面系统菜单是同一个标准。我们在第二十五章介绍了拖拽和下拉(老的方式),在第三十一章(Android3.0方式)。

       在Android SDK之外,还有许多独立的创新使开发变得兴奋与简单。比如XML/VM,PhoenGap以及Titanium。Tianium允许你使用HTML技术编写基于WebKit的Android浏览器。我们将在第二版中讲解Titanium。由于时间和版面的限制,我们不能再这里介绍Titanium。

 

Android服务组件

        安全是Android平台基本的部分。在Android中,安全跨越整个应用程序的周期——从设计阶段的策略考虑到运行时边界(范围)检查。将在第十章讲解安全和权限。

       在十一章,我们将为您展示如何构建一个自定义服务,特定的HTTP服务。本章也将涵盖(内部进程通讯)应用程序间的通讯。

       在Android SDK中,基于位置的服务是另一个让人兴奋的组件。在这部分SDK提供了显示和使用地图的API,并且获得时时设备位置信息。这些想法将在第十七章详细探讨。

 

Android媒体和通讯组件

       Android API涵盖了声频,视频和通话组件。第十八章将介绍通话API。在第十九章介绍音频以及视频的API。在Android2.0中包括了Pico Text到发音核心。这些知识在第二十四章得到讲解。

       最后但并不是最不重要的,Android定义了一个XML文件,这个XML文件关系到应用程序中使用到得所有概念,并且定义了一个应用程序包,这个文件叫做应用程序清单文件。(AndroidManifest.xml)

package="com.ai.android.HelloWorld"

android:versionCode="1"

android:versionName="1.0.0">

android:label="@string/app_name">

Activity,Service,Content Provider,Permission等都是在Android manifest中定义的。清单文件中所有的详细信息都会出现在我们开发中。

Android Java包介绍

       查看Androd Java包结构是活的Andriod信息的一种快速的方法。由于Android对于标准的JDK有所增减。所以它知道哪些是它需要支持的,而哪些不是。这里有一份Android SDK核心包的摘要信息。

       android.app:实现了Android的应用程序模块。核心的类包括Application,生命周期,以及一系列的Activity,fragment,control,dialog,alert和notification。

       android.bluetooth:提供了一些类型去处理蓝牙功能。主要的类包括BluetoothAdapter,BluetoothDevice,BluetoothSocket,BluetoothServerSocket和BluetoothClass。你可以使用BluetoothAdapter去控制本地设备的蓝牙适配器。例如你可以启用,禁用,以及开启搜索功能。BluetoothDevice描述了一个可连接的远程蓝牙设备。两个套接字对象被用于建立连接。Bluetooth类描述了正在连接的蓝牙设备。

       android.content:实现了内容提供者得概念。内容提供者是数据访问和存储的抽象。内容提供者是依据Intent和URI实现的。

       android.content.pm:实现了包管理器的相关类。Package Manager管理权限,已安装的包,提供者,服务,组件例如activity和应用程序。

       android.content.res:提供访问结构化的和非结构化得资源文件的功能。主要的类是AssetManager和Resources。

       android.database:实现数据库的抽象。主要接口是Cursor。

       android.database.sqlite:从android.database.package实现了使用SQLite操作物理数据库的功能。核心类有SQLiteCursor,SQLiteDatabase,SQLiteQuery,SQLiteQUeryBuilder和SQLiteStatement。总之,大多数操作数据库所需要的类型都在这个包中。

       android.gesture:这个包是所有需要与用户定义手势相关的类和接口所在的地方。关键类有Gesture,GestureLibrary,GestureOverLayView,GestureStore,GestureStroke,Gesture-Point。一个手势是一些GestureStroke和GesturePoint的集合。手势都收集在GestureLibrary。手势库存储在GestureStore。手势都有名称,所以他们都可以被定义成操作。

       android.graphics:包含的类有Bitmap,Canvas,Camera,Color,Matrix,Movie,Paint,Path,Rasterizer,Shader,SweepGradient和TypeFace。

       android.graphics.drawable.shapes:实现形状包括ArcShape,OvalShaper,PathShape,RectShap和RoundRectShape。

       android.hardware:实现物理摄像头关联的类,这里的摄像头代表了硬件摄像头,而android.graphics.Camera代表了图形概念,与硬件无关。

       android.location:包含Address,GeoGoder,Location,LocationManager和LocationP-rovider。Address类描述了简单的XAL(Extensible Address Language)。GeoCoder帮助你把给定的地址转化为经纬度。Location表示经纬度。

       android.media:包括MediaPlayer,MediaRecorder,Ringtone,AudioManager和Face-Detector。Mediaplayer支持流操作,被用来播音频和视频。MediaRecorder被用来记录音频和视频。Ringtone用来播放短暂的声音,这些声音用呗做铃声和提示音。AudioManager可以控制音量,你还可以使用FaceDetector从位图中辨别人脸。

       android.net:实现基本的网络套接字API。核心类包括:Uri,ConnectivityManager,LocalSocket和LocalServerSocket。还值得一提的是,Android支持浏览器级别的HTTPS并且支持JavaScript。

       android.net.wifi:管理无线连接。核心类包括WifiManager和WifiConfiguration。Wifi-Manager用来列举当前活动的无线网络。

       android.opengl:包含一组关于OpenGL ES1.0和2.0的操作。OpenGL ES在另一些借来的包(JSR239)中实现的。这些包有javax.microedition.khronos.opengles,

javax.microedition.khronos.egl, javax.microedition.khronos.nio。这些包包装在一起叫做Khronos。它包装了OpenGL ES用C和C++的实现。

       android.os:通过java语言访问操作系统服务。一些重要的类包括BatteryManager,Binder,FileObserver,Handler,Looper和PowerManager。Binder提供了内部线程通讯的能力。FileObserver是不段变化的文件标签。你可以使用Handler去运行消息线程的任务,Looper运行消息线程。

       android.preference:允许应用程序有能力让用户通过统一的方式申请管理他们的偏爱。核心类包括PreferenceActivity,PreferenceScreen和各种Preference的派生类例如CheckBoxPreference和SharedPreferences。

       android.provider:包括一些预先定义的内容提供者依附于android.content.ContentProvider接口。内容提供者包括Contacts,MediaStore,Browser,和Settings。这些接口和类代表底层数据结构的元数据。

       android.sex:包括一组针对SAX方式操作XML的编程接口。包括Element,Root-Element和一些ElementListener接口。

       android.speech:包含语言识别。

       android.apeech.tts:提供文本向语音的转换。关键类有TextToSpeech。你可以使用这个实例通过文本来发音。当发音结束你需要访问大量的回调和监视器。Android使用以SVOX为核心的Pico TTS(Text to Speech)。

       android.telephony:包含CellLocation,PhoneNumberUtils和TelephonyManager。TelephonyManager帮助你判断所在位置,电话号码,网络操作名称,网络类型,电话类型和用户识别模(SIM)块串行数量。

       android.telephony.gsm:提供了整合了基于tower单元的location单元的SMS消息的支持。这个包被命名为GSM的原因在于全球移动手机通讯系统技术定义了SMS数据信息标准。

       android.telephony.cdma:提供CDMA通话支持

       android.text:包含了文本处理类

       android.text.method:支持各种控件的文本输入

       android.text.style:为文本提供了大量的样式结构

       android.utils:包含Log,DebugUtils,TimeUtils和Xml

       android.view:提供了Menu,View,ViewGroup和一些监听和回调

       android.view.animation:提供两种动画支持。主要类包括Animation,一些动画校队器,和一些特殊的动画类。这些特殊的动画类包括了AlphaAnimation,ScaleAnimation,TranslationAnimation和RotationAnimation。Android3.0介绍了android.animation包,这个包是一个简单的但是宽阔的,因为它比起视图能更好的与对象协同工作。

       android.view.inputmethod:实现输入方法框架。

       android.webkit:包含一些描述网页浏览器的类型。WebView,CacheManager和Cookie-

Manager。

       android.widget:包含所有的UI控件。通常这些UI控件都继承与View类。主要的控件包括Button, Checkbox,Chronometer, AnalogClock, DatePicker, DigitalClock, EditText,ListView, FrameLayout, GridView, ImageButton, MediaController,ProgressBar, RadioButton, RadioGroup, RatingButton, Scroller,ScrollView, Spinner, TabWidget, TextView, TimePicker, VideoView, and ZoomButton。

       com.google.android.maps:包含了MapView,MapController和MapActivity,本质上这些类需要和Google maps协同工作。

       这些就是Android的包结构,从这个清单你可以深入的了解Android的核心平台。

      总的说来,Android提供了一些以java.*为命名控件的包。这包括awt.font, io, lang, lang.annotation, lang.ref, lang.reflect, math, net, nio, nio.channels, nio.channels.spi, nio.charset, security, security.acl, security.cert, security.interfaces, security.spec, sql, text, util, util.concurrent, util.concurrent.atomic, util.concurrent.locks, util.jar, util.logging, util.prefs, util.regex, and util.zip。一下这些包基于javax: crypto, crypto.spec, microedition.khronos.egl, microedition.khronos.opengles, net, net.ssl, security.auth, security.auth.callback, security.auth.login, security.auth.x500, security.cert, sql, xml, and xmlparsers. 接下来的这些包基于org.apache.http.* as well as org.json, org.w3c.dom, org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers,org.xmlpull.v1, and org.xmlpull.v1.sax2.

加在一起,这么多包提供了丰富的计算平台用于去编写手持设备的应用程序。

 

Android源码的优点

       在近期的Android版本中,文档是有点不够的,Android源码被用于填补这些缺漏。

       Android详尽的源码被罚不在http://source.android.com。在2008年的10月份就已经开始开源了。Open Handset Alliance组织的目标是让Android编程一个免费的,可以定制的移动平台。

       需要指出的是Android平台上有很多开源项目你可以去http://android.git.kernel.org下载。

       Android源码以及所有的开源项目都是有Git代码控制系统管理的。Git(http://git.or.cz)是一个开源的代码控制系统。它可以对大,小项目进行管理。并且使用起来速度又快有便利。

       Linux kernel和Ruby的一些项目都是由Git版本控制软件管理的。在http://android.git.kernel.org/网站里列出了全部的Android项目。

       你可以使用Git和网站上的产品描述下载任何你想要的项目。一些核心的项目包括Dalvik,frameworks/base(the android.ar file),Linux kernel和大量的已存的库例如:ApacheHttp libraries(apache-http)。你还能看到核心的Android应用程序包括:AlarmClock,Browser,Calculator,Calendar,Camera,Contacts,Email,GoogleSearch,HTMLViewer,IM,Launcher,Mms,Music,PackageIntaller,Phone,Settings,SoundRecorder,Stk,Sync,Updater和VoiceDialer。

       Android项目中还包括Provider项目。这些项目有:CalendarProvider,ContactsProvider,DownloadProvider,DrmProvider,GoogleContactsProvider,GoogleSubscribedFeedsProvider,ImProvider,MediaProvider,SettingsProvider,Subscribed FeedsProvider和TelephonyProvider。

       作为一个程序员,你可能对android.jar文件的源码组成最感兴趣。你可以下载这个.jar文件的源码通过以下地址http://git.source.android.com/?p=platform/frameworks/base.git;a=snapshot;h=HEAD;sf=tgz

       使用Git通过这个地址下载的项目。基于Window,你可以接使用解压工具解压。虽然你可以下载并解压源码。如果你不需要通过你的IDE调试代码,这样比起你在线查看源码还是方便多了。Git还允许你通过以下地址浏览androi.jar的源码。http://android.git.kernel.org/?p=platform/frameworks/base.git;a=summary.

       Skmatrix.cpp文件包含了点阵转化的代码,对动画制作非常有用http://android.git.kernel.org/?p=platform/external/skia.git;a=blob;f=src/core/SkMatrix.cpp 

总结

      在本章,我们希望希望能激起你对于Android的好奇心。如果你是一个Java开发人员,你有很好的机会通过通过这样一个令人兴奋,功能强大的,简单的平台盈利。我们欢迎您通过阅读接下来的内容去深入了解Android SDK。

 

你可能感兴趣的:(Pro.android.3,读书笔记)