《手机Android平台的相关知识.docx》由会员分享,可在线阅读,更多相关《手机Android平台的相关知识.docx(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Android是Google于2007年11月05日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统, 中间件, 用户界面和应用软件组成。它采纳软件堆层Software Stack,又名软件叠层的架构,主要分为三局部。底层以Linux内核工作为根底,由C语言开发,只供应根本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C+开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件那么由各公司自行开发,以Java作为编写程序的一局部。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。 S60,即S
2、eries 60。是诺基亚为Symbian系统开发的一个UI用户界面,S60不是手机系统,而是一个基于Symbian系统的用户图形操作界面。Andy Rubin创立了两个手机操作系统公司:Danger和Android。Danger 5亿美元卖给微软,今年成为了Kin,Android4千万美元卖给Google。 Android是Google于2007年11月05日宣布的基于Linux平台的开源移动操作系统的名称,该平台由操作系统, 中间件, 用户界面和应用软件组成。它采纳软件堆层Software Stack,又名软件叠层的架构,主要分为三局部。底层以Linux内核工作为根底, android系统
3、效果图由C语言开发,只供应根本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C+开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件那么由各公司自行开发,以Java作为编写程序的一局部。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。 Google通过及软, 硬件开发商, 设备制造商, 电信运营商等其他有 关各方结成深层次的合作伙伴关系,盼望借助建立标准化, 开放式的移动 软件平台,在移动产业内形成一个开放式的生态系统。 Android 作为Google企业战略的重要组成局部,将进一步推动“随时随地为每个
4、人供应信息这一企业目标的实现。全球为数众多的移动 用户正在运用各种基于 Android 的 。谷歌的目标是让移动通讯不依靠于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动开展战略:通过及全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动效劳,并推广这些产品。android系统特性应用程序框架 支持组件的重用及替换 Dalvik虚拟机 特地为移动设备做了优化 内部集成阅读器 该阅读器基于开源的WebKit 引擎 优化的图形库 包括2D和3D图形库, android3D图形库基于OpenGL ES 1.0 硬件加速可选 #SQLite 用
5、作构造化的数据存储 多媒体支持 包括常见的音频, 视频和静态印象文件格式 如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF GSM 依靠于硬件 蓝牙Bluetooth, EDGE, 3G, and WiFi 依靠于硬件 照相机,GPS,指南针,和加速度计 依靠于硬件 丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件android系统架构架构详解现在我们拿起手术刀来剖析各个局部。其实这局部SDK文档已经帮我们做得很好了,我们要做的就是拿来主义,然后再加上自己理解。下面自底向上分析各层。 android1, Li
6、nux KernelAndroid基于Linux 2.6供应核心系统效劳,例如:平安, 内存管理, 进程管理, 网络堆栈, 驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏详细硬件细微环节而为上层供应统一的效劳。 假如你学过计算机网络知道OSI/RM,就会知道分层的好处就是运用下层供应的效劳而为上层供应统一的效劳,屏蔽本层及以下层的差异,当本层及以下层发生了变更不会影响到上层。也就是说各层各尽其职,各层供应固定的SAPServiceAccess Point,专业点可以说是高内聚, 低耦合。 假如你只是做应用开发,就不须要深化了解Linux Kernel层。 2, Andr
7、oid RuntimeAndroid包含一个核心库的集合,供应大局部在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机那么是基于存放器的。两种架构各有优劣,一般而言,基于栈的机器须要更多指令,而基于存放器的机器指令更大。dx 是一套工具,可以将 Java .class 转换成 .de
8、x 格式。一个dex文件通常会有多个.class。由于dex有时必需进展最正确化,会使文件大小增加1-4倍,以ODEX结尾。 Dalvik虚拟机依靠于Linux 内核供应根本功能,如线程和底层内存管理。 3, LibraryAndroid包含一个C/C+库的集合,供Android系统的各个组件运用。这些功能通过Android的应用程序框架application framework暴露给开发者。下面列出一些核心库: 系统C库标准C系统库libc的BSD衍生,调整为基于嵌入式Linux设备 媒体库基于PacketVideo的OpenCORE。这些库支持播放和录制很多流行的音频和视频格式,以及静态图
9、像文件,包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 界面管理管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层 LibWebCore新式的Web阅读器引擎,驱动Android 阅读器和内嵌的web视图 SGL根本的2D图形引擎 3D库基于OpenGL ES 1.0 APIs的实现。库运用硬件3D加速或包含高度优化的3D软件光栅 FreeType 位图和矢量字体渲染 SQLite 全部应用程序都可以运用的强大而轻量级的关系数据库引擎 4, Application Framework通过供应开放的开发平台,Android使开发者能够编制极其丰富和新奇的应
10、用程序。开发者可以自由地利用设备硬件优势, 访问位置信息, 运行后台效劳, 设置闹钟, 向状态栏添加通知等等,很多很多。 开发者可以完全运用核心应用程序所运用的框架APIs。应用程序的体系构造旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以运用这些功能须要听从框架执行的平安限制。这一机制允许用户替换组件。 全部的应用程序其实是一组效劳和系统,包括: 视图View丰富的, 可扩展的视图集合,可用于构建一个应用程序。包括包括列表, 网格, 文本框, 按钮,甚至是内嵌的网页阅读器 内容供应者Content Providers使应用程序能访问其他应用程序如通讯录的数据,或共享自己
11、的数据 资源管理器Resource Manager供应访问非代码资源,如本地化字符串, 图形和布局文件 通知管理器Notification Manager使全部的应用程序能够在状态栏显示自定义警告 活动管理器Activity Manager管理应用程序生命周期,供应通用的导航回退功能 5, ApplicationAndroid装配一个核心应用程序集合,包括电子邮件客户端, SMS程序, 日历, 地图, 阅读器, 联系人和其他设置。全部应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,特别清晰,分工很明确。Android本身是一套
12、软件堆叠(Software Stack),或称为软件叠层架构,叠层主要分成三层:操作系统, 中间件, 应用程序。从上面我们也看到了开源的力气,一个个熟识的开源软件在这里奉献了自己的一份力气。 深化Android【一】 序及开篇对于Android,我也算是老人了,所谓,有文有真想。正由于这段玩票经验,使得我在毕业后,鬼使神差的成为移动平台的一名码工,再次有时机放纵的拥抱Android。2021开年,手上突然有了一把闲散时间,有时机进一步总结和学习Android。于是想再一次为Android写一系列的东西,这些东西来自于一些开发经验,对源码的学习和对Android的浅薄相识,也算是鞭笞自己学习的一
13、种手段。其下全部内容,预料有十数篇,抑或更多。根本和技术相关,或许会配有一些其他相关比拟闲淡的话题。可能会有一些具象实例,但更多的可能是自己的一些理解和认知。全部一切,源自于妄自挖掘,难免有疏漏或误会,观者淡定。以此为序,有心者,望共勉。Android简史人生假设只初识,何事秋风悲画扇。 - 木兰辞要说当今移动平台的当红辣子鸡,Android说它是第二,或许没有别家敢认这个第一好吧,iPhone,有意见就说.。了解Android开发平台的过去和现状,除了往下看,另有便捷的方式就是在WikiPedia中键入Android,在这里,特此鸣谢GFW友情放生。诞生早在2005年7月,Google舞动着
14、手中的美刀,收下了由Andy Rubin传闻中的Android之父.等人创立的一家小公司,他们当时做的就是基于Linux内核的手机操作系统,也就是小时候的Android。经过Google多年打磨,Android在07年末,正二八经的粉墨登场开门接客。自打一诞生,Android便被钉板在富二代的角色上,不仅是因为老爹有钱的令人发指,也是因为其后有一帮金光闪烁的叔伯们保驾护航。这个叔伯群,便是响当当的开放手机联盟OHAOpen Handset Alliance。这个联盟涵盖了中国移动, T-Mobile, Sprint这样的移动运营商,也包括HTC, Motolora, 三星这些的手机制造商,同时
15、还有以Google为代表的手机软件商,以Inter, Nvidia为标记的底层硬件厂商和Astonishing Tribe这样的商业运作公司这公司是啥我也不晓得.。作为后援团,他们理论上的任务,是各尽其长,全力捧红Android,事实上的任务是同心协力,借Android东风赚一个盆钵满响。当然,Android自所以被万众瞩目一炮走红,不仅仅是丫实在太有背景,同时,它也有这太多的簇新的概念。Android是一个开源的平台恩,真正的全面开源,是在发布后很久以后了.,它给那些捂着自家平台源码当宝的竞争对手们一记当头棒喝。Android自行研发了一套Java虚拟机,当时仅供应Java API的支持ND
16、K是更久以后的事情了.,号称为专为高端智能设计。Android开发环境支持全部主流操作系统平台,包括Windows,Linux,Mac,即便到今日,在手机开发中也是极其罕见的。Android的带头人Google,本身是做网络起家,Android内嵌大量Google网络应用,听上去就显得很酷。这全部的一切,共同造就了Android那鹤立鸡群,不染风尘的少侠形象。造势推出伊始,Google还有一个很震撼的推广举动,就是实行所谓的Android程序挑战赛Android Developer Challenge, ADC。整个竞赛分成两场,第一场ADC1竞赛,在没有任何真机问世,SDK还是个雏形的状况下
17、,便鸣金开锣了。竞赛套路是无差异的群殴,根本概念是无论你来自何方还是要满意美国法律要求和避嫌要求的,无论你想做些什么,也不管你是光杆司令还是流氓团伙,只要提交一个能在模拟器上跑起来的程序,就可参赛。而竞赛只是对你作品进展参观评比,作品的全部权依旧放在开发者的口袋中。当然,这还不算什么创新,NB的是无比丰厚的奖金,整个ADC的奖金高达1千万美刀,每场各半,根本上首轮入围奖前50已经超越了那时候一般程序竞赛的头名奖金,这对很多小公司和个人而言,无疑是具有很强吸引力的。于是,各路打酱油好手蜂拥而至,各论坛, 博客, 网站也七嘴八舌的探讨开来,一时间,满城风雨。ADC1我也很厚颜无耻的参与了,结果当然
18、可以预想,一毛钱都没摸上。回想整个过程,差距最大的并不是在技术上,而是认知上,我们玩的产品是人家几年前玩剩下的,说创新只是一抹笑谈。当时觉着,Google太NB了,ADC这种车马未动粮草先行的招太华美了,就这动静,不管比出来个啥结果,这1千万刀也掏值了。但时过境迁,现在回头来想,或许一切并不是看上去那么美。由于没有扎扎实实的真机摆出来,大家普遍抱着一种玩票的心理,真的敢不顾一切舍下身家性命押宝在Android上的尽在少数,这就锻造了Android平台很长一段时间的只见雷不见雨的局面。而等喧嚣过后,很多人热忱消退,Google真端出Android真机的时候,还须要重新热场再来一次,或许,真的有些
19、得不偿失。逆境全部的东西现在来说,都是事后诸葛亮,只能听个响不能当个真。而真实的状况是ADC1很快进入囧境,由于架构设计上的种种缘由,Google花了比预想多的多的时间做Android的优化工作,ADC1竞赛被迫不断延期,彻底沦为懒婆娘的裹脚布。各路曾热捧Android的媒体,也不失时机的倒戈,亲自由自己画上的感慨号后面,重重画上了个大大的问号。祸不单行,同样是由于Android的性能问题,虽然各路高手把Android移植到了不同的手机平台上,但传闻中的GPhone始终难产中,使得人们不免有了胎死腹中的猜想。及此同时,其他对手可一点也没闲着。iPhone很快宣布开放SDK,以此来勾引纯情的开发
20、人员。Symbian被Nokia彻底收购,成为Nokia的自留地,开源方案也很快浮出水面。全部景象,对Android而言都犹如梦魇。破茧全部一切逆境,都在G1发布后,渐渐消散了。2021年10月,第一款搭配Android平台的真机,搭载着无限荣耀及幻想的HTC Dream正式出售,这就是注定要载入史册的G1。虽然比之当时绝代风华的iPhone,粗陋的G1犹如村姑遇上公主一般,但无论如何,G1让人们真真实切的看到了Android。这就犹如你家买的跳票N久的期房,最终见着了个毛胚房,那种感觉,除了踏实,找不到更适合的词汇了。好事当然也会成双,G1它不是一个人在战斗。ADC1终于是落下帷幕,Andr
21、oid Market的也顺理成章的破茧而出,早期的应用,大都来自于ADC1的奉献。Android也完毕了伪开源的历史旅程,正式开发SDK的源码实现,搭配的是Apache的License,这种坦诚相见的感觉看上去很不错。赤胆忠心的HTC,更是再接再励,在G1后,接连发布了MagicG2和HeroG3。尤其是Hero的现身,惹得一阵小惊艳,HTC为Hero搭配的是基于Android改造UI的Sense系统,以华美的界面风格赚足了眼球,也创了改造Android的先河。在HTC高歌猛进的同时,猫在螳螂后的一群黄雀,也敌在动我也动了。摩托罗拉,三星,LG,华为,戴尔,联想等一干手机厂商纷纷跟进,各种各样
22、的Android蜂拥而至。及此同时,其他嵌入式厂商也推陈出新,爱可视Archos发布了基于Android的平板设备,明基的Android上网本也是箭在弦上,而基于Android的手持电子书阅读设备也不断的被推出,浩大的Android联盟初现峥嵘。为了防止同质化,各个厂商纷纷对Android进展的改造,摩托罗拉推出了Cliq,打得是SNS整合牌,三星的新系统也是被广泛期盼,而中移动的OMS丑媳妇也要见婆娘了,打着整合移动效劳牌_的OMS,以丑陋的外貌, 低下的SDK版本和雷死人不偿命的宣扬文案只字不提Android,只说自己做了大量很NB的工作,其实.,哎,咋就那么小家子气呢.也算是招来大量眼球
23、。而还是没能耐住孤独的Google,联手HTC,一同推出了至今只为止最重量级的Android手机:Nexus One。江湖有云:天下武功,无快不破。搭载了全新的Android 2.1,1G的CPU,史上最清晰的手机屏幕的Nexus One,快的是一塌糊涂迅雷不掩耳盗铃小叮当,在单机层面,第一次使得Android手机及iPhone掰手腕的实力之前及iPhone的比拟,都须要依靠集团力气,三英战吕布.。在各家厂商努力的同时,Android本身也没有闲着,版本从1.1,一步步进阶到了2.1,SDK的升级,伴随着大量性能, 接口的改进,和功能的丰富,Android变得越来越快,越来越省电,越来越丰富,
24、越来越多Google效劳被嵌入_。由于Android SDK是基于Java的,即便虚拟机做的很是NB,在某些状况下,性能也是无法及原生的C+代码同日而语,于是,从1.5版起,除了SDK,Android还拥有了NDKNative Develop Kit,它供应了一些C+的库和编译环境库是真的很少.,开发人员可以基于C+写底层库,用Java写上层逻辑,通过混编的方式,兼得鱼和熊掌。Android Market的开展也甚为迅猛,虽然和其鼻祖App Store相比,应用的规模和盈利实力还显得比拟幼齿,但其涨势猛烈,开展趋势远胜于前辈。国内一些比拟闻名的手机软件,也纷纷拥有了Android版本的小弟,比
25、方网易有道的出品的有道词典Android版好吧,这是在插播广告,欢送大家进展围观并提宝贵意见.。起飞种种迹象说明,2021,或许就是姗姗来迟的Android元年。三星,moto,LG,HTC等多家手机制造厂商,都为2021年将推出的半数以上的手机搭配了Android。在国内,移动的OPhone,丑媳妇要正式揭开盖头了,惨烈是惨烈了一点,但聊胜于无,除了水货,2021终归至少多了条购置Android手机的道路。软件开发方面,大家也从抱着双臂冷眼旁观的状态,进入到了一种伺机而动的战略打算阶段。前不久召开的moto开发者大会,惊现国内各领域的公司,试水开场,可见一斑。国内各个山寨的Market的,也
26、越来越货源足够,下载量稳步上升,升温,就在当下。而随着G2为首的Android水机价格火速下调,身边路边地铁边,可以看到越来越多的人,把玩着各种各样的Android手机,状况尤为喜人。所以,2021,假如你有心,就做好打算吧。【二】 架构和学习虽贵为富二代,但Android要是没任何可圈点的地方,开不过70迈,在玲琅满目的手机平台竞争中,充其量也就做几个俯卧撑打一桶酱油,然后被落的远远的。说究竟,出来混,靠的还是技术。架构从SDK文档中,偷来一幅Android平台的架构图,如上。在整个架构最底层红彤彤的局部,是Linux Kernel在移动平台的一个移植,它隐藏了硬件, 网络等相关的细微环节,
27、为上层供应了一个相对纯净的统一接口。除非要做的是Android到不同设备的移植工作,否那么对于大局部一般开发者而言,根本上是远观而不必亵玩的。Google始终强调,Android的底层实现异样NB,可移植性超强,暂没有功夫研读,实属缺憾。靠上一层,是一些核心的和扩展的类库,它们都是原生的C+实现。在这一层,你可以看到很多熟识的面孔,一如SQLite, WebKit, OpenGL,开源的力气及奉献由此可见。假如,该层类库须要被上层函数调用,就必须要通过JNI的导出相应的接口函数,否那么就只能在层次内部自个把玩。也是在这一层次上,还有为上层Java程序效劳的运行时。Dalvik虚拟机,是Andr
28、oid的Java虚拟机,之所以不采纳J2ME的虚拟机,一方面是因为J2ME的设计是为了低端机器而优化,而Dalvik那么是为了高端一些的机器进展优化,供应更好的性能。另一方面,从商业角度来看,必需绕开J2ME虚拟机,Android才能彻底解放,想怎么开源就怎么开源,不再须要考虑License的问题。再往上,最终有Java出没了。首先是框架层,这里包含全部开发所用的SDK类库,另外还有一些未公开接口的类库和实现,它们是整个Android平台核心机制的表达。而在最上面,就是应用层了,系统的一些应用和第三方开发的全部应用都是位于这个层次上,或许要纠结两者的差异,就是系统应用会用一些隐藏的类,而第三方
29、的应用,总是基于SDK供应的东西来搞。一般来说,Android开发,就是在SDK的根底上,吭哧吭哧用Java写应用。但自从有了NDK,一切有了写小变更。NDK的出现意味着,最上面应用层的内容,可以穿越Java部署的框架层,干脆和底层暴露出来的,或者自行开发的C+库干脆对话,当然在这些库中须要包含JNI的接口。人说,这就不是Android也可以用C+开发应用么,但其实,这样的说法不够准确,纯C+应用,是无法被承受的。因为在Android中,大量的核心机制部署在框架层,它们都是用Java实现的,比方控件库,Activity的调度之类的。因此,没了界面,没了调度,还是只用C+做类库比拟相宜,否那么一
30、切都乱了套了。特征基于这样的架构,Android有很多的设计显得很有意思。纵览整个SDK和核心机制的设计,工整美丽,是Android给人的第一感觉。为了说明这一点,找一个反面教材是很有必要的,Symbian同学毫无悬念的担当这个伟岸的角色。写Symbian程序,感觉就像是在玩一个猜谜嬉戏。哪怕你是一个Symbian老手,当须要用到Symbian中某块生疏功能的时候,你可能依旧手足无措。你往往须要猜并反复找寻,在这里我须要运用哪一种奇巧淫技呢,是该臆想某些事务,还是应当用一个神奇的UID找寻某个特定应用,诸如此类。而做Android应用的时候,就像是做高考模拟试题,题看上去不一样,解答模式摸清晰
31、,就一通百通,一了百了。监听某个系统事务,查一下SDK就好;访问某个应用的数据,看看它有没有供应Content Provider就可以。全部的一切,都是按套路出牌,只要你了解了套路,再生疏的牌也可以看得懂,出的顺。人说武林高手,都应当是无招胜有招,而一个好的应用框架,也应当做到举重假设轻,可触类旁通。而Android框架最文采飞扬的一点,就是引入了Mash-Up的思想。所谓Mash-Up,就是把写应用搞成搭积木,要出效果的时候,东家一块西家一块现场拼起来就好。这里面关键有两点,一个是模块化,另一个就是动态性。所谓模块化,就是一个应用的功能要明确的被封成一个个边界清晰的功能点,每一个功能点都像是
32、一个黑盒,由预先定义的规那么描述出其交互方式;而动态性,就是这些独立的模块能够在运行的时候,依据需求描述,连接在一起,共同完成某项更大的功能。在这两点上,Android都做得特别精彩。站在可Mash-Up构造应用这一点去看其他的一些Android中的核心功能设计,就显得很有章可循了。比方为什么要把文件私有化,为什么要让进程被托管,等等当然也可以站在别的角度看出不同的效果,视角不同,视野自然不同.。在UI机制方面,Android也有很不错的表现。它实行xml格式的资源文件,描述全部界面相关的内容。资源文件不是什么新东西了,xml格式也是老调重弹,但珍贵的是Android做的更为的丰富和彻底,根本
33、把界面相关的逻辑,全部从代码中剥离到了资源文件中,和Symbian那四不像的资源文件相比,真是强大了不知多少倍了。Android学习入门不积跬步,无以至千里。 - 劝学说,万事开头难。想开场Android的开发,最重要的应当是先把马步扎稳,套路摸清晰,后面的事情就顺当多了。翻开怀抱,拥抱Android,或许可以先做下面这些事。开发环境辣手摧花成性的GFW,无情的把Android开发者官网关在了墙外。不过没关系,猛击这里,同样可以殊途同归Shit,始终在用代理,刚试了下,发觉竟然也被盾了,假如不行,那就只能翻墙了.。假如旅途顺当,你可以在路径sdk/index.html下找到安装说明,胜利配置好
34、Android的开发环境【注】:在以后,假如要给开发者页面上的链接,都会给一个像sdk/index.html这样的相对路径,你可以在前面加上官网地址,或者本地SDK的doc地址拼凑成完整的路径,在一个盾牌横行的朝代,只能用这样委屈求全的方法保证能更好的运用.。在2.0之前,每一次版本更新,你都要自己去下个全新的SDK,然后依据说明,当心翼翼的一步步修改eclipse的设置,甚是麻烦。在2.0后,这个模式有所改善,你会先下到一个类似于下载器的插件,通过它可以来管理和升级SDK,不仅简化了整个升级模式,还使得你可以更好的在各个不同的SDK版本间游走,利国利民。Eclipse + ADTAndroi
35、d Development Tool,是正牌的Android开发环境。你可以在Windows,Linux,Mac下做开发,甚为自由。比之Symbian的开发环境,ADT显得尤为强大,它对SDK供应的一堆优秀的吩咐行工具进展了UI上的封装,供应了图形界面吩咐行控当然同样华蜜,详细参见:guide/developing/tools/index.html。通过ADT,你可以用运行和管理模拟器,运用调试器进展调试,过滤和查看Log,阅读模拟器上的文件信息,模拟拨号, 短信等手机才有的事务,等等。文档我知道,有很多人在学习一个新平台开发的时候,都习惯去买一些xxx 21天精通之类的书籍。但其实,最好的入
36、门学习资料,就是SDK文档。因为只有做平台的自己,才能最了解平台中的各个玄机,各方面的轻重缓急,从而能够更好的对症下药药到病除。在Android的SDK中,guide/index.html是由浅入深的教学文档,reference/packages.html是标准的API文档。对于教学文档,我的意见是,一字不拉的通读一遍甚至多遍,至少做到能对Android摸着头脑,并且遇到问题的时候,能够快速想起在哪里可以找到,回来深刻阅读。而API文档方面,Android做的算是还不错了。根本上每个类,每个接口,都有标准而详尽的说明,在一些尤为重要的类中,还具有大量的学习性的内容,不和Symbian似的,有太
37、多的太监类,只有光秃秃的一个函数,一行文档说明都没有。整个文档构造是依据Java包来组织的,本身Java包命名的构造性和可读性很强,找起来也颇为便利。很多人对SDK文档有抵触心情,我想,有两方面的缘由。一那么是SDK文档普遍缺少文学性,麻木不仁的八股文,难以下咽。Android在这方面做得算是乏善可陈,虽然算不上文采华美,但还是挺适合阅读的。另一那么,就会是语言方面的缘由了。SDK文档多为英语,间或像MSDN这样有中文的,也停留在机器翻译的水平上,阅读起来颇犯难过。特地在网上搜了下,找到一些翻译SDK的中文文档,比方这里。虽然是基于1.5 r1版本SDK所著,稍显过时,但翻译的还是有小专心的,
38、作为协助,也不失为一份好资料,特代表广袤看官向这些为人民福利着想的同志致敬。Tutorials光说不练假把式,除了读,在入门阶段,写也是一项不能少的运动。同样是在SDK中,Android供应了一组Tutorials和一些列的Samples,详见:resources/index.html。Tutorials很简洁,Hello World只是在教你如何在eclipse中,在ADT的扶植下,创立一个Android工程。相比之下,Hello Views困难了些,它集中展示了几种标准的Android Layout 样式是如何构建的,很多时候,你都是在这些样式下扩展所需的UI。Hello Localiza
39、tion,是教你如何运用资源的,做完这个,就可以了解Android的资源有多杀。最终收官的是一个更为完整的Notepad Tutorial,它展示了很多Android的核心机制,比方基于Intent的Activity整合,Activity的生命周期等。迈过这个Tutorial,欢送你,进入Android的大门。当然,做完Tutorials,对于Android而言,只是管中窥豹略见一斑。在SDK中,还供应了一系列的Samples。可以依据自己的需求,选择相宜的Sample编译运行和学习。但其中,有一个是不管你做什么,都须要必看必读必熟识的,就是API Demos。在这个Sample中,集中展示了
40、Android重点功能的API运用,把这个Sample用熟识,须要做什么的时候过去找一下就可以很快的入手了。源码到这里,很多看官确定很不屑,前面所谓的学习入门介绍,只不过是围着SDK打转。其实,事实也是如此,SDK中包含的内容是真的特别重要,我只是期望通过一些简短的介绍,激起一些初学者的重视,如是而已。当然,SDK每一个平台都有,没什么希奇的。但Android有另一个特别希奇而值钱的看家法宝,就是源代码。从Android Source的主站上:,你可以获得整个平台的源码以及相关介绍。特别语重心长的期望大家都去down一份源码放在机器上,哪怕你不须要进展修改编译,放在机器上当百科全书也是远胜于任
41、何一本Android教学书籍的。本系列文章后续很多内容,都是从源码中学习到的一些浅薄见识。对于大局部开发者都有学习价值的源码,主要在源码的frameworks和packages书目下。前者包含的是平台核心的一些实现,比方你须要自定义一个控件,或许你就可以翻到一个系统控件的实现中去,看看它是怎么来做的。后者包含一些系统的应用实现,比方你想做个播放器,或许你可以先去参考参考系统自带的是详细怎么做的。这样的实现,即便不算是最华美,至少也是最标准,其价值不容小视。另外,你也可以把它当个代码库来使,不会运用某个类,grep一把,或许就能获得一份最美丽的Sample。当然,假如你有时候对某些系统机制表示费
42、解,抑或有一些bug不知道源头在哪,都可以跟着源码顺藤摸瓜的搞清晰。这样的好东西,可不是每个平台都能够享用的。其他论坛,其实对于开发和学习都是很重要的资源。终归,全部的资料都是死的,只有人是活得,能够最大限度的因地制宜解决问题。只不过,标准的官方论坛,放在Google Group上,已经惆怅的被盾了。中文论坛方面,没有特殊优秀和活泼的,这一方面是由于Android的开呈现状还不算很磅礴,另一方面是由于Android的开发相对于Symbian而言,奇技淫巧少了很多,没有那么多好问的。或许你可以去去csdn这样的传统论坛,或者eoe这样特地的论坛。有的时候,还是多少能获得一些扶植的。书籍方面,真没
43、有什么举荐,豆瓣上搜寻一下,你可以看到,目前的书籍,根本上还是集中在SDK运用层面上,很少有解析的很透彻,做的很深化的。而SDK的运用,看SDK的文档就足够了,假如实在对e文不感冒,买一两本评价不太差的中文书籍,放着翻翻也还是挺好。更进一步,或许可以读读一些经验性的文档,去Google Code上搜寻一些代码回来看看。比方,SDK文档中,有个经验性文档的集合:resources/articles/index.html,就可以翻看一下。最终,更多的一切还须要自己在工程和思索中,渐渐总结。信任,好的代码,会垂青一个勤于动手和思索的人。【三】 组件入门组件Component,在谈及所谓架构和重用的时
44、候,是一个重要的事情。很多时候都会说基于组件的软件架构,指的是期望把程序做乐高似的,有一堆接口标准封装完整的组件放在哪里,想用的时候取上几个一搭配,整个程序就构建完成了。在开篇的时候就在说,Android是一个为组件化而搭建的平台,它引入所谓Mash-Up的概念,这使得你在应用的最上层,想做的不组件化都是很困难的一件事情底层逻辑,好吧,管不了.。详细说来,Android有四大组件四喜丸子:Activity, Service, Broadcast Receiver, Content Provider。Activity做一个完整的Android程序,不想用到Activity,真的是比拟困难的一件事
45、情,除非是想做绿叶想疯了。因为Activity是Android程序及用户交互的窗口,在我看来,从这个层面的视角来看,Android的Activity特像网站的页面。首先,一个网站,假如一张页面都没有,那.,真是一颗奇葩。而一张页面往往都有个独立的主题和功能点,比方登录页面,注册页面,管理页面,如是。在每个页面里面,会放一些链接,已实现功能点的串联,有的链接点了,刷,跑到同一站点的另一个页面去了;有的链接点了,啾,可能跳到其他网站的页面去;还有的链接点了,恩.,这次没跑,但当前页面的样子可能有所变更了。这些模式,和Activity给人的感觉很像,只不过实现策略不同罢了,终归Android这套架构
46、的核心思想,本身就来自源于Web的Mash-Up概念,视为页面的客户端化,也未尝不行。Activity,在四大组件中,无疑是最困难的,这年头,一样东西和界面挂上了勾,都简化不了,想一想,独立做一个应用有多少时间沦落在了界面上,就能琢磨清晰了。从视觉效果来看,一个Activity占据当前的窗口,响应全部窗口事务,具备有控件,菜单等界面元素。从内部逻辑来看,Activity须要为了保持各个界面状态,须要做很多长久化的事情,还须要妥当管理生命周期,和一些转跳逻辑。对于开发者而言,就须要派生一个Activity的子类,然后埋头苦干上述事情。对于Activity的更多细微环节,先可以参见:referen
47、ce/android/app/Activity.html。后续,会献上更为详尽的剖析。Service效劳,从最直白的视角来看,就是剥离了界面的Activity,它们在很多Android的概念方面比拟接近,都是封装有一个完整的功能逻辑实现,只不过Service不抛头露脸,只是静默无声的做坚实的后盾。但其实,换个角度来看,Android中的效劳,和我们通常说的Windows效劳,Web的后台效劳又有一些相近,它们通常都是后台长时间运行,承受上层指令,完成相关事务的模块。用运行模式来看,Activity是跳,从一个跳到一个,呃.,这有点像模态对话框或者还像web页面好了.,给一个输入抑或没有.,然后不管不顾的让它运行,离开时返回输出同抑或没有.。而Service不是,它是等,等着上层连接上它,然后产生一段长久而缠绵的通信,这就像一个用了Ajax页面,看着没啥变更,偷偷摸摸的和Service不知眉来眼去多少回了。但和一般的Service还是有所不同,Android的Service和全部四大组件一样,其进程模型都是可以配置的,调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程下,还是不同的进程下。这句话,可以拿把指甲刀刻进脑海中去,它凸显
限制150内