安卓开发android入门到精通详解_第1页
安卓开发android入门到精通详解_第2页
安卓开发android入门到精通详解_第3页
安卓开发android入门到精通详解_第4页
安卓开发android入门到精通详解_第5页
已阅读5页,还剩204页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录第一篇Android系统结构和SDK使目录第一篇Android系统结构和SDK使 12Android的系统介 系统介 AndroidSDK的开发环 AndroidSDK的结 AndroidSDK环境安 Android中运行仿真器环 Android中建立工 第二篇Android应用程序的概述和框 第3章Android应用层程序的开发方 API参考文档的使 4Android应用程序示 第5章Android应用程序的内 Android应用程序的概念性描 使用am工具启动Android应用程 第三篇Android的UI系统实 第6章UI的基本外形和控 26.7样式的设 第7章6.7样式的设 第7章控件(Widget)的使 8Android中控件的层次结 视图组(ViewGroup)和布局(Layout)的使 8.1Android的屏幕元素体 910 布局 网格(Grid)视图 列表(List)视图 使用Tab组织 2D图形接口的使 使用2D图形接口的程序结构 使用路径效果 剪裁效 动画效 OpenGL3D图形的使 使用OpenGL图形接口的程序结构 10.43D动画效果的实 3第一1Android系统第一1Android系统结构和SDK使用的系统介4系统介绍Android系统介绍AndroidGoogle开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移OHA(OpenHandsetAlliance,开放手机联盟)Google33家公司联手为Android移动平台系统的发展而组建的一个组织。HTCGoogle合作推出了几款手机:G1、G2、Hero和NexusOne,其他手机厂商也推出了几款Android手机,如下图所示5图G1、G2图G1、G2、Hero和NexusOneGoogleAndroid系统中,形成了移植开发和上层应用程序开发两个Android1.5以前的仿真环境,Android1.6以后的仿真器环境如下所示6图Android1.5图Android1.57图Android1.6作图Android1.6作为一个手机平台,Android在技术上的优势主要有以下几点完善的SDK和文档提供了丰富的文档、资料。这样有利于Android系统的开发和运行在一个良好的8软件结构和使用的工具从宏观的角度来看,Android是一个开放的软件系统,它包含了软件结构和使用的工具从宏观的角度来看,Android是一个开放的软件系统,它包含了众多的源码。从下至上,Android系统分成4个层次第1层次:Linux操作系统及驱动;第3层次:Java框架;4层次:JavaAndroid系统的架构如图所第四层:Java应用程系统第三层:Java框C/C++<-->第二层:本地框架和Java运行环内核空间用户空第一层:Linux操作系统及驱AndroidAndroid的第1层次C语言实现2层次C和/C++实现3、4层次主要由Java代码实现。1层次和2层次之间,从Linux操作系统的角度来来看,是内核空间第2层次和第3层次之间,是本地代码层和Java代码层的接口。3层次和4层次之间Android的系API的接口,对Android用程序的开发,第3层次以下的内容是不可见的,仅考虑系统API即可9Android系统需要支持JavaAndroid的Android系统需要支持JavaAndroid的运行环境(Runtime),由虚拟机和Java基本类组成。Android应用程序的开发,主要关注第3层次和4层次之间的接口。除了软件本身的代码之外,Android还提供了一系列工具来辅助系统开发这些主要的工具包括ol也可用于将资源编译到二进制的assets。用它把Android模拟器或设备上的应用程序代码和一个标准的调试器连接android工具:android工具是一个脚本,用于创建和管理AndroidVirtualDevices(AVDs。AIDL工具(AndroidInterfaceDescriptionLanguage,Android接口描述语言,AIAVDs(AndroidVirtualDevices,Android虚拟设备)dx:dx工具用于将.class字节码(bytecode)Android字节码(保存在.dex文件中)这个字节码文件是给Android的Java虚拟机运行用的。Draw9-patch:Draw9-patch工具允许使用所见即所得(WYSIWYG)的编辑器轻松地创建NinePatch图形。Emulator(模拟器:模拟器是一个运行于主机上的程序,可以使用模拟器来模拟一个实际的Android系统的运行,使用模拟器非常适合调试和测试应image映像来模拟外部存储卡(SD卡映像来模拟外部存储卡(SD卡(click(touh(getur2AndroidSDK的开发环境2AndroidSDK的开发环境AndroidSDK的结构AndroidSDK的环境安装Android中运行仿真器环境Android中建立中程AndroidSDKAndroid软件Android的系API配合进行应用程序层次的开发。SDK的开发环境中,还Eclipse等作AndroidSDKAndroid软件Android的系API配合进行应用程序层次的开发。SDK的开发环境中,还Eclipse等作IDE开发环境2.1AndroidSDK的结AndroidSDK在IDE环境中使用的组织结构如图所示安插开发环境Android运行仿真器建工AndroidIDEAndroid提供的SDK有Windows和Linu(其区别主要SDK中工具不同,在Android开发者的网站上可以直接下载各个版本的SDK。AndroidSDK命名规则为android-sdk-{主机系统}_{体系结构}_{版本例如,Android提供SDK的几个文件包如下所示android-sdk-linux_x86-本机JAVA环境文示例代码工底层映像SDKadd-onsdocs:HTML格式的离线文档;platforms:SDK核心内容;tools:工具SDKadd-onsdocs:HTML格式的离线文档;platforms:SDK核心内容;tools:工具具、示例代码等内容data/images:包含默认的Android磁盘映像,包括了系统映像(Androidsystem,samples/Android的开发环境中,根据它templates/:包含了几个用SDK开发工具的模板;tools/:特定平台的工具;Anydevelopmenttoolsthatarespecifictotheplatformversion.不同保本API对应着不API级别,Android已经发布,并且属于正支持的各个版本的SDK如下所示Android的SDK需要配ADT使用,ADT(AndroidDevelopmentTools)是Eclipse集成环境的一个插件。通过扩展Eclipse集成环境功能,使得生成和调Android应用程序既容易又快速APIAndroid2Android3Android4Android5Android6Android72.2AndroidSDK环境安Android的SDKWindows版本需要以下的内容2.2AndroidSDK环境安Android的SDKWindows版本需要以下的内容JDK1.5JDKADT(AndroidDevelopmentTools)插AndroidADTAndroidSDK可以Android开发者的网站去下载,或者在安装亦可,ADT的功能如下所示EclipseIDEAndroid开发工具。例如,ADT可以让EclipseDDMS工具的很多功能——屏幕截图、管理端口转发forwarding提供了一个新的项目向导(NewProjectizard,帮助你快速生成和建立起新Android应用程序所需的最基本文件使构建Android应用程序的过程变得自动化,以及简单易行编写有效的XMLEclipse环境中使用AndroidSDK2.2.1.JDKJava环境Eclipse的运行需要依赖JDK,因此需要下载使用JDK的包,并进行安装版本其文件为jdk-6u10-rc2-bin-2.2.2.Eclipse集成开发环境是开放的软件,可以到Eclipse的网站上去下载EclipseEclipseEclipseEclipseAndroidEclipse3.4和Eclipse3.5,EclipseAndroidEclipse3.4和Eclipse3.5,Eclipse3.3虽然也可以使用,但是没有得到Android官方的验证。如果使用Eclipse3.4,可eclipse-SDK-3.4-win32.zip包;如果使Eclipse3.5,可以去下载eclipse-SDK-3.5.1-win32.zip包。这个包不需要安装,接解压缩即可,解压缩后执行其中的eclipse.exe文件2.2.3.Android工具和文档等。得到AndroidSDK,可能使用到两种方式下载AndroidSDK的包通过软件升级的方式下载AndroidSDK的包:对于AndroidSDK1.6之前的版本,包括AndroidSDK1.1,AndroidSDK1.5,AndroidSDK1.6可以直接Android开发者中下载得SDKLinux、WindowsMAC三个版本。在Windows环境中,使的版本,如:android-sdk-windows-1.5_r2.zipandroid-sdk-windows-1.6_r1.zip,这个包通常用几百M的大小以这种方式下载AndroidSDK,不需要安装,直接解压缩即可Android系统推荐使用的方式软件升级获得Android包第一步:获得android-sdk_r04-Android开发者上,获取AndroidSDK的相关包android-sdk_r04-这个包比实际的AndroidSDK20M,其中包含了一个Setup可SDK是通过这个可执行程序获得的。解压缩这个包,获得AndroidSDK的基本目录结构,但是其中还没有实际的内容。SDKSetup.exe程序,下载实际的Android运行程序,AndroidSDK的,出现SDK的下载界面图AndroidSDK图AndroidSDKForce……项,并且选择保存(SaveandApply)具、文档的安装界面,如下所示SDK、接受全部(AcceptAll)表示安装所有的内容。文档一般安装成最新的版本。选择后,安装程序将依次安装各个组件下载过程中,下载过程中,每个组件将首先被放置到temp中,以一zip包的形式存在下载完成后,得到完整的AndroidSDK2.2.4(1).Eclipse3.4(Ganymede)中安装第一步Eclipse选择“Help”>“SoftwareUpdates...”准备安装插件Eclipse3.4第Eclipse3.4第二步:在打开的对话框中点击“AvailableSoftware”,出Eclipse现有软件对话框Eclipse3.4点击右侧自上而下的3点击右侧自上而下的3个按钮,“AddSite...”准备增加插件ADT在“AddSite”对话框中,输入Android插件的路径https://dl-另外的一种方式是点击Archive„按钮,这样可以不使用网络,直接指定磁盘中的ADT包(目前最新的版本是ADT-0.9.5.zip)。Tools选择到“DeveloperTools”中AndroidDDMS和然后点击“Install...”按钮,继续运行,如图所示Eclipse3.4AndroidEclipse3.4AndroidDDMS和Next将出现如图的对话框Android选择接受(accept)并选择接受(accept)并且选Finish完成安装之前的配置,后面的将进入安装的Android组件的阶段。安装的过程要经过寻找依赖和安装两个阶段,如图所示Eclipse3.4ADT已经被安装2.2.4(2).Eclipse3.5(Galileo)中安装第一步:启动Eclipse选择Help”>“InstallNewSoftware...”准备安装件Eclipse3.5第二Eclipse3.5第二步:出现软件升级的对话Eclipse3.5点击右侧自上而下的3个按钮,“AddSite...”准备增加插件Eclipse3.5ADTEclipse3.5ADT在“AddSite”对话框中,输入Android插件的路径https://dl-另外的一种方式是点击Archive„按钮,这样可以不使用网络,直接指定磁盘中的ADT包(最新的版本是ADT-0.9.5.zip)。workwith/android/eclipse/,后面的列表变为了“DeveloperTools”,AndroidEclipse3.5Eclipse3.5AndroidDDMS和Finish将出现安装的详细信息的对话框,如图所示AndroidNext进行下一步的安装Eclipse3.5Eclipse3.5Android选择接受(accept)并且选Finish完成安装之前的配置,后面的将进入装的Android组件的阶段。安装的过程如图所示Eclipse3.5AndroidEclipse3.5AndroidADT已经被安装2.2.5.EclipseAndroid进入安装ADTEclipse环境后,选择“Window”>“Preference”,从左的列表中选Android项EclipseAndroidEclipseAndroidSDK左侧的Android选项是由于安装了AndroidSDK而出现的SDKSDKLocation中,点击“Browse”„按钮;选的目录,点击“OK”按钮2.3 中运行仿2.3 中运行仿真器环境2.3.1.Android虚拟设为了运行一个Android仿真器的环境,首先需要建立Android虚拟设(AVD)Eclipse的菜单中,选择“Window”>“AndroidAVD出现“AndroidSDKandAVDDeviceManager”窗口,界面如图所示AndroidSDK和AVD界面中间的列表表示了目前可以使用的Android虚拟设备,在没有虚拟设备的情况下点击右侧的New选择建立一个虚拟设备。建立新的Android虚拟设备的窗口为CreatenewAVD,如图所示Android虚拟设备的Android虚拟设备的建立包含了以下的一些选项(Name(arget哪些版本的SDK)SDSDSD卡映像文件,SD卡映像文件是使用mksdcard工具建立的。皮肤(Skin:这里皮肤的含义其实是仿真器运行尺寸的大小,默认的尺寸有HVGA-P(320x480,G-L(480x320)等,也可以通过直接指定尺寸的方属性:可以由用户指定仿真器运行的时候,Android系统中一些属2.3.2.运行虚拟设在“AndroidSDK2.3.2.运行虚拟设在“AndroidSDKandAVDDeviceManager”窗口中,选择一个设备,点Android除了使用右侧的模拟键盘之外,也可以使用PC机的键盘来进行模拟真实设按键之间的映射关系如下表所示仿真器的虚拟键盘的按F2orupbuttonShift-F2orPageDownKEYPAD_PLUS,Ctrl-5Ctrl-KEYPAD_5,Ctrl-F2orupbuttonShift-F2orPageDownKEYPAD_PLUS,Ctrl-5Ctrl-KEYPAD_5,Ctrl-Hangup/endcalldownCameraCodeportraitKEYPAD_7,Ctrl-portraitKEYPAD_9,Ctrl-Alt-切换跟踪球(trackball)DPadcenterclickAndroid仿真器启动虚拟设备之后,默认就可以使用主机的网络作为自己网络、使用主机的音频设备作为自己的声音输出2.3.3.Android中的工在仿真器环境中,可以使用集成的Android相关工具。使用的方法是Window->ShowViewOtherAndroid的各个工具。调用的过如下图所示AndroidAndroidAndroid工具的对话框如图所示AndroidAndroid卡2.3.4.打印出来的信息。工具的界面如下所示Logcat实际上是一个Logcat实际上是一个运行在目标系统的工具,也就是一个Linux的命令行程序,这是界面种是带有GUI的效果。Logcat的窗口中记录的信息也就是实际的标签(tag)、Log内容(Message)等项目。Log信息,屏蔽其他的信息命令行程序logcat,位于目标文件系统中该工具位于system/bin目录中Logcat的使用方法如下所示#logcat[options]logcat工具的选项如下所示-设置过滤器,例如-f-r输出到文件-f-r输出到文件,在默认情况下是标准输循环log的字节数(默认16),需要-n< 设置循环log的最大数目,默认为-vformat>log的打印格式,<format>是下面的一种briefprocesstagthreadrawtimethreadtime清除所有log并退得到所有og并退出(不阻塞)-b<buffer>请求不同的环形缓冲区('main'(默认)、'radio'、-Blog输出到二进制文件2.3.5.使用仿真器控示EmulatorControl选项可以开启仿真器的控制对话框,它的界面如下Android它Android它甚至可以模incomingnumber中输入话号码,然后点击Call按钮。这是仿真器的运行界面如图所示AndroidAndroid模拟发送短信的界面显示如下所示Android2.3.6.Android2.3.6.命令行工adb、mksdcard有一些Android的工具需要在命令行的环境中运行,只是可以选择Windows的开始->运行,键入cmd并确定,进入命令行的界面中运行。主要的命令行工具adb和mksdcard等。命令行的工具在AndroidSDK的tools目录中,使用命令行的窗口如图所示adb(AndroidDebugBridge,Android调试桥)adb(AndroidDebugBridge,Android调试桥)是Android的主要调试工具,将出现shellAndroidLinux系统中shell终端,可以在这个shell提示符后执行Android系统提供的Linux命令。使用ls命令查看Android系统根目录 #ls-drwxrwxrwt 2009-06-1502:17drwxrwxsystem 2009-06-1502:18dsystem 2009-06-1502:17lrwxrwxrwxroot 2009-06-1502:17etc->/system/etcdrwxr-xr-xroot 2009-05-2802:16systemdrwxr-xr-x 1970-01-0100:00dr-xr-xr-x-rwxr-xrwxr-xrwxr-xrw-r--r--root drwxr-xr-x1970-01-0100:001970-01-0100:0090751970-01-0100:0016771970-01-01dr-xr-xr-x-rwxr-xrwxr-xrwxr-xrw-r--r--root drwxr-xr-x1970-01-0100:001970-01-0100:0090751970-01-0100:0016771970-01-0100:001065681970-01-0100:001181970-01-0100:002009-05-2802:491970-01-0100:002009-06-1502:18Android根目录中的主要文件夹与目标系统的out/target/product/generic/root中ps命令可以查Android系统的进程#ps2345PPIDVSIZERSS 0222222222222221111111000000000000000000000000000000S808264c01654b4afe0c45cS c0192c20afe0cdecS5392684ffffffffafe0caccS1168 c008de04afe0d25cS/system/bin/dbus-bluetooth1111 c00ae7b0afe0d1dcS/system/bin/qemudffffffff0000e8f4S/sbin/adbd126810570417584ffffffffafe0d3e4S11338019492ffffffffafe0d3e4S9539213228ffffffffafe0d3e4S app_46455459719212964ffffffffafe0d3e4S34000000000afe0c1bcR从系统的进程中可以看到,系统120号进程为父进程。init是系统运行的第1Android根目下的init可执行程序,这是一个用户空间的进程。kthreadd2号进程,这是一个内核进程,其他内核进程都Zygote、/system/bin/sh、/system/bin/mediaserver等进程是被init运行起来的,等进程代表的是应用程序进程,它们的父进程都是zygote。 使用adb连接目标系统终端的方式如下所示adbadb安装应用程序的方法为adb在主机和目标机之间传送文件的方法为mksdcard是用来建SD卡映像的工具,用Fat32格式的磁盘像,其使用方法如下所示其后面可以跟K、M、G等参数,file是磁盘映像的文件名称,这个文件也就是在mksdcard的一个使用的示例如下所示mksdcard128M这表示建立了一个大小为128M,名称sdcard.imgFat32磁盘映像文件2.3.7.使用设备控Device工具可以用于进一步控制仿真器的运行状况,在其中可以查看功能。Device工具的窗口如图所示adbpull{target_path}AndroidAndroid窗口,如上图所示2.4Android中建立工程2.4.1.建立工程Android的SDK环境安装完成后,就可以SDK中建立工程并进行调试了。建立Android工程步骤如下:选择选择“Android”>“AndroidProject”,点击“Next”按钮选择thecontentsforthe选择thecontentsfortheproject定的目录中需要具AndroidManifest.xml文件可以使可以使SDK的platforms/android-XXX/samples中的各个子目录建立工程这是SDK自带的示例程序,例如,使用HelloActivity示例程序点击“Finish”按钮,工程将点击“Finish”按钮,工程将被建立2.4.2.查看和编辑各个文件不同的文件将使用不同的工具查看AndroidManifest.xml文件的情况,如图所示AndroidManifest.xml中的内容。浏览布局文件,如图所示浏览布局文件浏览布局文件是一个更有用的功能,可以直观地查看程UI布局,点击程序没有运行的情况下直接查看和组织目标UI界面。查看各个value文件和建立数值,如图所示查查看各个Java源代码文件,如图所示JavaJava构。在IDE的源代码环境开发JAVA程序,还具有自动修正、自动增加依赖包类方法属性查找等功能2.4.3.运行工程或者“DebugAs”来运行和调试工程RunAndroidAndroid信息,可以获取目标运行的信息。出现类似的Log信息[HelloActivity]AndroidLaunch![HelloActivity]adbisrunningnormally.[HelloActivity]Performingcom.example.android.helloactivity.HelloActivityactivitylaunch[HelloActivity]DeviceAPIversionis4(Android1.6) 在运行的一个仿真设备的时候,可以进一步通过选择“RunAs”中Configurations”进行进一步的配置启动后的界面如图所示选项中可以选择启动的哪一个活动(Android的一个工程中可以包含多个活动)。在Target标签中可以选择启动的时候使用的设备。第二3应用程第二3应用程序的概述和框应用层程序的开发方参考文档的使3.1应用程序开发的结构Android应用程序开发是Android开发中最上面的一个层次,它们构建3.1应用程序开发的结构Android应用程序开发是Android开发中最上面的一个层次,它们构建API„„Android预系统应用程Android手Android仿真图AndroidAndroid系统本身内置了一部分标准应用(也包括内容提供者),在仿真器(包括SDK环境和源代码环境)中已经包含这些内置的程序。用户自行开Android内置的应用层程序包位于同一个层在默认的Android系统中。Android框架层硬件抽硬件抽应用应用应用3.2API参考文档的使3.2API参考文档的使Reference标签中PackageIndex(包索引Android的各个包,每个包中包含若干个类、接口根据包索引,每一个包中包含的主要内容大致如下所示;Classes(类;Exceptions(异常每个包中包含的内容,基本上是Java语言中标准的内容Android的参考文档中的类是AndroidAPI的主要组成部分,主要参考根据类索引,每一个类中包含的主要内容大致如下所示Overview(概览Constants(常量;Methods(方法(XML属性)一项Android专用的。某些重要的类还包含对于类的详细介绍的例如,Activity类的帮助文档的前面的信息如下所示extendsimplementsComponentCallbacksKeyEvent.CallbackLayoutInflater.FactoryextendsimplementsComponentCallbacksKeyEvent.CallbackLayoutInflater.Factory↳↳↳↳android.app.ActivityKnownDirectSubclassesActivity类中可以看出,类的帮助文档主要包含以下一些内容publicclassImplements:标明了这个类实现的接口(可以有多个;KnownDirectSubclasses[……]:这个类的直接继承者;KnownIndirectSubclasses[……]:这个类的间接继承者。Activity类在android.app从android.view.ContextThemeWrapperActivityGroup,ListActivity等几个类直接继承。被LauncherActivity等几个类间接继承。是在类的使用过程中需要主要关注的内容Class(类的介绍(常量的列表Inherited(继承的常量的列表,按照继承类的顺序(公共的构造函数(公共方法的列表Protected(保护方法的列表Inherited(继承方法的列表,按照继承类的顺序KnownIndirect(详细的介绍类的帮助中一般(详细的介绍类的帮助中一般只列出了自己的常量、方法、XML属性等,对于继承得到的内容(包括方法和常量),按照继承的顺序列出。由于JAVA类是单向继承,某些与UI内容相关的类的帮助文档有一些特殊,主要区别是包含了属性attributes(XML属性)一类。XMLAttributes(XMLAndroidManifest.xml或者布局文件中(*.xml)的属性例如Button类的参考文档的主要内容如下所示XMLattributes一ButtonAttributes,TextViewAttributes,ViewAttributes,根据类的继承关系可以得知,这个启示是自己的属性、父类的属性(Button类的父类是android.widget.TextView)、祖父类的属性(Button类的祖父类是XMLAttributes项目的Fromclassandroid.widget.TextView和Frompublicclassextends↳↳↳android.widget.ButtonKnownDirectSubclassesKnownIndirectSubclassesCheckBox,RadioButton,ToggleButtonXMLSeeButtonAttributes,TextViewAttributes,ViewInheritedXMLFromclassandroid.widget.TextViewFromclassandroid.view.ViewInheritedMethods性名称)RelatedMethod(相关方法)Description(描述)几个项目。例如,TextView的几个属性如下所示Texttodisplay.Textcolor.源文件中使用的方法,最右侧的内容是这个属性的描述PackageIndex→android→android.R.styleable中列出了一些类的XML属性,例如TextView的属性的相关内容如下所示使用的还是名称。整数值是Android内部运作使用的。XML属性有些是在布局文件中使用的,也AndroidManifest.xml中使用的,或者在其他的XML文件中使用。在AndroidManifest.xml中使用的属性例如,AndroidManifestActionAndroidManifest.xml中的Action标签中publicstaticfinalint[]automaticallycapitalizewhattheusertypes.Thedefaultis"none".ConstantValue 0Don'tautomaticallycapitalizeanything. 2Capitalizethefirstletterofeveryword.characters3Capitalizeeverycharacter.ConstantValue:44(0x0000002c)AttributesthatcanbesuppliedinanAndroidManifest.xmlactionAttributesthatcanbesuppliedinanAndroidManifest.xmlactiontag,achildoftheintent-filtertag.SeeaddAction(String)formoreinformation.IncludesthefollowingAttributeandroid:nameThenameofanactionthatishandled,usingtheJava-stylenamingSeeAlsoAttributeSummaryandroid:name引用的内容AndroidManifest.xml中的Action标签可以使用的android:name属性。例如,View.OnClickListener的帮助信息前面的内容如下所示KnownIndirectSubclasses接口android.view这个包中。对于一个接口,IndirectSubclasses的含义为实(implements)这个接口。View.OnClickListener的帮助信息后面的内容同样列出这个接口中包含的成这些方法是要求接口的实现者来实现的,如果一个类实现View.OnClickListene这个接口,其中就必须要有这个接口的onClick()函数4Android应用程序示例4Android应用程序示例HelloActivity程序的运程序的文件结构和编译后的结构程序的运行HelloActivity是一个简单的Android应用程序,其工程文件名称为HelloActivityAndroid的源代码SDK中,都包含了这个包的图标和运行情况如图所示图HelloActivity上显示“Hello,World!”字符串的源文件结HelloActivity工程的源文件的结构按照目录树的方式如下所示|--的源文件结HelloActivity工程的源文件的结构按照目录树的方式如下所示|--|--|--(工程管理文件(工程描述文件(资源文件|||||--(布局文件|`--`--`--(字串资源文件(Java源代码文件|--`--`--`--`--`--HelloActivity工程中另有一个tests目录,其中也具有自己的Android.mkAndroidManifest.xml文件,这是另HelloActivity工程的测试程序4.2.1.文Android.mk文件Android的工程管理文件,这个文件只在源代码开发的候使用,在SDK的开发中不需要使用,它包含在工程的根目录中,其内容如下LOCAL_PATH:=$(callmy-LOCAL_MODULE_TAGS:=#Onlycompilesourcejavafilesinthisapk.LOCAL_SRC_FILES:=$(callall-java-files-under,src)LOCAL_PACKAGE_NAME:=LOCAL_SDK_VERSION:=LOCAL_SDK_VERSION:=include$(callall-makefiles-Android.mk文件是Android编译过程中通用的工程管理文件,本地程序、本地库和Java程序包都使用这个文件。这个文件仅仅在基于源代码开发的情况中使用Java应用程序工程的管理中,该文件不用定义过多的内容,其中关键的内容是使用include$(BUILD_PACKAGE)表示从当前目录编译Java应用程序包。LOCAL_PACKAGE_NAME定义的是这个程序的APK包的名称。LOCAL_MODULE_TAGS表示这个包的类型。这个包的LOCAL_MODULE_TAGS定义成了samplesAPK包,但是不安装在系统中。使用不同的值,可以决定是否编译和安装,例如使用eng,最后一行的include$(callall-makefiles-under,$(LOCAL_PATH)),表示包本目录的子目录中的Android.mk文件,本例中也就是tests目录中的内容4.2.2.文AndroidManifest.xml文件是这Android应用程序的工程描述文件,包含宏观上的内容,如下所示application(表示应用程序)activity(表示活动用程序中的一个组件,一个应用程序中也可以包含若干个组件。包名定义为,表示将从目录的<?xmlversion="1.0"encoding="utf-<manifestxmlns:android="/apk/res/android"<activity<action<categorycom/example/android/helloactivityJava源代码。活动名称com/example/android/helloactivityJava源代码。活动名称将被定HelloActivity,表示活动的代码是上述源HelloActivity.java文件。intent-filter中的内容指定了程序的启动方式,这里category中的ent.category.LAUNCHER表示活动将在Android的桌面(Android默认的桌面程序名称也是LAUNCHER)上出现。AndroidManifest.xml文件中为一个活动指定label(标签)和icon(图标的方如下所示中对应名称的图片文件作为图标(本例中将使用icon_name.png)activityapplication都具android:labelandroid:icon等属性,由于活动是程序的单元,且应用可以包含多个活动,因此程序首activity中的这些标签,如果没有则使用上一级的application中标签的定义4.2.3源代码文个工程目录下的com/example/android/helloactivity中,内容如下所示packagecom.example.android.helloactivity; //定义包名importandroid.app.Activity; //引入包含的包importandroid.os.Bundle;publicclassHelloActivityextends{publicHelloActivity(){}publicvoidonCreate(BundlesavedInstanceState){//onCreate()方setContentView(R.layout.hello_activity);//使用hello_activity.xml布局文android:icon="@drawable/icon_name"><action<category}}这里的类HelloActivity继承实现了Android系统API提供的活}}这里的类HelloActivity继承实现了Android系统API提供的活动类这里表示将从res/layout目录中找到hello_activity.xml文件作为本例的布局文件使4.2.4布局文件hello_activity.xml是本Java源文件中使用了此文件本文件在res/layout目录中,其内容如下所示 "@string/hello_activity_text_text",这个值在另外的资源文件中被定义,本例就string.xml4.2.5其他资源文件 string.xml是本例中的一个资源文件,其内容如下所示Heoord!,这就是出现在屏幕上的字符串<?xmlversion="1.0"encoding="utf-<?xmlversion="1.0"encoding="utf-的编译结构AndroidSDK环境开发中,HelloActivity工程的编译结构AndroidSDK环境开发中,HelloActivity工程经过编译后,SDK环境下开发生成的assets、bin、gen等目录。gen目录中,包含了以类的层次关系为结构的资源文件。例如,gen/com/example/android/helloactivity目录中R.javaHelloActivity中的资源文件。子目录包含了经过编译后的各个Java类,以.class为后缀bin目录中包含的classes.dexDalvik虚拟机上运JavaHelloActivity.apkAPK文件,可以在兼容的AndroidAPI的目标系统中安装,进而运行程序。HelloActivity.apk经过解压缩后,包含了下面的一些内容|--|--META-||||--|--`--|--|--(Dalvik的字节码||`--`--`--的程序的运行SkeletonAppAndroid中一个应用程序的框架,这个程序比复杂一些,这个程序的运行结果如图所示SkeletonAppSkeletonApp容,菜单的功能和两个按钮时是相同的Android中的标准组件点击菜单按钮将出现菜单,菜单的源文件结构SkeletonApp|--|--|--的源文件结构SkeletonApp|--|--|--|||||||||--|`--|--|`--`--|--|--`--(Java源代码文件|--`--`--`--`--`--`--`--`--`--`--SkeletonApp中,资源目录resvalues目录strings.xml件,还包含colors.xml和styles.xml文件,这两种文件也是Andro源文件colors.xml文件的内容如下所示中的标准资<?xmlversion="1.0"encoding="utf-<!--RetrievedviaResources.getColor()andfriends.--<!--RetrievedviaResources.getDrawable()andfriends.--<drawablestyles.xml文件的内<?xmlversion="1.0"encoding="utf-<item<item<item<stylename="TextAppearance"<itemresdrawable目录,表示可以绘制的内容,这里的是一个jpeg的文件。<Buttonandroid:id="@+id/back"android:text="@string/back"<ImageViewandroid:id="@+id/image"android:paddingLeft="4dip"android_paddingRight="4dip"android:src="@drawable/violet"/>android:text="@string/clear"android:textColor="@color/red<ImageViewandroid:id="@+id/image"android:paddingLeft="4dip"android_paddingRight="4dip"android:src="@drawable/violet"/>android:text="@string/clear"android:textColor="@color/red"/>style/ActionButton作为按钮的样式,drawable/semi_black表示了背景的内容,drawable/violet表示引用violet.jpg图片作为图像的内容。例如styles.xmlJAVA源代SkeletonActivity.java中构建了菜单、按钮的动作等功能的编译结构Android中程序的编译结构基本类似,SkeletonApp的应用程序包SkeletonApp.apk经过解压缩后,包含了下面的一些内容|--|--META-||||--|--`--|--|--(Dalvik的字节码|||||--|`--`--`--`--在这drawable中图片文件保持原状,layout中的布局文aapt处理成5章Android应用程序的内容5章Android应用程序的内容Android应用程序的感念性描述Android应用程序的概念性描述Android应应用程序的概念性描述Android应用程序Java语言编写,每一个应用程序将被编译成Android的一个Java应用程序包(*.apk)。Android系统本身是基于Linux操作系统运行的,因此Android应用Linux环境中,它们具有以下的特点Linux(VM5.1.1应用程序的组成部分一般情况下,Android4种组件构成活动(Activityrr(ServiceProvider一个Android应用程序是一个包(Package),包中可能包含一个或者多个Android组件(component)活动活动是最基本的Android应用程序组件,在应用程序中,一个活动通常就是一个单独的用户界面。每一个活动都被实现为一个独立的类,并且从活动(Acvy)基类中继承而来,活动类将会显示由视图Vw)控件组成的用户nAndroid的一个活动一般对应界面中的一个屏幕显示,可以理解成一个界面,每一个活动在界面上可以包含按钮、文本框等多种可视的UI元素。广播接收器服务内容提供者(Content5.1.2应用程序的生命周期Android系统中的不同组件具有不同的生命周期。Android根据每个进程中运行的组件以及组件的状态把进程放入一个重要性分级(importancehierarchy)中。Android进程的重要性分级,可以理解成执行的优先级。Android进程的类型包括(按重要性分级排序(1)前台(Foreground)进与用户当前正在做的事情密切相关,不同的应用程序组件能够通过不同的进程有一个正在运行 (它的BroadcastReceiver.onReceive()方法正在执行进程有一个ServiceService的某个方法(Service.onCreate()Service.onStart()或者Service.onDestroy())(2)可见(Visible)进它有一个可以被用户从屏幕上看到的Activity,但不在前台——其方法被调用。Activity是一个对话框,以前的Activity隐藏服务(Service)进看到,但它们做的事情却是用户所关心的(例如:后台MP3回放或后台网络数后台(Background)进拥有一个当前用户看不到的Activity(它的onStop()方法被调用),这些进程对用户体验没有直接的影响Activity生命周期,系统可以在任意时刻杀死进程来回收内存,并提供给前面3种类型的进程使用。系统中通常有很多这样的进程在运行,因此要将这些进LRU列表中,以确保当内空(Empty)进及运行情况考虑,可以关注Android的各种组件相对应的生命周期。1.活动的生命周期切换的屏幕界面就是Android中的活动。活动的生命周期如图1所示onCreate()、onStart()和onResume()这3个方法被依次调用,活动对应的界面出现在屏幕上。活动被“覆盖”的情景:Android的活动一般都占据一个完整的屏幕,从当(Foreground(ckground台时,onStop()复,这时onResume()方法将被调用,活动重新转入前台运行。复,这时onResume()方法将被调用,活动重新转入前台运行。2.服务的生命周期2(Service)(Service)和onStart()这两个方法将被调用,服务会在后台运行直到退出,退出时将调用3.广播接收器的生命周期广播接收器有一个单一广播接收器有一个单一的回调方法onReceive(),当广播消息到达接收器时Android将调用这个方法,并传递给包含在这个消息中的Intent对象广播接收器只有在这个方法的执行过程中才处于活动状态,当应用程序包含的各个文件序是一个独立的工程,包含了以下文件Android.mk:统一工程文件,在SDKAndroidManifest.xml:工程描述文件,在其中定义了各种组件JavaJava包的方式来组织目录结构,包括各个Java类的源代资源文件:包含XML在编Android应用程序的过程中,Java源代SunJDK将Java源程序编译成Java字节码文件(多个后缀名为.class的文件)Java一致,然后通Android自带的工具软件dex把所有的字节码文件转成dex文件(单一文件classes.dex)AndroidManifest.xmlAndroid打包工具(aapt)处理后形成二进制格式AndroidManifest.xml文件,实质的内容与以前相同。最后将这三个部分组合成一个应用程序包(*.apk)。AndroidManifest.xml描述文件、JavaAndroid应用程序的三个部分;在编译之前的工程中是这三个部分,在编译之后APK包依然是由这三个部分组成的。Android应用程序的编译过程如图所示Java编译进行处进行处Class字节资源包的Meta信APKAndroidJava编译进行处进行处Class字节资源包的Meta信APKAndroid如图所示,Android源文件经过了标Java编译器的编译,又经过了dxdex文件(classes.dex)是一个单一文件,将工程Java源代码文件对应优化后的文件dey的优化文件,然Dalvik虚拟机将运行这些dey文件。如果应用程序包文件不发生变化,dey文件不会被重新生成;在应用程序包发生更新的情况下,将重新由dex生成dey。Android和标准JAVA开发的JAR包最大的不同在于,标准JAVA字节码每个文件一个Clash文件Android中的一个包将生成一个Dex文件处理Dex字节源程序部Java源代 资源文使用am工具启动Android应用程序使用am工具启动Android应用程序adbshell进行连接)也可以使用am工具启动应用程序am命令的基本使用方法如下所示amstart是其中的一个功能,INTENT主要的参数是使用-a指定使用的动作(action),使用-d指定数据使用URI的格式,使用-n指定组件 #amstart-n{包名}/{包名}.活动 启动Android设置工具的命令如下所示启动Android计算器程序的命令如下所示启动Android录音机程序的命令如下所示启动Android照相机程序的命令如下所示启动Android摄像机程序的命令如下所示 #amstart-n #amstart-n#amstart-n[-a<ACTION>][-d<DATA_URI>][-t<MIME_TYPE>][-c<CATEGORY>[-c<CATEGORY>]...][-e|--es<EXTRA_KEY><EXTRA_STRING_VALUE>[-n<COMPONENT>][-f<FLAGS>][<URI>]usage:am[start|broadcast|instrument]amstart-DINTENT[-w]<COMPONENT>启动Android音乐浏览器的命令如下所示启动Android视启动Android音乐浏览器的命令如下所示启动Android视频浏览器的命令如下所示启动Android网络浏览器等的命令如下所示器都在Music包中,照相机和摄像机都在Camera包中。对于某些具有附加数据的应用程序,还可以使用-dURL,示例如以上程序分别进行了音乐播放、视频播放、图片浏览等功能。com.android.music.MediaPlaybackActivitycom.android.camera.MovieViewcom.android.camera.ViewImage分别是对应的应用程序mimetype这里使用的是ama参数,表示执行一个动作,后面的audio/*、video/*和image/*表示数mime类型,Android将自动找到支持相应数mime类型的来打开对应的音乐、视频和图片文件#amstart-ncom.android.music/com.android.music.MediaPlaybackActivity-file:///a.mp3 #amstart-ncom.android.camera/com.android.camera.MovieView-d #amstart-n#amstart-n #amstart-n #amstart-nAndroidUI系统实现6AndroidUI系统实现6UI的基本外形和控制AndroidUI系统的知识结构如下图所示图AndroidUI系统的知识结GUI系统地使用,首先是由应用程序来控制AndroidUI系统的知识结构如下图所示图AndroidUI系统的知识结GUI系统地使用,首先是由应用程序来控制屏幕上元素的外观和行为,这在各个GUI系统中是不相同的,但是也具有相通性。Android系统在这式等内容,这GUI系统所具有的通用内容控件和基本事件的响应的内容。对于Android应用程序,控件称为View。Android中,在处理UI中的各种元素的时候,两个程序中的要点为得到布局文件(XML)中的控件句UI的基本外形和样菜屏幕间跳转运动事件键盘事件OpenGL3D接3D的动画效渲染OpenGL接口结2D绘图接Drawable和动记录绘路径效2D绘图接口基本控件的使自定义文本框/按钮图像区域/进度和代码控件继承视图组和使用AdapterVi各种布局旋转按钮单选按钮组视图组屏幕元素体控件的基本本小节介绍在Android中几种基本本小节介绍在Android中几种基本的程序控制方法,要获得的效果是通过6.1.1事件响应方法<activityandroid:name="TestEvent1"<action<category本例定义了一个Android中基本的活动<TextViewandroid:id="@+id/text1"android:text="@string/text1"<TextViewandroid:id="@+id/text1"android:text="@string/text1"/><Buttonandroid:id="@+id/button1"<Buttonandroid:id="@+id/button2"为View后,显示的内容就如上图所示,只是行为还没有实现。importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;importandroid.view.View;importandroid.util.Log;publicTestEvent1(){}publicvoidonCreate(BundlefinalTextViewText(TextViewfindViewById(R.id.text1);//获得柄finalButtonButton2=(Button)packageButton1.setOnClickListener(newOnClickListener实现行为功Button1.setOnClickListener(newOnClickListener实现行为功{}{publicvoidonClick(Viewv){}}}在创建的过程中,通过findViewById获得各个屏幕上面的控件(控件)的背景,这里使用的R.id.button1id是对应的。实际上,在布局文件中,各个控件即使不写android:id这一项也可以正常显示,但是如果需要在代码中ButtonsetOnClickListener()设置了其中的点击行为,这个方法的参应的功能,在点击的函数中,将通过Text的句柄对其进行控制。在Android的控件使用方面,这两个编程方面要点是使用findViewById()获取布局文件(XML)中控件的句柄findiyId()函数的参数是一个整ndroid.vi.iw.id.XI,然后通过将基础类转换成其实际的类获得真正的句柄。注意:所转换类必须和布局文SetOnXXXListener()等函数是android.view.View类的函数,各种控件(voidsetOnClickListener(View.OnClickListenervoidsetOnKeyListener(View.OnKeyListenerl);行为。这些函数的参数都是所对应的android.view.View类中的方法。AndroidUIfindViewById()联系布局文件中控件和句柄,并通过OnClickListener()等定制句柄的行为。6.1.2第行为。这些函数的参数都是所对应的android.view.View类中的方法。AndroidUIfindViewById()联系布局文件中控件和句柄,并通过OnClickListener()等定制句柄的行为。6.1.2第二种响应方法packageimportandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.TextView;importandroid.view.View;publicclassTestEvent2extendsActivityimplementsOnClickListener//实现相关的接口privateTextViewmText;privateButton}publicvoidonCreate(BundlemButton1.setOnClickListener(this设置监听的类mButton2.setOnClickListener(this设置监听的类}publicvoidonClick(View{ //区分不同的控seR.id.button1:publicvoidonClick(View{ //区分不同的控seR.id.button1:caseR.id.button2:Log.v(TAG,"other");}}}这个例子的主要变化是让活动实现(implements)了OnClickListener()这个进口,也就是需要实现其中的onClick()方法。然后通过setOnClickListener()将其设置到按钮中的参数就是this,表示了当前的活动。onClick()函数的参数进行判ViewgetId()IDswitch…case分别进(mext样就可以在类的各个函数中都能获得这个句柄进行处理。这和上一种方法是有区别TextView6.1.3第三种响应方法publicclassTestEvent3extendsprivateTextViewmText;==}classButton1_OnClickListenerimplements}classButton1_OnClickListenerimplementsOnClickListener接口的第一实{6.2键盘事件的本例需要实现的内容是通过键盘来控制屏幕上的一个图片的Alpha值,使用上键}classButton2_OnClickListenerimplementsOnClickListener接口的第一实{;}publicvoidonCreate(BundlemText=(TextView)finalButtonmButton1=(Button)findViewById(R.id.button1);mButton1.setOnClickListener(mListener1);//设置监听者的mButton2.setOnClickListener(mListener2);//设置监听者的}}本例的布局文件testkeyevent.xml本例的布局文件testkeyevent.xml<TextView<ImageViewandroid:id="@+id/image"packageimportandroid.app.Activity;importandroid.content.Context;importandroid.view.KeyEvent;importandroid.view.View;importandroid.view.KeyEvent;importandroid.view.View;publicclassTestKeyEventextendsActivityprivateImageViewmImage;privateintmAlphavalue;protectedvoidonCreate(BundlemAlphavalueText=(TextView)findViewById(R.id.alphavalue);mAlphavalue=100;mAlphavalueText.setText("Alpha="+mAlphavalue*100/0xff+}publicbooleanonKeyDown(intkeyCode,msg){Log.v(TAG,"onKeyDown:keyCode="+keyCode);casecaseKeyEvent.KEYCODE_DPAD_RIGHT:mAlphavalue+=20;casecaseKeyEvent.KEYCODE_DPAD_LEFT:mAlphavalue-=20;}if(mAlphavalue<=0x0)mAlphavalue=0x0;mAlphavalueText.setText("Alpha="+mAlphavalue*100/0xffreturnsuper.onKeyDown(keyCode,msg);+}}本例子使用onKeyDown()函数来获得按键的事件,同类的函本例子使用onKeyDown()函数来获得按键的事件,同类的函数还包括onKeyUp()函数,其参数intkeyCode为按键码,KeyEventmsg表示按键事件的消息(其中包含上面打出的logVERBOSE/TestKeyEvent(771):onKeyDown:keyCode=20repeat=0meta=0scancode=108基本上通过keyCodemsg除了按键码之外,KeyEventKeyEvent6.3运动事件的2本例介绍另外触摸屏事件的程序,这个程序在UIMotionEventpublicbooleanonTouchEvent(MotionEventevent)publicbooleanonTrackballEvent(MotionEventevent)finalintgetAction() //获得按键的动作finalintgetFlags() //获得标志finalintgetKeyCode() //获得按键码finalintgetRepeatCount() //获得重复的信息finalintgetScanCode() //获得扫描码packageimportandroid.app.Activity;importpackageimport

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论