2016Android应用开发入门教程_第1页
2016Android应用开发入门教程_第2页
2016Android应用开发入门教程_第3页
2016Android应用开发入门教程_第4页
2016Android应用开发入门教程_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

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

文档简介

Android应用开发入门教程PAGE2PAGE2PAGE11PAGE11目 录第一篇Android系统结构和SDK使用 5第1章 Android的系统介绍 5系统介绍 5软件结构和使用的工具 7第2章AndroidSDK的开发环境 10AndroidSDK的结构 10AndroidSDK环境安装 安装JDK基本Java环境。 安装Eclipse 12获得AndroidSDK 122.2.4(1).在Eclipse3.4(Ganymede)中安装ADT 142.2.4(2).在Eclipse3.5(Galileo)中安装ADT 172.2.5.在Eclipse中配置AndroidSDK 20Android中运行仿真器环境 21建立Android虚拟设备 21运行虚拟设备 22使用Android中的工具 23使用logcat 24使用仿真器控制 25命令行工具adb、mksdcard等 26使用设备控制 28Android中建立工程 29建立工程 29查看和编辑各个文件 31运行工程 33第二篇Android应用程序的概述和框架 36第3章Android应用层程序的开发方式 36应用程序开发的结构 36API参考文档的使用 36第4章Android应用程序示例 40HelloActivity程序的运行 40HelloActivity的源文件结构 41Android.mk文件 41AndroidManifest.xml文件 42源代码文件 42布局文件 43其他资源文件 43HelloActivity的编译结构 43SkeletonApp的程序的运行 44SkeletonApp的源文件结构 44SkeletonApp的编译结构 46第5章Android应用程序的内容 47Android应用程序的概念性描述 47应用程序的组成部分 47应用程序的生命周期 48应用程序包含的各个文件 50使用am工具启动Android应用程序 51第三篇Android的UI系统实现 53第6章UI的基本外形和控制 53控件和基本事件的响应 53事件响应方法 54第二种响应方法 56第三种响应方法 57键盘事件的响应 57运动事件的处理 59屏幕间的跳转和事件的传递 62跳转的方法 62带有返回值的跳转 63菜单的使用 66弹出对话框 67提示信息和两个按钮的对话框 68提示信息和三个按钮的对话框 69列表项对话框 70单选项和按钮对话框 70复选项和按钮对话框 71文本的按键对话框(使用布局文件) 72样式的设置 74预定样式对话框 74自定义样式对话框 74窗口透明样式示例 75第7章控件(Widget)的使用 78Android中控件的层次结构 78基本控件的使用 79普通按钮 79图像区域 80图像按钮 82进度条 83多种控件 85自定义的视图 86第8章视图组(ViewGroup)和布局(Layout)的使用 89Android的屏幕元素体系 89几种独立使用的视图组 90网页视图 90旋转按钮 91文本切换器 93图像切换器 94作为简单容器使用的视图组 95单选按钮组 95使用滚动条 96布局(Layout) 99基本的布局内容 99线性布局(LinearLayout) 100相对布局(RelativeLayout) 101表单布局(TableLayout) 103网格(Grid)视图组 103列表(List)视图组 107使用Tab组织UI 109第9章2D图形接口的使用 使用2D图形接口的程序结构。 图像、图形、文本的基本绘制 文本的对齐方式 使用路径效果(PathEffect) 剪裁效果 记录绘制的过程 121动画效果 123第10章OpenGL3D图形的使用 125使用OpenGL图形接口的程序结构。 125基本的绘制 126渲染器的实现 1273D动画效果的实现 129第一篇Android系统结构和SDK使第1章 的系统介绍⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯系统介绍

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯软件结构和使用的工具系统介绍AndroidGoogleAndroidGoogleLinux平台的、开源的、智能手机操作系件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。OHA(OpenHandsetAlliance,开放手机联盟)Google33Android移动平台系统的发展而组建的一个组织。HTCGoogleG2HeroNexusAndroid手机,如下图所示:图G1、G2、Hero和NexusOne手机GoogleAndroid可以基于仿真器环境。Android1.5以前的仿真环境,Android1.6以后的仿真器环境如下所示:图Android1.5以前的仿真器环境图Android1.6以后的仿真器环境作为一个手机平台,Android在技术上的优势主要有以下几点:全开放智能手机平台多硬件平台的支持使用众多的标准化技术核心技术完整,统一SDK和文档完善的辅助开发工具Android的开发者可以在完备的开发环境中进行开发,Android的官方网站也提供了丰富的文档、资料。这样有利于Android系统的开发和运行在一个良好的生态环境中。软件结构和使用的工具从宏观的角度来看,Android是一个开放的软件系统,它包含了众多的源代码。从下至上,Android系统分成4个层次:1层次:Linux操作系统及驱动;2层次:本地代码(C/C++)框架;3层次:Java框架;4层次:Java应用程序。Android系统的架构如图所示:PAGEPAGE10PAGE9PAGE9JavaJavaJavaJavaJavaLinux用户空间C/C++<-->JAVA系统API图Android系统的架构Android的第1层次由C语言实现,第2层次由C和/C++实现,第3、4层次主要由Java代码实现。12Linux12、3、4层次运行于用户空间。第2层次和第3层次之间,是本地代码层和Java代码层的接口。34AndroidAPIAndroid3层次以下API即可。AndroidJavaAndroidJava基本类组成。对于Android应用程序的开发,主要关注第3层次和第4层次之间的接口。除了软件本身的代码之外,Android还提供了一系列工具来辅助系统开发,这些主要的工具包括:aap(ndrodssetPakgigozp(zipjakassets。adb(dridebgBrige,ndoid调试桥adbkAndroid的调试器连接在一起。andodandodndrodirtulevices(。L(AndrodInterfaceDscipionLngugndrodL工具可以生成进程Service可能使用的接口。Devices,Android虚拟设备)用于配置模拟器,模拟出类似的设备效果(DalvikDeugniorServi,vkvk或者设备上管理进程并协助调试。可以使用它杀死进程,选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和线程信息,截取模拟器或设备的屏幕画面,还有更多的功能。dx:dx工具用于将.class字节码(bytecode)Android字节码(保存在.dex文件中)这个字节码文件AndroidJava虚拟机运行用的。Draw9-patch:Draw9-patch(WYSIWYG)NinePatch图形。Eulato(drod系统的运行,使用模拟器非常适合调试和测试应用程序。Hierarchy层级观察器(view)的布局层次展现出来,此外,还给当前界面提供了一个具有像素栅格(grid)的放大镜观察器。ksdcard(dikiage(例如SD卡。Monkey:Monkey是在模拟器或设备上运行的一个小程序,它能够产生随机的用户事件流,例如:点击(cictucgesueMney给正在开发的程序做随机的但可重复的压力测试。sqlite3:sqlite3SQLitesqlite标准命令行工具。TraceviewAndroid应用程序产生的跟踪日志(tracelog)转换为图形化的分析视图。2章AndroidSDK的开发环境⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯AndroidSDK

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯AndroidSDK的环境安装Android中运行仿真器环境Android中建立中程AndroidSDKAndroidAndroidAPISDKEclipseIDE开发环境。AndroidSDK的结构运行仿真器AndroidSDK文档示例代码运行仿真器AndroidSDK文档示例代码底层映像安装插件设置SDKADTEclipse开发环境Eclipse开发环境本机JAVA环境工具WindowsLinux图Android系统的IDE开发环境AndroidSDKWindowsSDK中工具不同Android开发者的网站上SDK。Android的SDK命名规则为:android-sdk-{主机系统}_{体系结构}_{版本}例如,Android提供SDK的几个文件包如下所示:android-sdk-windows-1.5_r2.zipandroid-sdk-linux_x86-1.5_r2.zipandroid-sdk-windows-1.6_r1.zipandroid-sdk-linux_x86-1.6_r1.zipSDK的目录结构如下所示:add-ons:附加的包;docs:HTML格式的离线文档;platforms:SDK核心内容;tools:工具。在platforms中包含了的各个AndroidSDK版本的目录中,包含系统映像,工具、示例代码等内容。data/:包含默认的字体、资源等内容;images/Android(Androidsystemimage),默认的用户数据映像(userdataimage),默认的内存盘映像(ramdiskimage)等等,这些映像是仿真器运行的时候需要使用的;samples/Androidskins/:包含了几个仿真器的皮肤,每个皮肤对应了一种屏幕尺寸;templates/SDK开发工具的模板;tools/Anydevelopmenttoolsthatarespecifictotheplatformversion.android.jar:AndroidAndroid应用程序的时候被使用。Android的发布版本API级别Android1.12Android1.53Android1.64Android2.05Android2.0.1Android的发布版本API级别Android1.12Android1.53Android1.64Android2.05Android2.0.16Android2.17AndroidSDKADTDevelopmentEclipse集成环境的一个插件。EclipseAndroid应用程序既容易又快速。AndroidSDK环境安装Android的SDKWindows版本需要以下的内容:JDK1.5或者JDK1.6Eclipse集成开发环境ADT(AndroidDevelopment插件AndroidSDK其中ADT和AndroidSDK可以到Android开发者的网站去下载,或者在线安装亦可,ADT的功能如下所示:EclipseIDEAndroid开发工具。例如,ADTEclipse访问DDMS工具的很多功能——屏幕截图、管理端口转发g提供了一个新的项目向导wojtidndridAndroid应用程序的过程变得自动化,以及简单易行。AndroidAndroidmanifestXML在Eclipse环境中使用AndroidSDK的步骤如下所示:安装JDK基本Java环境。Eclipse的运行需要依赖JDK,因此需要下载使用JDK的包,并进行安装。JDK1.6版本其文件为jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,点击直接进行安装即可。安装EclipseEclipse集成开发环境是开放的软件,可以到Eclipse的网站上去下载:/downloads/Eclipse包含了以下的几个版本Eclipse3.3(Europa)Eclipse3.4(Ganymede)Eclipse3.5(Galileo)在AndroidEclipse3.4和Eclipse3.5Eclipse3.3Android官方的验证。如果使用Eclipse3.4,可以去下载eclipse-SDK-3.4-win32.zip包;如果使用Eclipse3.5,可以去下载eclipse-SDK-3.5.1-win32.zipeclipse.exe文件。获得AndroidSDKAndroidSDKAndroidAndroidSDK,可能使用到两种方式:AndroidSDK的包(Archives)通过软件升级的方式(Setup)下载AndroidSDKAndroidSDK1.6AndroidSDK1.1AndroidSDK1.5AndroidSDK1.6可以直接从AndroidSDK包含LinuxWindowsMACWindowsWindows的版本,例如:android-sdk-windows-1.5_r2.zip,android-sdk-windows-1.6_r1.zip,这个M的大小。以这种方式下载的AndroidSDK,不需要安装,直接解压缩即可。目前Android系统推荐使用的方式软件升级获得Android包:android-sdk_r04-windows.zip从ndrdndrodSK的相关包aoid-sk_r4ino.zpndrd20MSetupSDK是通过这个可执行程序获得的。解AndroidSDK的基本目录结构,但是其中还没有实际的内容。SDKSetup.exeAndroidSDK运行程序,AndroidSDK的,出现SDK的下载界面:图AndroidSDK的安装界面SettnsForce项,并且选择保存(Saveadpl。图设置安装路径回到InstalledPackages中,进行安装,出现Android的各个版本的SDK、工具、文档的安装界面,如下所示:图选择要安装的组件每个组件可以选择,接受(Accept)表示安装,拒绝(Reject)表示不安装,接受全部(AcceptAll)表示安装所有的内容。文档一般安装成最新的版本。选择后,安装程序将依次安装各个组件。PAGE14PAGE14PAGE15PAGE15图安装界面tempzipAndroidSDK。2.2.4(1).在Eclipse3.4(Ganymede)中安装ADT第一步:启动Eclipse选择“Help”>“SoftwareUpdates...”准备安装插件。图Eclipse3.4中选择软件升级第二步:在打开的对话框中点击“AvailableSoftware”,出现Eclipse的现有软件对话框。图Eclipse3.4中选择要安装的插件点击右侧自上而下的第3个按钮,“AddSite...”准备增加插件。图增加ADT的路径在“AddSite”对话框中,输入Android插件的路径:/android/eclipse/ArchiveADT(目前最新的版ADT-0.9.5.zip)。pluginURLDeveloperDeveloperTools”中,图Eclipse3.4中选择安装Android的DDMS和ADT然后点击“Install...”按钮,继续运行,如图所示:图Eclipse3.4中进行安装Android的DDMS和ADT选择Next将出现如图的对话框:图Eclipse3.4中选择同意Android的协议选择接受(accept)FinishAndroid组件的阶段。安装的过程要经过寻找依赖和安装两个阶段,如图所示:图Eclipse3.4中解决依赖关系和安装第四步:安装完成,关闭并重新启动Eclipse。再次进入Eclipse3.4后,将发现ADT已经被安装。2.2.4(2).在Eclipse3.5(Galileo)中安装ADT第一步:启动Eclipse选择“Help”>“InstallNewSoftware...”准备安装插件。图Eclipse3.5中选择安装新软件第二步:出现软件升级的对话框Eclipse3.5的软件升级的对话框3个按钮,“AddSite...”准备增加插件。图Eclipse3.5中增加ADT插件的路径在“AddSite”对话框中,输入Android插件的路径:/android/eclipse/另外的一种方式是点击Archive…按钮,这样可以不使用网络,直接指定磁盘中的ADT包(最新的版本是ADT-0.9.5.zip)。with/android/eclipse/,后面的列表变为了“DeveloperTools”,其中包含了两个项目:AndroidDDMSAndroidDevelopment选择继续进行安装:图Eclipse3.5中选择安装Android的DDMS和ADT选中后,点击Finish将出现安装的详细信息的对话框,如图所示:图Eclipse3.5中选择安装Android的插件选择Next进行下一步的安装。图Eclipse3.5中选择同意Android的协议20202121FinishAndroid图Eclipse3.5中选择进行Android的插件第五步:安装完成,关闭并重新启动Eclipse。再次进入Eclipse3.5后,将发现ADT已经被安装。2.2.5.在Eclipse中配置AndroidSDK进入安装ADT的Eclipse环境后,选择“Window”>“Preference”,从左侧的列表中选择Android项:图Eclipse中选择AndroidSDK的路径左侧的Android选项是由于安装了Android的SDK而出现的。在SDK设置SDKLocation中,点击“Browse”…按钮;选择Android,SDK的目录,点击“OK”按钮。中运行仿真器环境Android虚拟设备AndroidAndroidEclipseWindow”>“AndroidAVDManagerAndroidSDKandAVDDeviceManager图AndroidSDK和AVD管理器AndroidNew选择建立一个虚拟设备。建立新的Android虚拟设备的窗口为CreatenewAVD,如图所示:图建立新的AVDPAGE22PAGE22PAGE23PAGE23Android虚拟设备的建立包含了以下的一些选项:名字(ae目标(agK版本(KplatformK)SDSDSD卡映像文件,SDmksdcard工具建立的。皮肤(n:这里皮肤的含义其实是仿真器运行尺寸的大小,默认的尺寸有P(32x0,-L(480x320)等,也可以通过直接指定尺寸的方式制定屏幕的大小。属性:可以由用户指定仿真器运行的时候,Android系统中一些属性运行虚拟设备AndroidSDKandAVDDeviceManagerAndroidHVGA-P(320x480)尺寸的运行结果如图所示:图使用仿真器的运行Android系统出现窗口的左侧是运行的仿真器的屏幕,右侧是模拟的键盘。设备启动后,可以使用右侧的键盘模拟真实设备的键盘操作,也可以用鼠标点击(或者拖拽和长按)屏幕,模拟触摸屏的操作。PC键按键之间的映射关系如下表所示:仿真器的虚拟按键键盘的按键HomeHOMEMenu(左软按键)F2orupbuttonStar(右软按键)Shift-F2orPageDownBackESCCall/dialbuttonF3Hangup/endcallbuttonF4SearchF5PowerbuttonF7AudiovolumeupbuttonKEYPAD_PLUS,Ctrl-5AudiovolumedownbuttonKEYPAD_MINUS,Ctrl-F6CamerabuttonCtrl-KEYPAD_5,Ctrl-F3切换到上一个布局方向(例如portrait和landscape)KEYPAD_7,Ctrl-F11切换到下一个布局方向(例如portrait和landscape)KEYPAD_9,Ctrl-F12切换Cell网络的开关on/offF8切换CodeprofilingF9切换全屏模式Alt-Enter切换跟踪球(trackball)模式F6临时进入跟踪球(trackball)模式(当长按按键的时候)DeleteDPadleft/up/right/downKEYPAD_4/8/6/2DPadcenterclickKEYPAD_5Onionalpha的增加和减少KEYPAD_MULTIPLY(*)/KEYPAD_DIVIDE(/)Android仿真器启动虚拟设备之后,默认就可以使用主机的网络作为自己的网络、使用主机的音频设备作为自己的声音输出。使用Android中的工具AndroidWindow->ShowViewOther选项,Android的各个工具。调用的过程如下图所示:图选择Android的各个工具选择Android工具的对话框如图所示:图选择Android工具的对话框Device(设备控制EmulatorControl(仿真器控制FileExplore(文件浏览Heap(堆内存LogcatResourceExplore(资源浏览Threads(线程等使用logcatLogcatLogAndroid图使用Logcat工具显示LOGLogcatLinuxGUI的LogcatAndroid、ID(Pid)、标签(tag)、Log内容(Message)等项目。#logcat[options][filterspecs]LogcatLog的过滤器(Filter)Log信息,屏蔽其他的信息。logcatsystem/bin目录中,Logcat的使用方法如下所示:#logcat[options][filterspecs]logcat工具的选项如下所示:-s '*:s-f<filename> 输出到文件,在默认情况下是标准输出-rkbytes>] 循环log的字节数(16),需要–f-n<count> log4-v<format>设置log的打印格式,<format>是下面的一种:briefprocesstagthreadrawtimethreadtimelong-c log并退出-d log并退出(不阻塞)-g 得到环形缓冲区的大小并退出-b<buffer> 请求不同的环形缓冲区('main'(默认)、'radio'、'events')-B将log输出到二进制文件中使用仿真器控制选择EmulatorControl选项可以开启仿真器的控制对话框,它的界面如下所示:图Android仿真器控制界面它甚至可以模拟打电话,发短信的过程。例如在incomingnumber中输入电话号码,然后点击Call按钮。这是仿真器的运行界面如图所示:图Android仿真器接收来电接受电话的程序已经被调用起来,这里显示的电话号码1-234-56,也是在仿真器控制的窗口中设置的。模拟发送短信的界面显示如下所示:图Android仿真器接收短信命令行工具adb、mksdcard等AndroidWindows的开始->cmd并确adbmksdcardAndroidSDK的tools目录中,使用命令行的窗口如图所示:PAGEPAGE27PAGE28PAGE28#psUSERPID PPID#psUSERPID PPIDVSIZERSS WCHAN PCNAME图在命令行中使用adbadb(AndroidDebugBridge,Android调试桥)AndroidUSB连adb进行调试,通常在命令行的界面中。shellAndroidLinuxshellshell提示符后执行Android系统提供的Linux命令。#ls-l使用ls命令查看Android系统根目录:#ls-ldrwxrwxrwtrootroot2009-06-1502:17sqlite_stmt_journalsdrwxrwxsystemcache2009-06-1502:18cachedsystemsystem2009-06-1502:17sdcardlrwxrwxrwxrootroot2009-06-1502:17etc->/system/etcdrwxr-xr-xrootroot2009-05-2802:16systemdrwxr-xr-xrootroot1970-01-0100:00sysdrwxr-xrootroot1970-01-0100:00sbindr-xr-xr-xrootroot1970-01-0100:00proc-rwxr-xrootroot90751970-01-0100:00init.rc-rwxr-xrootroot16771970-01-0100:00init.goldfish.rc-rwxr-xrootroot1065681970-01-0100:00init-rw-r--r--rootroot1181970-01-0100:00pdrwxrwx--xsystemsystem2009-05-2802:49datadrwxrootroot1970-01-0100:00rootdrwxr-xr-xrootroot2009-06-1502:18devAndroidout/target/product/generic/rootetc、proc等Androidsystem映像被挂接到根data目录中。使用ps命令可以查看Android系统的进程:root10280188c008de040000c74cS/initroot2000c004b33400000000Skthreaddroot3200c003cf6800000000Sksoftirqd/0root4200c00486b800000000Sevents/0root5200c00486b800000000Skhelperroot10200c00486b800000000Ssuspendroot42200c00486b800000000Skblockd/0root45200c00486b800000000Scqueueroot47200c016f13c00000000Skseriodroot51200c00486b800000000Skmmcdroot96200c0065c7c00000000Spdflushroot97200c0065c7c00000000Spdflushroot98200c006990c00000000Skswapd0root100200c00486b800000000Saio/0root269200c016c88400000000Smtdblockdroot304200c00486b800000000Srpciod/0root5401740328c003aa1cafe0d08cS/system/bin/shroot54517225620876c008e3f4afe0c584Szygotemedia5461174043496ffffffffafe0c45cS/system/bin/mediaserverbluetooth5471 1168568 c008de04afe0d25cS/system/bin/dbus-daemonroot5481800300c01f3b04afe0c1bcS/system/bin/installdroot5511840356c00ae7b0afe0d1dcS/system/bin/qemudroot55411268116ffffffff0000e8f4S/sbin/adbdsystem57054517565223972ffffffffafe0c45cSsystem_serverradio60954510570417584ffffffffafe0d3e4Scom.android.phoneapp_461154511338019492ffffffffafe0d3e4Scess.acoreapp_126325459539213228ffffffffafe0d3e4Scom.android.mmsapp_4645app_5 6559719212964ffffffffafe0d3e4Scom.android.inputmethod.lati545 9516413376ffffffffafe0d3e4Scess.mediaapp_76685459770014264ffffffffafe0d3e4Scom.android.calendarapp_116845459413212624ffffffffafe0d3e4Scom.android.alarmclockroot70254088834000000000afe0c1bcRpssystemrootrootradio5415425435441 808 264 c01654b4afe0c45cS/system/bin/servicemanager1118366685392364264684c008e3f4afe0c584S/system/bin/voldc0192c20afe0cdecS/system/bin/debuggerdffffffffafe0caccS/system/bin/rildsystemrootrootradio5415425435441 808 264 c01654b4afe0c45cS/system/bin/servicemanager1118366685392364264684c008e3f4afe0c584S/system/bin/voldc0192c20afe0cdecS/system/bin/debuggerdffffffffafe0caccS/system/bin/rildnZygote/system/bin/sh/system/bin/mediaserverinitinitcess.acore(Home)com.android.mmszygote。使用adb连接目标系统终端的方式如下所示:adbadbshell使用adb安装应用程序的方法为:adbinstalladbinstallXXX.apk使用adb在主机和目标机之间传送文件的方法为:adbpush{host_path}adbpush{host_path}{target_path}adbpull{target_path}{host_path}mksdcard是用来建立SD卡映像的工具,用来建立一个Fat32格式的磁盘映像,其使用方法如下所示:mksdcard[-llabel]<size><file>mksdcard[-llabel]<size><file>mksdcard的参数-l用于指定磁盘映像的标签,size用于指定磁盘映像的大小,其后面可以跟K、M、G等参数,file是磁盘映像的文件名称,这个文件也就是在仿真器运行过程中指定的文件。mksdcard128Msdcard.imgmksdcard128Msdcard.img这表示建立了一个大小为128M,名称为sdcard.img的Fat32磁盘映像文件。使用设备控制Device工具可以用于进一步控制仿真器的运行状况,在其中可以查看Heap(堆内存)、Threads(线程)的信息,还具有停止某个进程的运行,截取屏幕等功能。Device工具的窗口如图所示:PAGE29PAGE29PAGE30PAGE30图Android的设备工具点击Device窗口工具栏最右侧的ScreenCapture按钮,可以打开截取屏幕的窗口,如上图所示。Android中建立工程建立工程AndroidSDKSDK中建立工程并进行调试了。Android工程步骤如下:选择“File”>“New”>“Project”选择“Android”>“AndroidProject”,点击“Next”按钮:选择thecontentsfortheproject。图建立新的Android工程可以选择新建工程或从源代码建立工程,如果从源代码建立工程,那么所指定的目录中需要具有AndroidManifest.xml文件。图使用已有的示例建立新工程SDKplatforms/android-XXX/samplesSDK自带的示例程序,HelloActivity示例程序。图选择工程示例点击“Finish”按钮,工程将被建立。查看和编辑各个文件IDEAndroid具查看。查看AndroidManifest.xml文件的情况,如图所示:图查看和编辑AndroidManifest.xml文件AndroidManifest.xmlAndroidManifest.xml标签将切换到文本模式,使用文本的形式查看和编辑AndroidManifest.xml中的内容。浏览布局文件,如图所示:图查看和编辑布局文件浏览布局文件是一个更有用的功能,可以直观地查看程序的UI布局,点击标签(布局文件的名称)可以切换到文本模式。利用IDE的布局查看器,可以在程序没有运行的情况下直接查看和组织目标UI界面。查看各个value文件和建立数值,如图所示:图查看各个value文件和建立数值查看各个Java源代码文件,如图所示:PAGEPAGE37PAGE34PAGE34图Java源代码文件的编辑界面Java源代码采用文本的方式,但是在右边也列出了Java源代码中类的层次结构。在IDE的源代码环境开发JAVA程序,还具有自动修正、自动增加依赖包、类方法属性查找等功能。运行工程AndroidRunDebug图运行Android工程开始运行的时候,如果现在已经有连接到真实的设备或者仿真器设备上,将直接使用这个设备,否则将启动一个新的仿真设备。[HelloActivity]AndroidLaunch![HelloActivity]adbisrunningnormally.[HelloActivity]Performingcom.example.android.helloactivity.HelloActivityactivitylaunch[HelloActivity]AutomaticTargetMode:usingexistingemulator[HelloActivity]AndroidLaunch![HelloActivity]adbisrunningnormally.[HelloActivity]Performingcom.example.android.helloactivity.HelloActivityactivitylaunch[HelloActivity]AutomaticTargetMode:usingexistingemulator'emulator-5554'runningcompatibleAVD'HVGA'[HelloActivity]WARNING:ApplicationdoesnotspecifyanAPIlevelrequirement![HelloActivity]DeviceAPIversionis4(Android1.6)[HelloActivity]UploadingHelloActivity.apkontodevice'emulator-5554'[HelloActivity]InstallingHelloActivity.apk...[HelloActivity]Success![HelloActivity]Startingactivitycom.example.android.helloactivity.HelloActivityondevice[HelloActivity]ActivityManager:Starting:Intent{cmp=com.example.android.helloactivity/.HelloActivity}图运行HelloActivity程序在运行的一个仿真设备的时候,可以进一步通过选择“RunAs”中的“RunConfigurations”进行进一步的配置。启动后的界面如图所示:图选择工程中运行的动作其中,在Android的标签中可以选择启动的工程,启动活动(LaunchAction)选项中可以选择启动的哪一个活动(Android的一个工程中可以包含多个活动)。在Target标签中可以选择启动的时候使用的设备。第二篇应用程序的概述和框架3章应用层程序的开发方式⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯API参考文档的使用应用程序开发的结构

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯Android应用程序开发是Android开发中最上面的一个层次,它们构建在Android系统提供的API之上。Android应用程序的基础是Android提供的各个Java类,这些类组成了Android系统级的API。应用程序Android预置自开发应用程序自开发应用程序自开发应用程序应用程序Android预置自开发应用程序自开发应用程序自开发应用程序系统APIAndroid框架层软件硬件抽象层硬件抽象层Android手机 Android仿真器图Android应用的开发结构Android应用程序可以基于两种环境来开发:AndroidSDKAndroid源代码。Android系统本身内置了一(也包括内容提供者(SDK环境和源代码环境)用户自行开发的应用程序和AndroidAndroid框架层的API来构建的,它们的区别仅仅在于他们是否被包含在默认的Android系统中。API参考文档的使用在开发Android应用程序时可以参考SDK中提供的参考文档(SDK\docs\index.html),其内容包含在Reference标签中。ClassOverview(类的介绍)ClassOverview(类的介绍)PackgeIndx(包索引;ClassIndex(类索引。Android(也包括接口等内容根据包索引,每一个包中包含的主要内容大致如下所示:Interface接口类;Classes(;Enu(枚举值;Exceptions(异常。每个包中包含的内容,基本上是Java语言中标准的内容。AndroidAndroidAPI的主要组成部分,主要参考的内容包括了以下的内容。根据类索引,每一个类中包含的主要内容大致如下所示:扩展和实现的内容;按包名的继承(扩展)关系(可用于反向查找这个类所在的包;Overvie概览;XMLAttribue(XML;Contat常量;Contrutor(构造方法;Methods(方法。JavaXML属性AndroidpublicclassActivityextendsContextThemeWrapperimplementsComponentCallbacksKeyEvent.CallbackLayoutInflater.FactoryView.OnCreateContextMenuListenerWindow.Callbackjava.lang.ObjectpublicclassActivityextendsContextThemeWrapperimplementsComponentCallbacksKeyEvent.CallbackLayoutInflater.FactoryView.OnCreateContextMenuListenerWindow.Callbackjava.lang.Object↳android.content.Context↳android.content.ContextWrapper↳android.view.ContextThemeWrapper↳android.app.ActivityKnownDirectSubclassesActivityGroup,AliasActivity,ExpandableListActivity,ListActivityKnownIndirectSubclassesLauncherActivity,PreferenceActivity,TabActivity从Activity类中可以看出,类的帮助文档主要包含以下一些内容:publicclass:表示只是一个公开的类; exends:标明了这个类继承的父类(a只有一个唯一的父类,后面的内容表示这个类从祖先开始继承的关系。这里的类使用的是包含了其所在包名称的全名,因此在这里可以得知类及其祖先类属于哪个包;Ipleents:标明了这个类实现的接口(可以有多个;KnownDirectSubclasses:这个类的直接继承者;KnownIndirectSubclasses:这个类的间接继承者。从中,可以看出Activity类在android.app包中,直接继承了android.view.ContextThemeWrapper,并且被ActivityGroup,ListActivity等几个类直接继承。被LauncherActivity等几个类间接继承。类的介绍的主要内容在后面,主要部分是各个类的方法的说明,这些方法也是在类的使用过程中需要主要关注的内容。38383939SummarySummaryConstants(常量的列表)InheritedConstants(继承的常量的列表,按照继承类的顺序)PublicConstructors(公共的构造函数)PublicMethods(公共方法的列表)ProtectedMethods(保护方法的列表)InheritedMethods(继承方法的列表,按照继承类的顺序)(详细的介绍)类的帮助中一般只列出了自己的常量、方法、XML属性等,对于继承得到的内容(包括方法和常量),JAVAUIXMLattributes(XML属性)一类。publicclassButtonextendsTextViewjava.lang.Object↳android.view.View↳android.widget.TextView↳android.widget.ButtonKnownDirectSubclassesCompoundButtonpublicclassButtonextendsTextViewjava.lang.Object↳android.view.View↳android.widget.TextView↳android.widget.ButtonKnownDirectSubclassesCompoundButtonCompoundButtonAbuttonwithtwostates,checkedandunchecked.KnownIndirectSubclassesCheckBox,RadioButton,ToggleButtonXMLattributesSeeButtonAttributes,TextViewAttributes,ViewAttributesSummaryInheritedXMLAttributesFromclassandroid.widget.TextViewFromclassandroid.view.ViewInheritedConstantsPublicConstructorsInheritedMethodsButton类的头部信息和普通的类基本相同,但是包含了XMLattributesButtonAttributes,TextViewAttributes,ViewAttributes,根据类的继承关系可以得知,这个启示是自己的属性、父类(Button(Button。ButtonXMLInheritedXMLAttributesFromclassandroid.widget.TextView和Fromclassandroid.view.View可以得到这些属性的列表。每个属性包含了AttributeName(属性名称)RelatedMethod(相关方法)Description(描述)几个项目。例如,TextView的几个属性如下所示:android:textsetText(CharSequence)Texttodisplay.android:textColorsetTextColor(ColorStateList)Textcolor.android:text等表示了属性在XML文件中的名称,setText()等表示了在JAVA源文件中使用的方法,最右侧的内容是这个属性的描述。XMLattributesXML属性的帮助以及相关的值可以在android.R.styleable类中查找,这个类也可以直接被调出,方法为:PackageIndex→android→android.R.styleableandroid.R.styleable中列出了一些类的XML属性,例如TextView的capitalize属性的相关内容如下所示:publicstaticfinalintTextView_capitalizeIfpublicstaticfinalintTextView_capitalizeIfset,specifiesthatthisTextViewhasatextualinputmethodandshouldautomaticallycapitalizewhattheusertypes.Thedefaultis"none".usertypes.Thedefaultis"none".Mustbeoneofthefollowingconstantvalues.ConstantValueDescriptionnone 0Don'tautomaticallycapitalizeanything.sentences 1Capitalizethefirstwordofeachsentence.words 2Capitalizethefirstletterofeveryword.characters 3Capitalizeeverycharacter.Thiscorrespondstotheglobalattributeresourcesymbolcapitalize.ConstantValue:44(0x0000002c)这里列出了属性的值(Value),这些值的本质是整数常量,但是在XML中使用的还是名称。整数值是Android内部运作使用的。XMLAndroidManifest.xmlXML文件中使用。android.R.styleableAndroidManifestAndroidManifest.xml中使用的属性。例如,AndroidManifestAction项目是AndroidManifest.xml中的Action标签中使用的内容,如下所示:publicstaticfinalint[]AndroidManifestActionpublicstaticfinalint[]AndroidManifestActionAttributesthatcanbesuppliedinanAndroidManifest.xmlactiontag,achildoftheintent-filtertag.SeeaddAction(String)formoreinformation.Includesthefollowingattributes:AttributeSummaryandroid:nameThenameofanactionthatishandled,usingtheJava-stylenamingconvention.SeeAlsoAndroidManifestAction_nameAttributeSummary中的android:name引用的内容是AndroidManifest.xml中的Action标签可以使用的android:name属性。相比各种类的帮助信息,接口(Interface)的帮助信息更加简单一些。一般的接口是需要被实现才能够使用的。例如,View.OnClickListener的帮助信息前面的内容如下所示:publicstaticinterfaceView.OnClickListenerpublicstaticinterfaceView.OnClickListenerandroid.view.View.OnClickListenerKnownIndirectSubclassesCharacterPickerDialog,KeyboardView这里的,android.view.View.OnClickListener表示了View.OnClickListener这个接口在android.view这个包中。对于一个接口,IndirectSubclasses的含义为实现(implements)这个接口。SummaryPublicMethodsabstractvoidonClick(Viewv)Calledwhenaviewhasbeenclicked.SummaryPublicMethodsabstractvoidonClick(Viewv)Calledwhenaviewhasbeenclicked.View.OnClickListeneonClick()函数。404041414章Android应用程序示例⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯HelloActivity程序的运行HelloActivity的源文件结构HelloActivity的编译结构SkeletonApp 的程序的运行SkeletonApp 源文件结构SkeletonApp 编译结构HelloWorldAndroid中最Android程序的文件结构和编译后的结构。HelloActivity程序的运行HelloActivity是一个简单的Android应用程序,其工程文件名称为HelloActivity,在Android的源代码和SDK中,都包含了这个包。HelloActivity的图标和运行情况如图所示。图HelloActivity的图标和运行情况这个程序有一个简单的活动(Activity),用于启动一个新的界面,并在界面上显示“Hello,World!”字符串。HelloActivity的源文件结构HelloActivity工程的源文件的结构按照目录树的方式如下所示:HelloActivity/|Android.mk (工程管理文件)|AndroidManifest.xml (工程描述文件)|res (资源文件)| |--layout| | `-hello_activity.xml (布局文件)| `--values| `--strings.xml (字串资源文件)|src (Java源代码文件)`--com`--example`--android`--helloactivity`--HelloActivity.javaHelloActivity工程中另有一个tests目录,其中也具有自己的Android.mk和AndroidManifest.xml文件,这是另一个工程,是HelloActivity工程的测试程序。Android.mk文件LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE_TAGS:=samples#Onlycompilesourcejavafilesinthisapk.LOCAL_SRC_FILES:=$(callall-java-files-under,src)LOCAL_PACKAGE_NAME:=HelloActivityLOCAL_SDK_VERSION:=currentincludeLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE_TAGS:=samples#Onlycompilesourcejavafilesinthisapk.LOCAL_SRC_FILES:=$(callall-java-files-under,src)LOCAL_PACKAGE_NAME:=HelloActivityLOCAL_SDK_VERSION:=currentinclude$(BUILD_PACKAGE)#Usethefollowingincludetomakeourtestapk.include$(callall-makefiles-under,$(LOCAL_PATH))Android.mkAndroid编译过程中通用的工程管理文件,本地程序、本地库和Java程序包都使用Java多的内容,其中关键的内容是使用include$(BUILD_PACKAGE)表示从当前目录编译Java应用程序包。LOCAL_PACKAGE_NAME定义的是这个程序的APKLOCAL_MODULE_TAGSLOCAL_MODULE_TAGSsamplesAPK包,但是不安装在系统中。使用不eng,将安装到目标系统中。最后一行的include$(callall-kefiles-under$(LOCAL_PATH)Android.k文件,本例中也就是tests目录中的内容。42424343AndroidManifest.xml文件AndroidManifest.xml文件是这个Android应用程序的工程描述文件,包含了宏观上的内容,如下所示:<?xmlversion="1.0"encoding="utf-8"?><?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.example.android.helloactivity"><applicationandroid:label="Hello,Activity!"><activityandroid:name="HelloActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></manifest>application(表示应用程序)activity(表示活动。活动是应用程序中的一个组件,一个应用程序中也可以包含若干个组件。包名定义为com.example.android.helloactivity,表示将从src目录的com/example/android/helloactivityJavaHelloActivity.javaintent-filtercategory中的ent.category.LAUNCHER表示活动将在Android的桌面(Android默认的桌面程序名称也是LAUNCHER)上出现。applicationandroid:label为<activityandroid:name="HelloActivity"android:label="@string/label_name"android:icon="@drawable/icon_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity>在AndroidManifest.xml文件中为一个活动指定<activityandroid:name="HelloActivity"android:label="@string/label_name"android:icon="@drawable/icon_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity>android:labelandroid:iconres/drawable中对应名称的图片文件作为图标(icon_name.png)。activity和application都具有android:label和android:icon等属性,由于活动是程序的单元,且应用可以包含多个活动,因此程序首先将使用activity中的这些标签,如果没有则使用上一级的application中标签的定义源代码文件HelloActivityHelloActivity.javasrccom/example/android/helloactivity中,内容如下所示:packagecom.example.android.helloactivity;importandroid.app.Activity;packagecom.example.android.helloactivity;importandroid.app.Activity;importandroid.os.Bundle;publicclassHelloActivityextendsActivity{publicHelloActivity(){}@Override//定义包名//引入包含的包publicvoidonCreate(BundlesavedInstanceState){//重载onCreate()方法super.onCreate(savedInstanceState);setContentView(R.layout.hello_activity);//使用hello_activity.xml布局文件}}HelloActivityAndroid系统API(Activity)指定了当前活动的布局,这里表示将从res/layout目录中找到hello_activity.xml文件作为本例的布局文件使用。布局文件<?xmlversion="1.0"encoding="utf-8"?><EditTextxmlns:android="/apk/res/android"ndroid:id="@+id/text"android:layout_width="fill_parent"android:layout_height="fill_parent"android:textSize="18sp"android:autoText="true"android:capitalize="sentences“<?xmlversion="1.0"encoding="utf-8"?><EditTextxmlns:android="/apk/res/android"ndroid:id="@+id/text"android:layout_width="fill_parent"android:layout_height="fill_parent"android:textSize="18sp"android:autoText="true"android:capitalize="sentences“android:text="@string/hello_activity_text_text"/>UI元素——EditText,就是在界面上出现的占据全屏的可编辑文本框。在这里定义了这个可编辑文本框的初始化字符串为"@string/hello_activity_text_text",这个值在另外的资源文件string.xml。其他资源文件string.xml是本例中的一个资源文件,其内容如下所示:<?xmlversion="1.0"encoding="utf-8"?><?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello_activity_text_text">Hello,World!</string></resources>这里定义了名称为“hello_activity_text_text”的字符串的内容为Hello,World!,这就是出现在屏幕上的字符串。HelloActivity的编译结构AndroidSDK环境下开发生成的所有目标文件均在assets、bin、gen等目录。gengen/com/ex

温馨提示

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

评论

0/150

提交评论