版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移动平台及其应用移动平台及其应用第3章Android应用程序的结构及工作原理Android工程的文件系统结构Hello工程Android应用程序的基本组成四大组件(ActivityVServiceBroadcastReceiver^ContentProvider)和意图对象IntentAndroid虚扌以机Dalvik使用AndroidTestCase做Android单元测试实验3Android应用程序的结构及工作原理Hell。工程结构分析packagewustzz.helloandroidi系统自动生成的java$:14』tJHelloAndroid-(Asrc』EjJwustzz.helloandroidI[jjMainActivityjavapublicfinalclassR{publicstaticpublicstaticpublicstaticpublicstaticfinal
final
final
finalclass
class
class
class赤切{[]dimendrawable{[idTpublicstaticfinalintactiDn_£etting£=-0x7f0800&0;publicstaticfinalclasslayout{ ■publicstaticfinalintactiuitj_mpin=0x7fe3&W0;卜・ ・. 1 F、-publicstaticfinalclassmenu/{publicstaticfinalintmfrin-ax7f070000;J r Apublicstaticfinalclassstring{ ipublicstaticfinalint|action_settings=0x7f&5dp01-publicstaticFinalint^app_name=0x7f&5^&&&;i'publicstaticFinalinphelLo_»vorLtf=0x7f^50002;\、I J %、、%、publicstaticfinalclasstetyle(口* r卒在程序中引用资源时用:R内部类.资源idj例如:setContentView(R.layout.ac『m/y_majn丿;getResources().getString(R.string./7e//o_itor/d)在xml布局中则引用:@内部类/资源idandroid:text=”@string/h&Ho_woHd”*
、、:s、R.java是项目中所有资源的索引文件,资源以(资源id,值)形式存放在对应的内部类中圭genGeneratedJavaFiles]•田wustzz.helloandroid
l>③BuildCcniig.javai来 __L A|>J[J|Rjava资源目录res文件夹下的文件会
被映射到RJava中例如布局资源、菜单资源
文件是整体映射过去冽如 值资源是单个映射过去na'ar?cfttJ1:•HelloAridroid</51iig><<sNingnaiie-^action_sertingsSetting$【广ing>^stringnas*h己ILqjmOellc,^crld!</sT'ing>Android4.3AndroidPrivateLibrariesassetsbinlibsres&drawable-hdpi旧drawable-ldpi、&layout.图片
资源 布局|E)activity.mairuunll缉源■&menu菜单资源cmainjcm■&values—•[Cjdimens.xm_..|©strings.xrr)l©styles.xmll>0values-sw6(}0dpid:AndroidMam4est.xml|icjauncher-web.pngproguard-project.txt®projperties值资源3.1Androidl程的文件系统结构3.1.1源程序丈件夹src由于飼功id以Java作为编程语言,因此程序文件以java作为扩展名。Java程序文件位于項目文件央的文件夹的某个包文件夹内。注室:W邑名习嗖二小写,而異名项字专日慢上大与。⑵arc丈伴突里可以建立苦千个包,司以分奚春冠如“程序文•件,3.1.2資讒丈件夹res>assets与gen在如droid工程中,有字符串、位图、布局等资源,可以将他们划分为三种类型的文件:XML文件、位图(图憬)文件和咬(声音)文件。在AndroidI程中,有两个用于存放资源文件的文件夹,分开伪龙£和assets。其中,res文件主内的资源文件晶终被打包到编译后的j"a文件中,res文件夹内不支持深度的子目录;assets中的资源文件不会被编译而是直接打包到应用中,踮渤$文件夹支持任意深度的子目录©而击。记工程中使用的资源文件都会在g血包名.Rjava中生成対应项,由系统自动为每个资源分配一个十六进制的整型数」用以标明毎个资源。
例如『Hello工程的Rj"2文件代码如下:packagecom.example.hell&jpublicfinalclassR{publicstaticfinalclassattr(}publicstaticfinalclassdimen(publicstaticfinalintflctlv*ity_/]Grlzc?ntaL_/r?C7rgin=0x7f04^000;publicstaticfinalintact■ivity_vertica£-_mwrgin=0z7f049091;publicstaticfinalclassdrawable(publicstaticfinalintic_Layncfier=0x7-F029009;publicstaticfinalintp/zx=0x7f020001;TOC\o"1-5"\h\zpubliestaticfinalintL/z>r2=0x7f020032; }publicstaticfinalclassid-[publicstaticfinalintaction_sett,ingrs=0x7f080002jpublicstaticfinalintbuttonl=0x7f080001;publicstaticfinalinttextVfet71=0x7f080000; }publicstaticfinalclasslayout{publicstaticfinalintactivity_main=0x7f030900;publicstaticfinalclassmenu[publicstaticfinalintmarin=&x7f07&0&0j }publicstaticfinalclassstring-(publicstaticfinalintaction^settingrs=&x7fQ500Qljpublicstaticfinalintapp_ncrme=0x7f9SQ000;publicstatiefinalinth^LLo_i/orLd=0x7-F05&002; }publicstaticfinalclassstyle(publicstaticfinalintAppBasee=9x7f060030;publicstaticfinalintAppTh&me=0x7f&6QQQl; }注意:(1)ES(1)ES内綺资源丈件可以渔W.R资源矣甘网.assets内釣贵源気件工貌号U)责源美丈件mUgg/R.*心是字浣自动生戒始,不需要手工修改勺3.1.3布局丈件夫res/layout工程的布局文件夫布局文件夫心坷。utJ"a存放扩展者为皿!的右局文件,每个布局文件对应一个Activin^3.1.4值文件夹res/values工程文件夹心values里的strmgs.xml是最重要的文件』通常有敞看布局文件中控件对象的属性值。3.1.5图片文件夫rs/d「aw5ible与音乐文件夫res/raw与Windows.应用程序一样,每个Android应用工程都有一个图标」相应在图标文件ic^launcher.png就存位在drawable文件夹里。如果工程使用音频资源文件,则需要存放在redraw文件夹里。移动平台及其应用移动平台及其应用【與】【與】3.1.6舗译文件夹bin使用Debug调试模式〔即使用RunAs方式)幵岌Android应用程序时>包含了生成应•用程序的安装包文件、安装到Android设备、在Android设备上运行等过程。在工程的bm文件夹里自动生成扩展名为即k的安装包文件.使用扩<jai-包丈件喪libs当使用第三方産文件时,需要将其脂「包复制到工程的libs文件夹里。做百度地图幵唆修见第L03节廂消息推送(参见第11.4节)需要使用笋三方提供的软件包。工程記豈请单丈件OidManifest.xml每个Android应用工程都包吉有一个名为AndroidManife?t.xinl的文件『它是XML格式的文件,包含了Andwid系统运行前必须掌握的相关信息』如应用程序名称、图标、应用程序的包名、组件注册信息、授权卷毋第49节)和运行设备的最;氐Android (严格地说?为AndroidAPI版本)等。移动平台及其应用移动平台及其应用3.2Android应用程序的基本组成Android应用程序是由组件组成的。组件可以调用•相互独立的功能模块.根据完成的功能,组件可划分为四类核心组件-即Activity、Senice>Broadcast和CDmaitPrgider。注意:〔1)在鋁柱上.Android应同侵用与停浣鍔CMTW.莎不可它.槌于蛆件的编程:⑵四大蛔件右陟ConterrtProvi加r拒仲外」暮是通MIrrbent討象•曇.沽信(详邑半4&节):(3)宥太蛆紳苦均鳶妥在工槎的清单文件土住离的摇还注蜀"3.2.1Activity组件Acti顽y是心击。记最重要的组件'员责用户界面的设计。Activity用户界面椎架采用MVC模式(ModelController).控制器负责接受并响应程序的外部动作?通过视图反愦应用程序给用户的信息(通常是屏幕信息反馈b模型是应用程序的核心,用于保存数据和代玛。注意:Android坦件在滑至史件出唉同标签《activ计v>:主奇°3.2.2Service组件Service是Android提供Service作为无用户界面、长时间后台运行组件。注意:Android坦件在清且文件中使用标签Service,注5?*3.2.3BroadcmstRg号ivsr组件在Amiioid系统中,当有特定事件发生时就会产生相应的广播。例如,幵机启动完成、短信到来、电池电量改变、网络状态改变等。为了通知手机用户有享件发生,在通常情况下丿通务口管理器NsifkatigManagE(洋如■第4.5节)会在手机的状态栏里产生一个具有提示音的通虬用户通过下滑手势可以查看其相关信息。mad5eceiiE即.广播接收•者用未接収未目系统或其他应用程序的广毒并做出回应,注気Android鉅・3在清单克祥士決阙切:遂"娉皿3打》任号:广掩摇收者5a件Br'OddC^StR^CCiv"〔详皿弟6.3节)与Service411件■—样.也:吏弯UI界面。3.2.4ContentProvider组件为了跨进程共享数据,Andmd提供ComemPE金接口,可以无需了解数据源、路径的情况下:对共享数据进行查询、添加、删除和更新等撓作。注意:⑴ContentPr^ider蛆伴在清単文件士價司标荟®r■如ider>住辑:⑵ContefttProvider齟件的注.礼捧邑务B圭,3-2.5意图对窓IntentAndroid提供轻量缀的进程间通讯机制Intent;使跨迸程组件通信和发送系统广播成列可能丿组件Activity、Service和BroadEsrRyiver都是通过消息机制被启动(激活〉?其使用的消息就封装在对象imtm里,启林止Artiiiilv*rvirrRroggtRwhcrCnnicatProviderImcai图启林止Artiiiilv*rvirrRroggtRwhcrCnnicatProviderImcai图32/Android件及通信机制注意:<DM或调冃蛔件韵消,&工走通當曲教摭:〈2)Irrte枇类的笑同』样见鶴48节黔3,2,6.Android应用程辱的运行入口—个Android应用程序通常由多个Activity组成广但只有一个王Activity^在工程清单文件中使用<activit户标签注册主Activity时;还需要内嵌<m£ent-iiltei>.0£1血1>和«0啞17>标签:以此说明该ActivityAndroid应用程序的入口。定义一个MainAcb^java为应用的主Acrivity的代码如下:〈acmuty巴MainANivity'「android:label=''@strmg/app_namen>晦虚q耳android:name=Randroidintent.action-X1AIN"/>vcategoryandroid;賜號尸尸android-inleiiLcategoryLAUNCHER?"<•intent-filter>其中>ptg_packname为程序'lainArtivityJava的包名。【返回】3.3Android虚拟机Dalvik尽管Android的编程语言是J"顼旦Android使用的虚拟机DalWk与Jg虚拟机JVM并不兼容。因为Dalvk是基于寄存器的架构『而八厲是基于栈的架私此外一D血蛍能松据価件实现更大的优化,更适合于移动设备,3.3.1J煎包虚拟机执行的是字节码文件■■•Java虚批机(简称JVM)包括一套字节码指令集、一蛆寄存器、一-个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。■■•Java语言是跨平台的,其跨平台的基石是字节码。字芋码按照Java虚拟机规范的格式组成了一Hass文件,JavaSE程序中的Java类会被编译成一个或者务个字节玛文件,然后打包到JAR文件。Java虚拟机从相应的-Hass文件和项ar文件中获取相应的字节码来运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。3.3.2Android虚拟机的特点Android应用虽然也是使用丁邪日语言进行编程,但是在蝙味成曲脂文件后,还会通过一个批处理程.序<dxbat)将应用所有的u嵌文件转换成一-•卜名为classesdex的文件。Android安装包文件的扩展君为.apk,—个工程只能打遂一个.apk文件。Android安装包文件包含了与某个Android应用工程相关的所有文件,包括工程的清单文件AadroidManifest.xml>应用程序代码(dasses.dex)、资源文件和其它文件打成一个压缩包。解压.型k文件后的文件(目量)如@3.3.1所示。KA.卜,iMETA-1NFIIE鞘res文件表QAndroidMarifest.xml-•dasses.dexIXML文样DEX文件|1.62KB _571KBresourcesarscARSC文件J2.14KB囹3.3.1解压APK安装包后的交件(目录)当用户謔-作己F发的如血id应用至手机内存(不是SD卡)后,在系统目录\dal血pp里可以找到该应用的安装包文件(*.apk)0在系貌目录也taMalviL<ache里可以找到对应的现文件,它是从cl瘀旦孰文件优化而来「或者说是从-晒中文件提眼岀来的可运行文件。运行用户开发的Android应用程序时「如果在系统目录血恆也1価里存散相应的囲題文件,Android虚拟机Dalvik虚拟机会直接从.odex文件中加载指令和数据后执行j否则,即没有odex的话,需要先从迎k包中提取classes.dcx并生成.odex文件,然后再加载并执行。因为直正在Android虚批机上运行的是_Mex文件,如果系统发现已经有了-odex文件了,那么就不会再从-apk包里面去解压、提取。显然,这神预先提取方式可以加快软件的启动速度,减少对RAM的占用。注奏:(1)Android拳浣丈件矣“Y汎師',卽9荏晟的是亲滩M服认蛭件,在忌另•叩k矣說邑丈伴和笠强加我核仔技wlex支件j如宴3一3-2饼示各«9> ■■笆注弭JIGJT,,e32W.中疽冲" STOHAGI-OCamera?p><iiHCW»«?WiivaMOm-r-r-■Camera.odexOl艄眸汕gooIJAU3rwrr-囹3-3.2系统自带的相机程序12-Android系沆史件央Lsygterfiltjin冏于荏技Linux京沅目咨始通件宁力包音理善AtsygtwAbinEpm总之,两种虚拟机执行的文件格式不同,Dalvik更适合于移动设备。【返回】
3.4使用AndroidTestCase做Android单元测试测试也是幵发过程中的一个重要组成部分,Android开发环境集成了一个测试框架,可以用来測试Android应用工程,包括单元測试^UI测试<[例3.4.11使用类andr成d.tGsLAHdioiiTT啓iCase来测试一个AndiQid应用工程中某个辅助类中方法的正确性。[设计步骤】<1)新建名为AndiWdTest的Android应用工程,在其对话框中均采用默认设置。<2)在sk文件夷里新建名为androidrom.example.uti1的包名,并在该包内建立一个名为的类文件。⑶在src下新建名为项immsr的包名/并在该包内建立一个名为TestCaiService且维承android.test.4^ndroidTestCas^的类文件TestCalSenice.java&此时』Android应用工程文件结构如图3-4.1所示。••Sa.«xampie.u%l*31CalSerwceJava•Addfintint):・•Addfintint):・£3juritte«t
a21T«-tCal$erv»cejjwa勲Android4.4RAAndroidPrivateLibrari”&A«®Kt•twn,四libs疗疗AndroidManifeitimlaicja<jncher-wet<png一f>rogward-proj«cttrt,lirojeetproperfies•Scom.eMAmple^ndrcfidtest:■Q]MainActrvitfjavjj涉gen[Gene/jtMiJavaKies)由cem.eH3triplereadteit®3.41AudroidTsst工程文件结胸(4)在淸单文件的勺皿11玲£|>节点内増加_条标签P用于指定Andro徂提供的测试机和设置被测试的Antoid应用工程的包名,其代玛如下:vinstrumeiiMonandroid:rL3tne=''androidee隨』ii5trLinifi摭aTionTestRuimandroid:targw?adogE=“comexample3ndroidt^5Tff/>在清里文件的<appli即。11>节点内增加一条标签,用于指定与Android测试机配套的崖」其代码如下:<uses-UbranrandrM±name^randroidtest.mnn.er,u/>J 1 •(5)编写被测试类CalSmiK.java,其代玛如下:packageandroid,com.exampIe.utiI:〃定义核测试类,它作为Android应用工程的一个辅助熒/丁测试本类的方法Add0的正确性public€lassCsIServic>eIgubl.icintAddtinta,intb){returna+b;//returna-b;〃喊时世用
(6)编写测试类MSe心苴代码如下:Q藤顏離android,com.junittest:〃AndwidT濒Case^Android提供的测试框架“是对JaE元删嵐g)的再封装测试类的官tAdd0方珠用于测试被测试委3淑v辰的Add。方法ifflPBjIandrok!com.example,util.CalService,占血portandroidJesLAndroidTe気Case;归类RubikclassTestCalServiceextendsAndroidleslCase(黑虫如voidytAdd。throwsException(CaiSeniceservicgE■•b<uW"—//新舌面resulE=senice.Add(33S):AndroidTestCise.assertEqualsf■•b<uW"—//新舌(7)右击工程包浏堂器里测试譚TesiCalSeivice中的BAdd0方法』选择“RunAlAndroidJUnitTestw:稍后出现測试结果,如图3A2所示。r■ 贏岂国■做k辱•Q,心,击缶,員ftPitkj^eExpIgrerJuWnrtH nD.令a°Wi晒隔.闾,W,Finished0,014^.ec^rdcRurn:1/1 0Error:0 0Failure«:0;6^"。』502.|«90412*567的由BCDE 一图342測试结果其中」绿条表示TestCaiSenice类的testAdd。方法里的断言正境因为3+5=8)c如果将被测试类CalSemce.java里的Add0方法里的“+"换成"・"丿贝1测试结果为红条'表示断言错误(因为3-5=2圭8)°注意:0)在清单*件中考加的代玛r可顷从新建的AndrotdTestPro]^工程〔木是通常建立的AndroidApplicaltcnP呼网的清单女仁M鱼制•,劑建一^Andisd如tP珂制测话工程的方法是:使用菜单"File1代沙-+卜珂gctf址曲TesrPfoiect",如图3.43所示•>:»砂IGmesalJ13Andr&d§Ar-idroielAf>plk«ionPfCjeffl召AndroidProjectfromExistingCod-e凿AndroidSample"ojeCjAndroidT«tProject]b©.C/C++♦aS3.4.3创建3.4.3创建AndroidTestProject(2) 再封装r用于观皿otd取工圍的法法。⑶按照软件工程的坦加本测试为黑宣测试方法(即功能测试)。(4)在计算机的Edip興环現中显示在Android设爸上运ti的结果r本质上^使S了Android的重要工具一—调试桥AD剧券见第2-2.3小节\【與】实殴3Android应用程序的结构与运行原理—、实验曰的1瓠Android应用工程的文件系统结构:2一初步掌握心由而应用程序的基本组成部分J3一Android虚拟机Dah-ik的特点和应用程序的运行过程,特别是用户幵发的闵血而应用程序的执行过程。二、实验内容及步骤1-錘Android应用工程的文件系釦构。(1)在Eclipse中打开上次实验创建的示例工程Hello;<2)查看应用的囹标文件ic_lmnchergg,它位于文件res'drawable;<3)查看広用的标签存放在文件res-'vaiues,'strings.xml里;(4) 打开存放在文件夹ENlayout里的布局文件(xml文件、查看与应用程序运行窗口对应的布局及其代码(设计与代码两种视圈)顶(5) 去掉主Activity里的方法gCrEteOpticmsX如iu0后,部署工程做运行测试可知:此时手机的“菜单”键失效。2.她拿握Android 如部分■Cl)在源程序MamActivityjava中使用sefTitleO方法动态地重设当前Activity的标题』然后部署工程并做运行测试;(2)在创建Activity的onCreate0方法内的i吾句^tContent\^ew(lLSayout.activitymainJ;v前増加一条语句"Teque
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年橡胶零件、附件合作协议书
- 2025年NOX、NO2自动采样器及测定仪合作协议书
- 安全生产责任制、制度、操作规程
- 安全生产三项制度(安全生产责任制、制度、操作规程)汇编
- 导游证基础考试模拟题(附参考答案)
- 电气自动化试题库(含参考答案)
- 服装厂生产车间管理规章制度及操作规程
- 2026年福建省泉州市社区工作者考试试题题库及答案
- 2025年山东(专升本)理化真题及答案
- 面瘫康复理疗师岗位招聘考试试卷及答案
- 2026年智能驾驶系统架构师面试题及答案解析
- 2026年苏州职业大学高职单招职业适应性测试参考题库带答案解析
- 电力安全教育
- 老年听力障碍患者护理
- 2025年单招护理类历年考试题目及答案
- 2025年广东中考化学试卷及答案
- 企业员工通勤车辆代驾服务协议
- 2025年中考数学二轮复习:二次函数最值问题 提分刷题练习题(含答案解析)
- 二年级上册口算题1000道打印版
- 环境设计实地调研法
- 活动策划 培训课件
评论
0/150
提交评论