第一章Android开发起步1.1Android平台简介1.1.1Android背景介绍1,Android的诞生2,Android的特性·应用程序框架:可以方便的重用和替换手机组件·Dalvik虚拟机:专为移动设备优化的虚拟机·内部集成的浏览器:基于开源的WebKit引擎·优化的图形系统:其中自定了2D图形库,3D图形库基于OpenGLES1.0,可选硬件加速·SQLite:集成了轻量级数据库管理系统·多媒体支持:支持常见的音频和视频,以及各种图片格式,如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF等·GSM技术,蓝牙,EDGE,3G和WiFi:需要硬件支持·摄像头、GPS、罗盘、加速度计:需要硬件支持·完备的开发环境:包括设备模拟器、调试工具、内存和性能分析工具,以及用于Eclipse开发环境的插件3,Android的优点目前市面上的手机操作系统除了Android之外还有Symbian、iPhone等,与这些手机操作系统相比Android具有如下的优点:(1)真正开放(2)应用程序相互平等(3)应用程序之间沟通无界限1.1.2Android平台架构LinuxKernelDisplayDriverCameraDriverFlashMemoryDriverBinder(ipc)DriverLibrariesMediaFrameWorkSurfaceManagerSQLiteOpenGL/ESFreeTypeWebKitSGLSSLlibcAndroidRuntimeCoreLibrariesDalvikVirtualMachineApplicationFrameworkActivityManagerWindowManagerContentProvidersViewProvidersPackageManagerTelephonyManagerResourceManagerLocationManagerNotificationManagerApplicationHomeContactsPhoneBrowser……1,应用程序Android平台搭载了一系列的核心应用程序,如E-mail客户端、日历、浏览器、电话簿等。这些应用程序都是用Java语言开发的。2,应用程序框架开发人员可以像核心应用程序那样随意的使用框架的API来实现自己的功能,应用程序框架对组件之间的重用做了简化。在Android平台下,任何应用程序都可以发布自己的功能模块,其他应用程序一句一定的安全限制就可以无阻碍的访问这些模块。同时这种机制还允许用户随意更换组件。3,库Android包含一个可供不同组件调用的C/C++库,这些功能模块通过应用程序框架暴露给开发者。·系统C库(libc),标准C系统库的一个BSD系统的衍生实现,并为基于Linux的嵌入设备做了优化。·媒体库(MediaLibraries),基于PacketVideo的OpenCORE,该库支持多种音频和视频格式,以及静态的图片格式。·SurfaceManager,主要负责管理针对显示系统的访问及无缝地混合来自不同应用程序的2D和3D图层。·SGL,2D图像引擎·OpenGLES,一个基于OpenGLES1.0API的实现,该库或者使用3D硬件加速,或者使用内置的、经过高度优化的3D软件光栅处理。·FreeType,提供对点阵字和向量字的绘制支持。·SQLite,一个面向所有应用程序的轻量级关系型数据库模型。4,Android运行时在Android平台下,每个应用程序都在自己的进程中运行,而且系统为其分配了专有的Dalvik虚拟机,Dalvik虚拟机在设计时就添加了可以在一个设备上运行多个虚拟机的特性。Dalvik虚拟机执行.dex格式的文件,这类文件经过了优化,占用的内存非常小。Java虚拟机是基于栈的,而Dalvik虚拟机则是基于寄存器的,Dalvik虚拟机并不是直接执行编译后的Java类文件,而是通过内置的dx工具将其转换成.dex格式后再执行。Dalvik虚拟机依赖于Linux核心部件来实现线程管理等功能。5,LinuxKernelAndroid平台使用了Linux2.6版本来构建诸如安全性、内存管理、进程管理、网络协议栈和驱动模型等系统服务,Linux核心在硬件层和软件层之间建立了一个抽象层,使得Android平台的硬件细节对开发人员透明化。1.2Android开发环境的搭建1.2.1相关软件的下载与安装1,JDK的下载与安装(略)(JDK6Update18)2,Eclipse的现在与安装(略)(3.5.2)3,AndroidSDK的下载与安装(android-sdk_r10-windows.zip)4,ADT的下载与安装(1),解压下载的文件“ADT-10.0.1.zip”(2),打开Eclipse,选择“helpInstallNewSoftware”(3),在弹出的菜单中单击“Add”按钮,选择要安装的ADT:(4),单击”Local…”选择解压后的“ADT-10.0.0”文件夹的根目录:(5),选择后如下图所示,勾选“DeveloperTools”单击“next”显示详细的安装信息,然后再单击“next”进行安装:(6)如下图,勾选“accept”,单击“Finish”进行安装:(7),安装完成之后会提示重启Eclipse,重启Eclipse之后打开“WindowPreferences”之后发现菜单中多了一项“Android”,选择“Android”为其指定SDK,如下图所示:(8),接下来就是要指定模拟器了,选择“WindowAndroidSDKandAVDManager”打开如下的选项卡(如下图所示),选择左边的“Virtualdevices”,单击“New”来选择模拟器:(9),如下图,在target中选择模拟器版本,亦可以通过Skin选择模拟器外观等:(10),单击“CreateAVD”变可以看到在列表中出现了我们添加的模拟器:(11),选中这个AVD,点击“start”,便可以将模拟器运行起来,如下图:1.2.2虚拟设备的创建和使用1,Eclipse环境下AVD的创建2,命令行下AVD的创建1.2.3创建“HelloAndroid”1.2.4Android应用程序的调试DDMS是DalvikDebugMonitorService的简称,主要功能是监控应用程序的运行并打印日志、模拟电话打入与接听、模拟短信的收发、虚拟地理位置等。有了DDMS的帮助,大大降低了应用程序的测试成本。1,DDMS的启动2,Devices面板3,EmulatorControl面板4,信息输出面板5,DDMS中的日志输出第二章Android应用程序的构成2.1Android应用程序的解析2.1.1目录结构如有图所示为一个Android项目的目录结构,下面对项目的目录结构进行详细的介绍:1,src目录src目录中存放的是该项目的源代码,程序员在项目开发的过程中,大部分是对该目录下的源文件进行编写。2,gen目录该目录下的文件是ADT自动生成的,并不需要人为的去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,项目中的用户界面、字符串、图片、声音等资源都会在该类中创建其唯一的id,当项目中使用这些资源时,会通过该类得到资源的引用。3,Android1.5该目录中存放的是该项目的支持Jar包,同时还包含项目打包时需要的MATE-INF目录。4,Assets目录该目录用于存放项目相关的资源文件,例如文本文件等。在程序中可以使用“getResources.getAssets().open(“FileName.txt”)”得到资源文件的输入流InputStream对象。5,Res目录该目录用于存放应用程序中经常使用的资源文件,包括图片、声音、布局文件及参数描述文件等。Drawable目录用于存放图片、声音等Layout目录用于存放布局文件Values目录用于存放参数描述文件6,AndroidManifest.xml该文件为应用程序的系统控制文件7,Default.properties该文件为项目的配置文件,不需要人为的改动,系统会自动对其进行管理,其中主要描述了项目的版本等信息。2.1.2资源的管理与使用1,图片资源的使用(一)XML方式使用图片资源①创建一个AndroidProject,在drawable资源文件夹中放入名为img.jpg的图片②打开main.xml文件,加入如下代码:ImageViewandroid:id=@+id/imageandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:src=@drawable/img/③运行项目便可以看到图片效果(二)直接在Java程序中使用①创建一个AndroidProject,在drawable资源文件夹中放入名为img.jpg的图片②在Activity类中引入这张图片//创建一个图片视图的对象ImageViewimageView=newImageView(this);//指定视图中显示的图片是drawable文件夹下的img图片imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.img));//显示这张图片setContentView(imageView);2,声音资源的使用(一)使用MediaPlayer类播放声音·创建一个AndroidProject·将声音文件“sound.mid”添加到res文件夹下的raw文件夹(如果raw文件夹不存在,直接创建一个即可),声音文件的命名[a-z0-9_.]·在MainActivity.java文件中引用声音://创建一个MediaPlayer对象,并关联一个声音R.raw.loveparadiseMediaPlayermp=MediaPlayer.create(this,R.raw.loveparadise);//播放声音文件mp.start();(二)使用SoundPool类来播放声音此类通常用来播放游戏中短促的声音,虽然使用较为复杂,但是播放的试音更为精确,并且支持多个音效同时播放。但是需要的是:SoundPool只能用于播放音效,音效总是很短小的音乐片段,时间比较短,如果播放时间比较长的音乐,SoundPool就会出现内存溢出等问题。·创建一个AndroidProject·将声音文件“sound.mid”添加到res文件夹下的raw文件夹(如果raw文件夹不存在,直接创建一个即可),声音文件的命名[a-z0-9_.]·在MainActivity.java文件中引用声音:publicclassSoundPoolActivityextendsActivity{SoundPoolsoundPool=null;HashMapInteger,IntegersoundPoolMap;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);initSounds();setContentView(R.layout.main);OnClickListenerlistener0=newOnClickListener(){publicvoidonClick(Viewarg0){playSound(1,5);}};But