Android开发实战教程_第1页
Android开发实战教程_第2页
Android开发实战教程_第3页
Android开发实战教程_第4页
Android开发实战教程_第5页
已阅读5页,还剩1035页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

Android是一款操作系统的名称,是科技界巨头谷歌(Google)公司推出的一款运行于手机和平板电脑等设备的智能操作系统。因为Android系统的底层内核是基于Linux开源系统架构的,所以它属于Linux家族产品。虽然Android外形比较简单,但是其功能十分强大。自2011年开始到现在,Android系统一直称霸全球智能手机操作系统市场。本章将简单介绍Android系统的诞生背景和发展历程,并带领大家搭建Android应用开发环境,开发第一个Android应用程序。智能手机具有像个人电脑那样强大的功能,拥有独立的操作系统,用户可以自行安装应用软件、游戏等第三方服务商提供的程序,并且可以通过移动通信网络接入到无线网络中。在Android系统诞生之前已经有很多优秀的智能手机产品,例如Symbian系列和微软的WindowsMobile系列等。对于初学者来说,可能还不知道怎样来区分智能手机。某大型专业统计站点曾经为智能手机的问题做过一项市场调查,总结了智能手机所必须具备的功能标准,下面是当时得票率最高的前五个选项:(1)操作系统必须支持新应用的安装;(2)高速度处理芯片;(3)支持播放式的手机电视;(4)大存储芯片和存储扩展能力;(5)支持GPS导航。1.1.1智能手机根据大众投票结果,手机联盟制定了一个标准。并根据这个标准为基础,总结出了如下智能手机的主要特点:具备普通手机的全部功能,例如可以进行正常的通话和发短信等;是一个开放性的操作系统,在系统平台上可以安装更多的应用程序,从而实现功能的无限扩充;具备上网功能;具备PDA的功能,实现个人信息管理、日程记事、任务安排、多媒体应用、浏览网页;可以根据个人需要扩展机器的功能;扩展性能强,并且可以支持很多第三方软件。1.1.1智能手机Symbian作为昔日智能手机的王者,在2005年至2010年曾一度独领风骚,街上多数人手里拿的都是诺基亚的Symbian手机,N70—N73—N78—N97,诺基亚N系列曾经被称为“N=无限大”的手机。对硬件的水平低、操作简单、省电、软件资源多是Symbian手机系统的重要特点。1.1.2主流系统的发展现状1)昨日皇者——Symbian(塞班)但程序的运行效率很高。比如5800的128M的RAM,后台可以同时运行十几个程序而操作流畅(多任务功能是特别强大的),即使几天不关机它的剩余内存也能保持稳定。在国内软件开发市场内,基本每一个软件都会有对应的塞班手机版本。而塞班开发之初的目标是要保证在较低资源的设备上能长时间稳定可靠地运行,这导致了塞班的应用程序开发有着较为陡峭的学习曲线,开发成本较高。1.1.2主流系统的发展现状在Android、iOS的围攻之下,诺基亚推出了Symbian^3系统,甚至依然为其更新(SymbianAnna,SymbianBelle),从外在的用户界面到内在的功能特性都有了显著提升,例如可自由定制的全新窗体部件、更多主屏、全新下拉式菜单等。但由于对新兴的社交网络和Web2.0内容支持欠佳,塞班占智能手机的市场份额日益萎缩。2010年末,其市场占有量已被Android超过。自2009年底开始,包括摩托罗拉、三星电子、LG、索尼爱立信等各大厂商纷纷宣布终止塞班平台的研发,转而投入Android领域。2011年初,诺基亚宣布与微软成立战略联盟,推出基于WindowsPhone的智能手机,从而在事实上放弃了经营多年的塞班,塞班退市已成定局。注意:2013年9月3日,微软公司宣布将以37.9亿欧元的价格收购诺基亚的设备和服务部门,同时还将以16.5亿欧元的价格收购诺基亚的相关技术专利,本次交易总额达到54.4亿欧元,其中有3.2万名员工将从诺基亚转入微软。从此之后,在移动设备系统江湖中再无塞班。安装有BlackBerry系统的黑莓机,指的不单单只是一台手机,而是由RIM公司所推出,包含服务器(邮件设定)、软件(操作接口)以及终端(手机)大类别的PushMail实时电子邮件服务。1.1.2主流系统的发展现状2)高端商务——BlackBerryOS(黑莓)BlackBerry系统,即黑莓系统,是加拿大ResearchInMotion(RIM)公司推出的一种无线手持邮件解决终端设备的操作系统,由RIM自主开发。它和其他手机终端使用的Symbian、WindowsMobile、iOS等操作系统有所不同,BlackBerry系统的加密性能更强、更安全。“黑莓”(BlackBerry)移动邮件设备基于双向寻呼技术。该设备与RIM公司的服务器相结合,依赖于特定的服务器软件和终端,兼容现有的无线数据链路,实现了遍及北美、随时随地收发电子邮件的梦想。1.1.2主流系统的发展现状这种装置并不以奇妙的图片和彩色屏幕夺人耳目,甚至不带发声器。“911”事件之后,由于BlackBerry及时传递了灾难现场的信息,而在美国掀起了拥有一部BlackBerry终端的热潮。1.1.2主流系统的发展现状黑莓赖以成功的最重要原则——针对高级白领和企业人士,提供企业移动办公的一体化解决方案。企业有大量的信息需要即时处理,出差在外时,也需要一个无线的可移动的办公设备。企业只要装一个移动网关,一个软件系统,用手机的平台实现无缝链接,无论何时何地,员工都可以用手机进行办公。它最大方便之处是提供了邮件的推送功能:即由邮件服务器主动将收到的邮件推送到用户的手持设备上,而不需要用户频繁地连接网络查看是否有新邮件。黑莓系统稳定性非常优秀,其独特定位也深得商务人士所青睐。可是也因此在大众市场上得不到优势,国内用户和应用资源也较少。注意:2013年9月24日消息,黑莓表示已经与由FairfaxFinancialHoldings主导的财团达成交易,准备以47亿美元出售,但是后来没有任何爆炸性消息发布。由此看来,黑莓也将逐步退出历史舞台。iOS的用户界面的概念基础上是能够使用多点触控直接操作。控制方法包括滑动、轻触开关及按键。与系统交互包括滑动(Swiping)、轻按(Tapping)、挤压(Pinching,通常用于缩小)及反向挤压(ReversePinchingorunpinching,通常用于放大)。1.1.2主流系统的发展现状3)高贵华丽——iOSiOS作为苹果移动设备iPhone和iPad的操作系统,在AppStore的推动之下,成为了世界上引领潮流的操作系统之一。原本这个系统名为“iPhoneOS”,直到2010年6月7日WWDC大会上宣布改名为“iOS”。此外通过其自带的加速器,可以令其旋转设备改变其y轴以令屏幕改变方向,这样的设计令iPhone更便于使用。最早iPhoneOS1.0内置于iPhone一代手机中,借助iPhone流畅地触摸屏幕,iPhoneOS给用户带来了极为优秀的使用体验,相比当时的手机可以用惊艳来形容。iPhoneOS2.0随iPhone3G发布,AppStore诞生。Appstore为第三方软件的提供者提供了方便而又高效的一个软件销售平台,在软件开发者与最终用户之间架起了一座沟通与销售的桥梁,从而极大地丰富了iPhone手机功能应用。iPhoneOS3.0iPhone3GS开始支持复制、粘贴。iOS4在iPhone4推出的时候,苹果决定将原来iPhoneOS系统重新定名为“iOS”,并发布新一代操作系统:“iOS4”。在这个版本里,开始正式支持了多任务功能,通过双击HOME键实现。iOS5加入了Siri语音操作助手功能,用户可与手机实现语言上的人机交互,该功能可以实现对用户的语音识别,完成一些较为复杂的操作,使用Siri来查询天气、进行导航、询问时间、设定闹钟、查询股票甚至发送短信,方便了用户的使用。1.1.2主流系统的发展现状iOS62012年6月,苹果公司在WWDC2012上宣布了iOS6,提供了超过200项新功能。iOS72013年6月10日,苹果公司在WWDC2013上发布了iOS7,几乎重绘了所有的系统APP,去掉了所有的仿实物化,整体设计风格转为扁平化设计。于2013年秋正式开放下载更新。iOS82014年6月3日(西八区时间2014年6月2日),苹果公司在WWDC2014上发布了iOS8,并提供了开发者预览版更新。1.1.2主流系统的发展现状优秀系统设计以及严格的AppStore,iOS作为应用数量最多的移动设备操作系统,加上强大的硬件支持以及内置的Siri语音助手,无疑使得用户体验得到更大的提升,感受科技带来的好处。从最初的iPhoneOS,演变至最新的iOS系统,iOS成为了苹果新的移动设备操作系统,横跨iPodTouch、iPad、iPhone,成为苹果最强大的操作系统。甚至新一代的MacOSXLion也借鉴了iOS系统的一些设计,可以说iOS是苹果的又一个成功的操作系统,能给用户带来极佳的使用体验。1.1.2主流系统的发展现状4)全新面貌——WindowsPhone早在2004年时,微软就开始以“Photon”的计划代号开始研发WindowsMobile的一个重要版本更新。直到2008年,在iOS和Android的巨大冲击之下,微软重新组织了WindowsMobile的小组,并继续开发一个新的行动操作系统。WindowsPhone,简称WP,是微软发布的一款手机操作系统,它将微软旗下的XboxLive游戏、XboxMusic音乐与独特的视频体验集成至手机中。微软公司于2010年10月11日晚上9点30分正式发布了智能手机操作系统WindowsPhone,并将其使用接口称为“Modern”接口。2011年2月,“诺基亚”与微软达成全球战略同盟并深度合作共同研发。2011年9月27日,微软发布WindowsPhone7.5。2012年6月21日,微软正式发布WindowsPhone8,采用和Windows8相同的WindowsNT内核。WindowsPhone具有桌面定制、图标拖曳、滑动控制等一系列前卫的操作体验。其主屏幕通过提供类似仪表盘的体验来显示新的电子邮件、短信、未接来电、日历约会等,让人们对重要信息保持时刻更新。WindowsPhone还包括一个增强的触摸屏界面,更方便手指操作;包括一个最新版本的IEMobile浏览器——该浏览器在一项由微软赞助的第三方调查研究中,和参与调研的其他浏览器和手机相比,可以执行指定任务的比例超过48%。很容易看出微软在用户操作体验上所做出的努力,而史蒂夫·鲍尔默也表示:“全新的Windows手机把网络、个人电脑和手机的优势集于一身,让人们可以随时随地享受到想要的体验”。1.1.2主流系统的发展现状5)全新面貌——WindowsPhoneAndroid一词最早出现于法国作家利尔亚当(AugusteVilliersdel’Isle-Adam)在1886年发表的科幻小说《未来夏娃》中,他将外表像人的机器起名为Android。根据最近一次权威部门的市场调查显示,即便在全球的手机市场份额中,运行Android系统的手机已占到42.68%,这是一个巨大的领先数字。1.2.1Android系统的诞生历程LOREMIPSUMDOLORSITAMET1989年,Andy到开曼群岛旅游,清晨独自在沙滩漫步时遇到一个人可怜地睡在躺椅上——他和女朋友吵架,被赶出了海边别墅。Andy给他找了住处。作为回报,这位老兄答应引荐Andy到自己所在的公司工作。原来,此人是正处在第一个全盛时期的苹果公司的著名工程师比尔·凯斯维尔。被业界所公认的Android之父是前Google工程部副总裁AndyRubin(安迪·罗宾)。AndyRubin1963年生于纽约州Chappaqua(查帕奎)镇,大学毕业后加入以光学仪器知名的卡尔·蔡司公司担任机器人工程师,主要从事数字通信网络。1.2.1Android系统的诞生历程不平凡的硅谷经历让AndyRubin在工程师主导的苹果公司可以说是如鱼得水,桌面系统Quadra和历史上第一个软Modem都是他的作品。“Rubin是那种只要能手中拿着焊枪、写着软件编辑程序就非常满足的人。”苹果公司工程师,Rubin前同事史蒂芬这样形容他。在苹果的这段日子,他经常以办公室为家。Rubin笑称,那是他最邋遢的一段日子。有时他也不忘展示一下自己的Geek本色:对公司的内部电话系统进行了重新编程,伪装CEO打电话给人事,指示要给自己组里的工程师同事股票奖励。当然,信息部门免不了来找他的麻烦。1990年,苹果的手持设备部门独立出来,成立了General

Magic公司。两年后,Andy认定这个领域一定大有作为,选择加入。在这里,他完全融入到公司全身心投入的工程师文化中。他和同事们在自己的小隔间上方搭起了床,几乎24小时吃住在办公室。他们开发的产品是具有突破性意义的基于互联网的手机操作系统和界面MagicCap,在市场上也曾经取得短暂的成功,1995年公司甚至因此上市,而且第一天股票实现了翻番。但是好景不长,这款产品太超前了,运营商的支持完全跟不上,很快被市场判了死刑。1.2.1Android系统的诞生历程1.2.1Android系统的诞生历程此后,AndyRubin又加入了苹果公司员工创办的ArtemisResearch,继续吃住在办公室,追逐互联网设备的梦想。这次,他参与开发的产品是交互式互联网电视WebTV,创造了多项通信专利。产品获得了几十万用户,成功实现盈利,年收入超过一亿美元。1997年,公司被微软收购。Rubin也随之加入,雄心勃勃地开始了他的超级机器人项目。他开发的互联网机器人在微软四处游荡,随时记录所看所闻。不料,有一天控制机器人的计算机被黑客入侵,激怒了微软的安全官员。不久,Andy离开微软,在PaloAlto租了一个商店,与他的工程师朋友们继续把玩各种机器人和新设备,构思各种新产品的奇思妙想。这就是Danger的前身。1.2.1Android系统的诞生历程创办Danger并担任CEO的过程中,Andy完成了从工程师到管理者的转变。更为重要的是,他和同事一起找到了将移动运营商和手机制造商利益结合起来的模式,这与iPhone非常类似。但是,公司的运营并不理想,Andy接受董事会的决定辞职,并有些失望地离开了公司。Danger后来被微软收购,2010年这个部门发布了很酷但是很快失败的产品Kin系列手机。2002年初,还在Danger期间,AndyRubin曾在斯坦福大学的工程课上做了一次讲座,听众中出现了Google的两位创始人LarryPage(拉里·佩奇)和SergeyBrin。离开Danger后,Andy曾再次隐居开曼群岛,想开发一款数码相机,但是没有找到支持者。他很快回到熟悉的领域,创办Android,开始启动下一代智能手机的开发。这次的宗旨,是设计一款对所有软件开发者开放的移动平台。2005年,Andy靠自己的积蓄和朋友的支持,艰难地完成了这一项目。在与一家风投洽谈的同时,Andy突然想到了LarryPage,于是给后者发了一封邮件。仅仅几周时间,Google就完成了对Android的收购。开启了一段Android传奇的书写。1.2.1Android系统的诞生历程2007年11月5日,Google正式对外宣布Android开源手机操作系统平台,此平台基于Linux,由操作系统、中间件、用户界面和应用软件组成。同时Google与另外33家手机制造商(包含摩托罗拉、宏达电、三星、LG)、手机芯片供货商、软硬件供货商、电信运营商(包括中国移动)联合组成OpenHandsetAlliance(开放手机联盟),这一联盟将会支持Google可能发布的手机操作系统或者应用软件,共同开发Android的开放源代码的移动系统。2014年10月15日(美国太平洋时间),Google公司发布的全新Android操作系统:Android5.0。北京时间2014年6月26日0时,GoogleI/O2014开发者大会在旧金山正式召开,发布了Android5.0的前身L(Lollipop)版Android开发者预览版本。1.2.2Android系统的发展现状从2008年HTC和Google联手推出第一台Android手机G1开始,在2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。下面的几条数据能够充分说明Android系统的霸主地位。12011年11月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为58%。2014年8月15日消息,根据IDC发布的2014年第二季度智能手机市场的最新数据显示,苹果iOS和谷歌Android两大系统平台继续领跑。Android阵营增长则更惊人,达到了33.3%,出货量达到了2.553亿台。Android系统的市场份额得到了提高,从2013第二季度的79.6%增长到了2014第二季度的84.7%。具体信息如图所示。1.2.2Android系统的发展现状可惜Android版本数量较多,市面上同时存在着各种版本的Android系统手机,应用软件对各版本系统的兼容性对程序开发人员是一项不小的挑战。同时由于开发门槛低,导致应用数量虽然很多,但是应用质量参差不齐,甚至出现不少恶意软件,导致一些用户受到损失。同时Android没有对各厂商在硬件上进行限制,导致一些用户在低端机型上体验不佳。另一方面,因为Android的应用主要使用Java语言开发,其运行效率和硬件消耗一直是其他手机用户所诟病的地方。如果从某一个时间段进行统计,Android系统也是雄踞市场占有率第一的位置。据著名互联网流量监测机构NetApplications发布的最新数据显示,从2013年9月到2014年7月,在这将近一年的时间里,Android市场占有率一直处于稳步攀升状态,从最初的29.42%狂飙至44.62%,而iOS的使用量却在一路下滑,从2014年9月份的53.68%降至44.19%。由上述统计数据可见,Android系统的市场占有率位居第一,并且毫无压力。Android机型数量庞大,简单易用,相当自由的系统能让厂商和客户轻松地定制各样的ROM,定制各种桌面部件和主题风格。简单而华丽的界面得到广大客户的认可,对手机进行刷机也是不少Android用户所津津乐道的事情。21.2.3常见的Android设备Android智能电视:顾名思义是搭载了安卓操作系统的电视,使得电视智能化,能让电视机实现网页浏览、视频电影观看、聊天办公游戏等,具只有与平板电脑和智能手机一样的功能。其凭借安卓系统让电视实现智能化的提升,数十万款安卓市场的应用、游戏等内容随意安装。例如海尔的MOOKA模卡U42H7030便是一款搭载Android4.2系统的智能电视,如图所示。因为Android系统的免费和开源,也因为系统本身强大的功能性,使得Android系统不仅用于手机设备上,而且也广泛用于其他智能设备中。在接下来的内容中,将简要介绍除了手机产品之外,常见的搭载Android系统的智能设备。Android机顶盒:是指像智能手机一样,具有全开放式平台,搭载了安卓操作系统,可以由用户自行安装和卸载软件、游戏等第三方服务商提供的程序,通过此类程序来不断对电视的功能进行扩充,并可以通过网线、无线网络来实现上网冲浪的的新一代机顶盒总称。Android机顶盒不仅仅是一个高清播放器,更具有一种全新的人机交互模式,即区别于电脑、又有别于触摸屏,通过使用Android机顶盒,可以让电视具有上网、看网络视频、玩游戏、看电子书、听音乐等功能。Android机顶盒配备红外感应条,遥控器一般采用空中飞鼠,这样就可以方便地实现触摸屏上的各种单点操作,可以方便地在电视上玩愤怒的小鸟、植物大战僵尸等经典游戏。乐视公司的LeTV机顶盒便是基于Android打造的,如图所示。1.2.3常见的Android设备智能手表:智能手表是将手表内置智能化系统、搭载智能手机系统,连接于网络可实现多功能,如同步手机中的电话、短信、邮件、照片、音乐等。LG公司采用谷歌Android

Wear操作系统开发了一款名为GWatch的智能手表,该产品于2014年第二季度发布,如图所示。1.2.3常见的Android设备游戏机:Android游戏机就像Android智能手表一样,在2013年出现了爆炸式增长。在CES展会上,NVIDIA的ProjectShield掌上游戏主机以绝对震撼的姿态亮相,之后又有Ouya和Gamestick相继推出。不久前,MadCatz也发布了一款Andriod游戏机。1.2.3常见的Android设备智能家居:智能家居是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。智能家居是在互联网影响之下的物联化体现。乐得威公司的GW-9311智能主机产品便是一款Android智能家居产品,如图所示。1.2.3常见的Android设备1.2.4Android系统的优势为什么安卓能在这么多的智能系统中脱颖而出,成为市场占有率第一的手机系统呢?要想分析其原因,需要先了解它的巨大优势,分析究竟是哪些优点吸引了厂商和消费者的青睐。开源这是Android能够快速成长的最关键因素。在Android之前,没有任何一个智能操作系统的开源程度能够像Android一样。Android的开源,打破以往操作系统平台的授权模式,不但降低了厂商的成本也赋予了他们更多自由发挥的空间,更提升了他们支持Android的热情,这是Android平台能够快速成熟、快速成长的源泉。联盟联盟战略是Android能够攻城拔寨的另一大法宝。谷歌为Android成立的开放手机联盟(OHA)不但有摩托罗拉、三星、HTC、索尼爱立信等众多大牌手机厂商拥护,还受到了手机芯片厂商和移动运营商的支持,仅创始成员就达到34家。开源、联盟,Android凝聚了几乎遍布全球的力量,这是Android形象及声音能够被传到全球移动互联网市场每一个角落的根本原因。技术Android系统的底层操作系统是Linux,Linux作为一款免费、易得、可以任意修改源代码的操作系统,吸收了全球无数程序员的精华。另外,Linux作为一种嵌入式操作系统,使得Android能够很方便地被应用、移植到各种平台并快速发展。同时,Android平台较快的版本更新速度使得手机硬件性能不断向最优方向发展,也使Android可玩、好玩、容易玩的特征越来越显著。1.3.1案例说明注意:Android开发包括底层开发和应用开发,底层开发大多数是指和硬件相关的开发,并且是基于Linux环境的,例如开发驱动程序。应用开发是指开发能在Android系统上运行的程序,例如游戏、地图等。

因为了解到读者使用的最主流系统是Windows,所以本书只介绍在Windows下搭建Android应用开发环境的具体过程。“工欲善其事,必先利其器”出自《论语》,意思是要想高效地完成一件事,需要有一个合适的工具。对于安卓开发人员来说,开发工具同样至关重要。作为一项新兴技术,在进行开发前首先要搭建一个对应的开发环境。而在搭建开发环境前,需要了解安装开发工具所需要的硬件和软件配置条件。在本案例中,将详细讲解搭建Android应用开发环境的具体过程。1.3.2系统要求注意:在Android官方公布的最新版本ADTBundle中,已经将Eclipse、AndroidSDK和ADT进行了集成,一次下载即可同时获得这三个工具。Eclipse是进行Android应用开发的一个集成工具,而AndroidSDK是开发Android应用程序所必须具备的框架。Android为Eclipse定制了一个专用插件AndroidDevelopmentTools(ADT),此插件为用户提供了一个强大的开发Android应用程序的综合环境。ADT扩展了Eclipse的功能,可以让用户快速地建立Android项目,创建应用程序界面。在搭建之前,一定先确定基于Android应用软件所需要开发环境的要求。AndroidSDK对操作系统的最低要求为WindowsXP或VistaMacOSX10.4.8+LinuxUbuntuDrapper。安卓开发所需要的开发工具如下:JDK:可以到/technetwork/java/javase/downloads/index.html下载。ADTBundle:可以到网址下载。1.3.3具体实现1.安装JDKJDK(JavaDevelopmentKit)是整个Java的核心,包括了Java运行环境、Java工具和Java基础的类库。JDK是学好Java的第一步,是开发和运行Java环境的基础,当用户要对Java程序进行编译的时候,必须先获得对应操作系统的JDK,否则将无法编译Java程序。获得JDK的操作流程如下:登录/technetwork/java/javase/downloads/index.html,Oracle官网,如图所示,可以看到JDK有很多版本。步骤1在此选择最常用的版本Java7,下载页面如图所示。步骤21.3.3具体实现单击图中JDK下方的【Download】按钮,在弹出的新界面中选择将要下载的JDK,笔者在此选择的是WindowsX86版本,如图所示。步骤31.3.3具体实现下载完成后,双击“.exe”文件开始进行安装,弹出如图所示的“安装向导”对话框,单击【下一步】按钮。步骤41.3.3具体实现弹出“安装路径”对话框,单击【更改】按钮可以自定义设置安装路径,如图所示。步骤51.3.3具体实现在此设置安装路径是“E:\jdk1.7.0_01\”,然后单击【下一步】按钮开始在安装路径解压缩下载的文件,如图所示。步骤61.3.3具体实现1.3.3具体实现完成后弹出“目标文件夹”对话框,在此选择要安装的位置,如图所示。步骤7单击【下一步】按钮后开始正式安装,如图所示。步骤81.3.3具体实现1.3.3具体实现安装完成后会弹出“完成”对话框,单击【完成】按钮即完成整个安装过程,如图所示。步骤91.3.3具体实现LOREMIPSUMDOLORSITAMET注意:完成安装后可以检测是否安装成功,方法是依次单击【开始】︱【运行】,在运行框中输入“cmd”并按下回车键,在打开的CMD窗口中输入java-version,如果显示如图1-15所示的提示信息,则说明安装成功。1.3.3具体实现如果检测结果显示没有安装成功,需要将其目录的绝对路径添加到系统的PATH中,具体做法如下:AB右键单击【我的电脑】,依次单击【属性】→【高级系统设置】选项,将弹出如图所示的“系统属性”对话框。单击“系统属性”对话框最下面的“环境变量”按钮,在弹出的“环境变量”窗口“系统变量”处选择“新建”按钮,如图所示。1.3.3具体实现CD如图所示,在变量名处输入JAVA_HOME,变量值中输入刚才的安装目录,例如设置为“C:\ProgramFiles\Java\jdk1.7.0_22”。如图所示,再次新建一个变量名为classpath,其变量值如下所示。.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar1.3.3具体实现CD找到path的变量,双击或单击“编辑”按钮,在变量值最前面添加如下值:%JAVA_HOME%/bin;按照图所示的方法再次验证,如果可以看到相应版本信息,则说明安装成功。2.下载ADTBundle1.3.3具体实现登录Android的官方网站/index.html,如图所示。步骤11.3.3具体实现单击中部的“GettheSDK”链接,如图所示。步骤21.3.3具体实现在弹出的新页面中单击“DownloadtheSDK”按钮,如图所示。步骤31.3.3具体实现在弹出的“GettheAndroidSDK”界面中勾选“Ihavereadandagreewiththeabovetermsandconditions”前面的复选框,然后在下面的单选按钮中选择系统的位数。例如笔者的机器是32位的,所以勾选“32-bit”前面的单选按钮,如图所示。步骤41.3.3具体实现步骤5单击步骤4中的

按钮后开始下载工作,下载的目标文件是一个压缩包,如图所示。1.3.3具体实现将下载得到的压缩包进行解压,解压后的目录结构如图上图所示。由此可见,Android官方已经将Eclipse和AndroidSDK实现了集成。双击“eclipse”目录中的“eclipse.exe”可以打开Eclipse,界面效果如图下图所示。步骤61.4.1案例说明AVD全称为Android虚拟设备(AndroidVirtualDevice),每个AVD模拟了一套虚拟设备来运行Android平台,这个平台至少要有自己的内核、系统图像和数据分区,还可以有自己的SD卡和用户数据以及外观显示等。AndroidSDK中包含的模拟器的功能非常齐全,电话本、通话等功能都可使用;其内置的浏览器和Maps都可以联网;用户可以使用键盘输入,鼠标点击模拟器按键输入,甚至还可以使用鼠标点击、拖动屏幕进行操纵。程序开发需要调试,只有经过调试之后才能知道程序是否能正确运行。作为一款手机系统,我们怎样才能在电脑平台之上调试Android程序呢?不用担心,谷歌为我们提供了模拟器来解决这个问题。所谓模拟器,就是指在电脑上模拟安卓系统,开发人员不需要使用真实的Android手机,通过电脑就可以调试开发Android程序。无论在Windows还是Linux下,Android模拟器都可以顺利运行。官方提供了Eclipse插件AndroidSDK,将模拟器集成到Eclipse的IDE环境。当然Android模拟器不能完全替代真机,具体来说有以下几点差异:1.4.1案例说明模拟器不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼入和呼出;模拟器不支持USB连接;模拟器不支持相机/视频捕捉;模拟器不支持音频输入(捕捉),但支持输出(重放);模拟器不支持扩展耳机;模拟器不能确定连接状态;模拟器不能确定电池电量水平和交流充电状态;模拟器不能确定SD卡的插入/弹出;模拟器不支持蓝牙。1.4.2具体实现步骤1单击Eclipse菜单中的图标

,如图所示。1.4.2具体实现步骤2在弹出的“AndroidAVDDeviceManager”界面的左侧导航中选择“AndroidVirtualDevice”选项卡,如图所示。在图中列表中会列出了当前已经存在的AVD,还可以通过右侧的按钮来创建、删除或修改AVD。主要按钮的具体功能如下::创建一个新的AVD。:修改已经存在的AVD。:删除已经存在的AVD。:启动一个AVD模拟器。1.4.2具体实现步骤3单击图右侧的

按钮,在弹出的界面中创建一个新AVD,如图所示。创建AVD时,建议使用Intel处理器的读者在“CPU/ABI”选项中选择“IntelAtom(X86)”或“IntelAtom(X86_64)”。“IntelAtom(X86)”是因特尔公司为电脑用户运行AVD模拟器而开发的,在安装Intel处理器的电脑中选择这个选项,可以让Android模拟器运行地更快。LOREMIPSUMDOLORSITAMET注意:另外,我们还可以使用CMD命令创建AVD,创建命令如下:androidcreateavd--name<your_avd_name>--target<targetID>其中“your_avd_name”是需要创建的AVD的名字。创建语句在CMD窗口界面中的执行效果如图所示。1.4.2具体实现在调试Android程序的时候我们需要启动AVD模拟器,启动AVD模拟器的基本步骤如下:AB单击【Launch】按钮后将会运行该模拟器,界面效果如图所示。1.4.2具体实现参照步骤2图所示,选择列表中已经存在的AVD,单击

按钮后,将弹出“LaunchOption”界面,如图所示。1.5.1具体实现下面我们开始第一个Android应用程序的编写,程序的功能是在手机屏幕中显示问候语“你好我的朋友!”。Android应用程序的编写设计流程如图所示:1.5.2具体实现1.使用Eclipse新建Android工程步骤1打开Eclipse,依次单击【File】︱【New】︱【Project】命令,将弹出如图所示对话框。选择【Android】︱【AndroidApplicationProject】选项,单击【Next】按钮。步骤2如图所示,在弹出的“NewAndroidProject”对话框中,输入项目名称和包名,并选择相应的Android版本和主题。1.5.2具体实现LOREMIPSUMDOLORSITAMET注意:

“NewAndroidProject”对话框中,各表单的含义如下:ApplicationName:应用程序显示给用户的名称。例如“MyFirstApp”。ProjectName:项目目录,在Eclipse中可见的名称。PackageName:应用程序包的命名空间(遵循Java中相同的规则)。包的名称必须是唯一的,建议使用与组织的反向域名开头的名称。例如“com.example.myfirstapp”。MinimumRequiredSDK:应用程序支持的AndroidSDK的最低版本。为了支持尽可能多的设备,应该设置可以为应用程序提供其核心功能集的最低版本。TargetSDK:代表你已经测试过的最高的版本,随着新版本的Android,你应该在新版本中测试应用程序并更新,以符合最新的API并利用新的平台功能。CompileWith:表示在编译时的应用程序的平台版本。默认情况下,设置为最新版本SDK。Theme:指定适用于该应用程序的AndroidUI风格。1.5.2具体实现1.5.2具体实现步骤3单击【Next】按钮,在如图所示对话框中,设置是否创建程序图标和Activity。1.5.2具体实现步骤4单击【Next】按钮,在如图所示对话框中,可以对Android程序的图标进行相关设置。1.5.2具体实现步骤5单击【Next】按钮,在如图所示对话框中,设置要生成的Activity的模板。1.5.2具体实现步骤6单击【Next】按钮,在如图所示对话框中,设置Activity的相关信息,包括Activity的名称、布局文件名称、导航类型等。1.5.2具体实现步骤7一个典型Android应用项目的目录结构如图所示。【Android4.4】这个目录是用来存放Android自身的所有jar包文件。建立不同版本的可能会有不同的依赖。作为一个Java项目通常情况下都会引入要用到的工具类,也就是Jar包,在Android开发中,绝大部分开发用的工具包都被封装到一个名叫Android.jar的文件里。如果我们在Eclipse中展开来看,可以看到j2SE中的包,apache项目中的包,还有Android自身的包文件。下面介绍一下Android应用程序组成文件的具体信息,这对于后边的学习有重要的指导作用。Android1.5.2具体实现1.5.2具体实现在这里我们简单介绍一下Android的包文件:android.app:提供高层的程序模型、提供基本的运行环境;android.content:包含各种对设备上的数据进行访问和发布的类;android.database:通过内容提供者浏览和操作数据库;android.graphics:底层的图形库,包含画布、颜色过滤、点、矩形,可将它们直接绘制到屏幕上;android.location:定位和相关服务的类;android.media:提供一些类管理多种音频、视频的媒体接口;:提供帮助网络访问的类,超过通常的.*接口;android.os:提供了系统服务、消息传输、IPC机制;android.opengl:提供OpenGL的工具;vider:提供类访问Android的内容提供者;android.telephony:提供与拨打电话相关的API交互;android.view:提供基础的用户界面接口框架;android.util:涉及工具性的方法,例如时间日期的操作;android.webkit:默认浏览器操作接口;android.widget:包含各种UI元素(大部分是可见的)在应用程序的屏幕中使用。【src】用来存放Android应用程序中所有java源代码,自动地组织在用户定义声明的包内。例如这个目录下的子目录(包):com.example.first,是我们新建项目时候自定义的包名,其下是我们创建的源文件:MainActivity.java源文件。【gen】该目录下的文件是由ADT自动生成的,即包内的R.java文件。该文件为项目中的各个资源在该类中创建其唯一的ID。从R文件中可以看到每一个资源都会有一个整数和它相对应。1.5.2具体实现【assets】同res目录一样用来存放资源的,但区别是此目录用来存放应用中使用到的类似于视频文件、MP3等媒体文件。【bin】该目录用于存放生成的目标文件,例如Java的二进制文件、资源打包文件(.ap_后缀)、Dalvik虚拟机的可执行性文件(.dex后缀),打包好应用文件(.apk后缀)等。【libs】该目录用于存放需要使用的第三方jar包文件。【res】该目录存放的是整个项目的经常使用的资源文件,新建一个项目,在该目录中自动建立以下子目录:1.5.2具体实现drawable开头的四个目录:分别以三种尺寸存放png、9.png、jpg等图片资源。不同的分辨率照片适应不同的屏幕和运行环境。layout:存放应用程序的布局文件,文件类型为XML格式。新建项目时都有main.xml文件。values:存放所有XML格式的资源描述文件,例如字符串(strings.xml)、颜色(colors.xml)、样式(styles.xml)、尺寸(dimens.xml)和数组(arrays.xml)等。【AndroidManifest.xml】该文件是每个Android项目必须的系统控制文件。它向Android操作系统描述了本程序所包括的组件、所实现的功能、能处理的数据、要请求的资源等。【proguard-project.txt】该文件是混淆代码的脚本配置文件。【perties】该文件存储当前应用所使用的android配置信息。1.5.2具体实现2.编写代码1.5.2具体实现packagefirst.a;importandroid.app.Activity;importandroid.os.Bundle;publicclassfistMMextendsActivity{/*Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);}}现在已经创建了一个名为“first”的工程文件,现在打开first.java文件,会显示自动生成的如下代码。1.5.2具体实现packagefirst.a;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassfistMMextendsActivity{/*Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);TextViewtv=newTextView(this);tv.setText("你好我的朋友!");setContentView(tv);} }如果此时运行程序,将不会显示任何东西。此时我们对上述代码稍微进行修改,让程序输出“你好我的朋友!”。具体代码如下:3.调试程序1.5.2具体实现Android调试一般分为三个步骤,分别是设置断点、Debug调试和断点调试。A设置断点双击对应代码行左边的灰色区域,即可设置断点,如左图所示。同时,为了调试方便,可以设置显示代码的行数。只需在代码左侧的空白部分单击鼠标右键,如右图所示,在弹出的命令中选择【ShowLineNumbers】选项即可,效果如左图所示。BDebug调试DebugAndroid调试项目的方法与普通DebugJava调试项目的方法类似,唯一不同是在选择调试项目时选择【AndroidApplication】命令。具体方法是右键单击项目名,在弹出命令中依次选择【DebugAs】|【AndroidApplication】命令,如图所示。1.5.2具体实现C断点调试程序运行到设置断点地方时就会停下,这时可以按照下面的功能键按需求进行调试:快捷键【F8】直接执行程序,直到下一个断点处停止。快捷键【F5】单步执行程序,遇到方法时进入。快捷键【F6】单步执行程序,遇到方法时跳过。快捷键【F7】单步执行程序,从当前方法跳出。调试方法与调试普通Java程序类似,调试界面如图所示。1.5.2具体实现Logcat是AndroidSDK中的一个通用日志工具。在程序的运行过程中可以通过Logcat打印状态和错误信息等。它另外一个重要的用途是在程序启动和初始化的过程中向开发者报告进展状况。Console/Tasks视图位于布局的左下角,其中Console(命令行)视图最常用,在程序调试过程中许多重要的信息都显示在Console视图中。Debug标签页用来显示程序执行过程中的调用栈。在Debug标签页的工具栏上有一些功能按钮,提供了继续、暂停、终止、单步执行、逐过程执行和返回等功能。Variables标签页中可以显示出当前代码作用域内的所有变量值;

Breakpoints标签页中列出了程序中所有的断点。Outline视图可以显示出当前项目的结构图。Console/Tasks视图位于布局的左下角,其中Console(命令行)视图最常用,在程序调试过程中许多重要的信息都显示在Console视图中。1.5.2具体实现D运行项目1.5.2具体实现(1)右键单击项目名,在弹出命令中依次选择【RunAs】|【AndroidApplication】命令,如左图所示。(2)此时工程开始运行,运行完成后在屏幕中输出“你好我的朋友!”这段文字。如右图所示。1.5.3在Eclipse中导入一个既有Android项目经过前面实例的讲解,一个基本的Android应用项目的开发流程介绍完毕,但是如何打开刚刚实现的实例源码呢?本书提供的资料包中保存了书中所有实例的项目文件,如何查看与使用它们呢?接下来以刚刚创建的“first”为例,介绍导入一个既有Android项目的具体流程。步骤1打开Eclipse,依次单击【File】|【Import】命令,如图所示。步骤2在弹出的“Import”界面中选择“Android”选项下面的“ExistingProjectintoWorkspace”子选项,然后单击【Next】按钮,如图所示。1.5.3在Eclipse中导入一个既有Android项目步骤3在弹出的“ImportProject”界面中单击“Browse”按钮,在弹出界面中选择要到工程文件的目录,如图所示,最后单击【Finish】按钮即可。1.5.3在Eclipse中导入一个既有Android项目在正式进行Android应用程序的开发工作之前,需要先了解Android生态系统的整体框架结构。Android系统架构Chapter

2Android系统是一个移动设备的开发平台,其生态系统的架构十分清晰,如图所示,自下而上分为四层,即:(1)Linux内核层;(2)各种库(Libraries)和Android运行时(RunTime);(3)应用程序框架(ApplicationFramework);(4)应用程序(Application)。2.1.1Android的Linux内核层——C/C++实现Android系统的Linux内核层,实现了与移动设备相关的驱动程序,主要包含如下所示的驱动系统:Android系统的底层内核基于Linux操作系统。Android系统其实就是Linux系统,只是Android系统充分利用了已有的机制,尽量使用标准化的内容,并且做出必要的扩展。显示驱动(DisplayDriver):常用基于Linux的帧缓冲(FrameBuffer)驱动;摄像头驱动(CameraDriver):常用基于Linux的V4L2(videoforLinux)驱动;闪存驱动(FlashMemoryDriver):是基于MTD的Flash驱动程序;BinderIPC驱动:Android中一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能;键盘驱动(KeyBoardDriver):作为输入设备的键盘驱动;WiFi驱动(CameraDriver):基于IEEE802.11标准的驱动程序;音频驱动(AudioDriver):常用基于ALSA(AdvancedLinuxSoundArchitecture,高级Linux声音体系)驱动;能源管理(PowerManagement):管理电池电量等信息。2.1.2各种库(Libraries)和Android运行时(RunTime)——中间层Android系统中间层次的内容大多是使用C和C++实现的,可以分为两个部分:库和Android运行环境。其中包含如下所示的各种库:界面管理器(SurfaceManagement):提供了对管理显示子系统等功能;媒体框架(MediaFrameword):它是Android多媒体的核心部分,基于PacketVideo(PV)的OpenCORE,从功能上本库一共分为两大部分:一部分是音频、视频的回放(PlayBack),另一部分是音视频的记录(Recorder);SQLite:一个通用的嵌入式数据库;OpenGLES:提供了对3D图像的支持;FreeType:位图和矢量字体的功能;WebKit:网络浏览器的核心;SGL:2D图像引擎;SSL:即SecureSocketLayer位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持;libc:C语言的标准库,也是系统中一个最为底层的库,C库通过Linux的系统调用来实现。2.1.2各种库(Libraries)和Android运行时(RunTime)——中间层在以前的版本中,Android运行环境主要是指Android虚拟机技术:Dalvik。Dalvik虚拟机与Java虚拟机(JavaVM)不同,它执行的不是Java标准的字节码(Bytecode),而是Dalvik可执行格式(.dex)的执行文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。在Android系统中,各种库一般以系统中间件的形式提供,它们均有一个显著特点:与移动设备平台的应用密切相关。两者最大的区别在于JavaVM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。从Android4.4开始,默认的运行环境是ART,ART的机制与Dalvik不同。在Dalvik机制下,应用程序每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率。而在ART环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,这个过程叫做预编译(Ahead-Of-Time,AOT)。这样的话,应用的启动和执行都会变得更加快速。2.1.2各种库(Libraries)和Android运行时(RunTime)——中间层该层是Android应用开发的基础,开发人员大部分情况是在和它打交道。应用程序框架层主要包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器和通知管理器几部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。本层为应用程序层的开发者提供APIs,实际上是一些应用程序的框架。由于上层的应用程序是以Java构建的,因此本层次还提供了UI程序中所需要的各种控件,例如:Views(视图组件)、List(列表)、Grid(栅格)、TextBox(文本框)、Button(按钮)等。2.1.3应用程序框架层(ApplicationFramework)2.1.3应用程序框架层(ApplicationFramework)Activity(活动)BroadcastIntentReceiver(广播意图接收者)ContentProvider(内容提供者)Service(服务)IntentandIntentFilter(意图和意图过滤器)一个基本的Android应用程序,可以利用应用程序框架中的以下五个部分来构建。2.1.3应用程序层(Application)——Java实现该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言和应用程序框架层的API设计和编写属于自己的应用程序,这些程序将与系统提供的那些核心应用程序彼此平等、友好共处。2.2.1案例说明在当前,几乎每个手机中都具备黑名单功能,被列入黑名单的用户不能打进电话和发进短信。在本实例中添加了一个EditText,在里面可以输入黑名单用户的电话号码。当此号码来电时,系统会自动将其设置为静音模式。当对方挂机后,系统将自动设置为正常模式,并使用Toast提示用户。在具体实现上,通过setRingerMode来改变铃声模式。在Android系统中存在如下三种模式。

正常模式:RINGER_MODE_NORMAL;

静音模式:RINGER_MODE_SILENT;

振动模式:RINGER_MODE_VIBRATE。Android2.2.2具体实现publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);setContentView(R.layout.main);

/*设置PhoneCallListener*/mPhoneCallListenerphoneListener=newmPhoneCallListener();/*用TelephonyManager抓取TelephonySeverice*/TelephonyManagertelMgr=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);/*设置ListenCall*/telMgr.listen(phoneListener,mPhoneCallListener.LISTEN_CALL_STATE);/*获取TextView和EditText的数据信息*/mTextView01=(TextView)findViewById(R.id.myTextView1);mTextView03=(TextView)findViewById(R.id.myTextView3);mEditText1=(EditText)findViewById(R.id.myEditText1);

}(1)设置PhoneCallListener对象phoneListener,使用TelephonyManager获取TelephonySeverice值,然后查找TextView和EditText中的数据信息。具体代码如下:编写主程序文件,其具体实现流程如下:2.2.2具体实现/*判断PhoneStateListener当前状态*/publicclassmPhoneCallListenerextendsPhoneStateListener{@OverridepublicvoidonCallStateChanged(intstate,StringincomingNumber){switch(state){/*获取手机待机状态*/caseTelephonyManager.CALL_STATE_IDLE:mTextView01.setText(R.string.str_CALL_STATE_IDLE);try{AudioManageraudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);(2)判断PhoneStateListener当前状态,具体代码如下:2.2.2具体实现if(audioManager!=null){/*设置手机为待机时响铃正常*/audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);audioManager.getStreamVolume(AudioManager.STREAM_RING);}}catch(Exceptione){mTextView01.setText(e.toString());e.printStackTrace();}break;/*获取手机状态为通话中*/caseTelephonyManager.CALL_STATE_OFFHOOK:mTextView01.setText(R.string.str_CALL_STATE_OFFHOOK);break;2.2.2具体实现

/*获取的手机状态为来电中*/caseTelephonyManager.CALL_STATE_RINGING:/*显示来电信息*/mTextView01.setText(getResources().getText(R.string.str_CALL_STATE_RINGING)+incomingNumber);/*判断输入电话是否一致,一样时用静音*/if(incomingNumber.equals(mTextView03.getText().toString())){try{AudioManageraudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);if(audioManager!=null){2.2.2具体实现

/*设置响铃为静音*/audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);audioManager.getStreamVolume(AudioManager.STREAM_RING);Toast.makeText(example10.this,getString(R.string.str_msg),Toast.LENGTH_SHORT).show();}}catch(Exceptione){mTextView01.setText(e.toString());e.printStackTrace();break;}}}super.onCallStateChanged(state,incomingNumber);2.2.2具体实现mEditText1.setOnKeyListener(newEdit

温馨提示

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

评论

0/150

提交评论