android简介_安卓系统说明-程序员宅基地

技术标签: android  

Android(安卓)是一种基于Linux内核不包含GNU组件的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。

2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 

系统简介

Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。

Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。

Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。

2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。

发展历程

2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。

2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。

2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(Open Handset Alliance来共同研发改良Android系统,这一联盟将支持谷歌发布的手机操作系统以及应用软件,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。 

2008年,在GoogleI/O大会上,谷歌提出了AndroidHAL架构图,在同年8月18号,Android获得了美国联邦通信委员会(FCC)的批准,在2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本。

2009年4月,谷歌正式推出了Android 1.5这款手机,从Android 1.5版本开始,谷歌开始将Android的版本以甜品的名字命名,Android 1.5命名为Cupcake(纸杯蛋糕)。该系统与Android 1.0相比有了很大的改进。

2009年9月,谷歌发布了Android 1.6的正式版,并且推出了搭载Android 1.6正式版的手机HTC Hero(G3),凭借着出色的外观设计以及全新的Android 1.6操作系统,HTC Hero(G3)成为当时全球最受欢迎的手机。Android 1.6也有一个有趣的甜品名称,它被称为Donut(甜甜圈)。

2010年2月,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”(“staging tree”)上除去,从此,Android与Linux开发主流将分道扬镳。在同年5月份,谷歌正式发布了Android 2.2操作系统。谷歌将Android 2.2操作系统命名为Froyo,翻译完名为冻酸奶。

2010年10月,谷歌宣布Android系统达到了第一个里程碑,即电子市场上获得官方数字认证的Android应用数量已经达到了10万个,Android系统的应用增长非常迅速。在2010年12月,谷歌正式发布了Android 2.3操作系统Gingerbread (姜饼)。

2011年1月,谷歌称每日的Android设备新用户数量达到了30万部,到2011年7月,这个数字增长到55万部,而Android系统设备的用户总数达到了1.35亿,Android系统已经成为智能手机领域占有量最高的系统。

2011年8月2日,Android手机已占据全球智能机市场48%的份额,并在亚太地区市场占据统治地位,终结了Symbian(塞班系统)的霸主地位,跃居全球第一。

2011年9月,Android系统的应用数目已经达到了48万,而在智能手机市场,Android系统的占有率已经达到了43%。继续在排在移动操作系统首位。谷歌将会发布全新的Android 4.0操作系统,这款系统被谷歌命名为Ice Cream Sandwich(冰激凌三明治)。

2012年1月6日,谷歌Android Market已有10万开发者推出超过40万活跃的应用,大多数的应用程序为免费。Android Market应用程序商店目录在新年首周周末突破40万基准,距离突破30万应用仅4个月。在2011年早些时候,Android Market从20万增加到30万应用也花了四个月。

2013年11月1日,Android4.4正式发布,从具体功能上讲,Android4.4提供了各种实用小功能,新的Android系统更智能,添加更多的Emoji表情图案,UI的改进也更现代,如全新的HelloiOS7半透明效果。

2015年,网络安全公司Zimperium研究人员警告,安卓(Android)存在“致命”安全漏洞,黑客发送一封彩信便能在用户毫不知情的情况下完全控制手机。 

2018年10月,谷歌表示,将于2018年12月6日停止Android系统中的Nearby Notifications(附近通知)服务,因为Android用户收到太多的附近商家推销信息的垃圾邮件。 

2020年3月,谷歌的Android安全公告中提到,新更新已经提供了CVE-2020-0069补丁来解决针对联发科芯片的一个严重安全漏洞。

发行版本

Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android 1.0)。后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点命名法开始于Android 1.5发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:纸杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松饼(Android 2.0/2.1),冻酸奶(Android 2.2),姜饼(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果冻豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛轧糖(Nougat,Android 7.0),奥利奥(Oreo,Android 8.0),派(Pie,Android 9.0)

从Android 10开始,Android不会再按照基于美味零食或甜点的字母顺序命名,而是转换为版本号,就像Windows和iOS系统一样。

1.0 Beta

2007年发布的Android 阿童木。

1.0

2008年9月,谷歌发布Android1.0。

1.5

Cupcake(纸杯蛋糕):2009年4月30日发布。

主要的更新如下:

拍摄/播放影片,并支持上传到Youtube;支持立体声蓝牙耳机,同时改善自动配对性能;最新的采用WebKit技术的浏览器,支持复制/贴上和页面中搜索;GPS性能大大提高;提供屏幕虚拟键盘;主屏幕增加音乐播放器和相框widgets;应用程序自动随着手机旋转;短信、Gmail、日历,浏览器的用户接口大幅改进,如Gmail可以批量删除邮件;相机启动速度加快,拍摄图片可以直接上传到Picasa;来电照片显示。

1.6

Donut(甜甜圈):2009年9月15日发布。

主要的更新如下:

重新设计的Android Market手势;支持CDMA网络;文字转语音系统(Text-to-Speech);快速搜索框;全新的拍照接口;查看应用程序耗电;支持虚拟私人网络(VPN);支持更多的屏幕分辨率;支持OpenCore2媒体引擎;新增面向视觉或听觉困难人群的易用性插件。

2.1

2009年10月26日发布。

主要更新:

优化硬件速度;"Car Home"程序;支持更多的屏幕分辨率;改良的用户界面;新的浏览器的用户接口和支持HTML5;新的联系人名单;更好的白色/黑色背景比率;改进Google Maps3.1.2;支持Microsoft Exchange;支持内置相机闪光灯;支持数码变焦;改进的虚拟键盘;支持蓝牙2.1;支持动态桌面的设计。

2.2

Froyo(冻酸奶)2010年5月20日发布。

主要更新:

整体性能大幅度的提升;3G网络共享功能;Flash的支持;App2sd功能;全新的软件商店;更多的Web应用API接口的开发。

2.3

Gingerbread(姜饼) :2010年12月7日发布。

主要更新:

增加了新的垃圾回收和优化处理事件;原生代码可直接存取输入和感应器事件、EGL/OpenGLES、OpenSL ES;新的管理窗口和生命周期的框架;支持VP8和WebM视频格式,提供AAC和AMR宽频编码,提供了新的音频效果器;支持前置摄像头、SIP/VOIP和NFC(近场通讯);简化界面、速度提升;更快更直观的文字输入;一键文字选择和复制/粘帖;改进的电源管理系统;新的应用管理方式。

3.0

Honeycomb(蜂巢):2011年2月3日发布。

主要更新:

针对平板大屏幕而做优化;全新设计的UI增强网页浏览功能 ;in-app purchases功能。

3.1

Honeycomb(蜂巢) :2011年5月11日布发布。

主要更新:

经过优化的Gmail电子邮箱 ;全面支持Google Maps ;将Android手机系统跟平板系统再次合并从而方便开发者;任务管理器可滚动,支持USB输入设备(键盘、鼠标等) ;支持Google TV。可以支持XBOX 360无线手柄;widget支持的变化,能更加容易的定制屏幕widget插件。

3.2

Honeycomb(蜂巢):2011年7月13日发布。

主要更新:

支持SD卡;支持7英寸平板和高通处理器;桌面小部件自由缩放。

4.0

Ice Cream Sandwich(冰激凌三明治):2011年10月19日上午十点,谷歌三星联手在中国香港举办发布会,公布有关Android 4.0系统信息。

版本主要更新如下:

全新的UI;全新的Chrome Lite浏览器,有离线阅读,16标签页,隐身浏览模式等;截图功能;更强大的图片编辑功能;自带照片应用堪比Instagram,可以加滤镜、加相框,进行360度全景拍摄,照片还能根据地点来排序;Gmail加入手势、离线搜索功能,UI更强大;新功能People:以联系人照片为核心,界面偏重滑动而非点击,集成了Twitter、Linkedin、Google+等通讯工具。有望支持用户自定义添加第三方服务;新增流量管理工具,可具体查看每个应用产生的流量,限制使用流量,到达设置标准后自动断开网络。

4.1

Android 4.1Jelly Bean(果冻豆)2012年6月28日发布。

新特性:

更快、更流畅、更灵敏;特效动画的帧速提高至60fps,增加了三倍缓冲;增强通知栏;全新搜索;搜索将会带来全新的UI、智能语音搜索和Google Now三项新功能;桌面插件自动调整大小;加强无障碍操作;语言和输入法扩展;新的输入类型和功能;新的连接类型。

4.2

Android 4.2Jelly Bean(果冻豆)2012年10月30日发布。

Android 4.2沿用“果冻豆”这一名称,以反映这种最新操作系统与Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具体如下:

Photo Sphere全景拍照功能;键盘手势输入功能;改进锁屏功能,包括锁屏状态下支持桌面挂件和直接打开照相功能等;可扩展通知,允许用户直接打开应用;Gmail邮件可缩放显示;Daydream屏幕保护程序;用户连点三次可放大整个显示屏,还可用两根手指进行旋转和缩放显示,以及专为盲人用户设计的语音输出和手势模式导航功能等;支持Miracast无线显示共享功能;Google Now现可允许用户使用Gamail作为新的数据来源,如改进后的航班追踪功能、酒店和餐厅预订功能以及音乐和电影推荐功能等。

4.3

2013年7月25日发布。

4.4

Android 4.4KitKat(奇巧巧克力): 2013年下半年发布。

2013年9月4日凌晨,谷歌对外公布了Android新版本Android 4.4KitKat(奇巧巧克力),并且于2013年11月01日正式发布,新的4.4系统更加整合了自家服务,力求防止安卓系统继续碎片化、分散化。

5.0

Android 5.0Lollipop(棒棒糖):2014年6月26日发布。

Android 5.0 系统使用一种新的Material Design设计风格。从图片上就能看到一些全新的设计。从图片上看,这套设计图对 Android 系统的桌面图标及部件的透明度进行的稍稍的调整,并且各种桌面小部件也可以重叠摆放。虽然调整桌面部件透明度对 Android 系统来说并不算什么新鲜的功能,但是加入了透明度的改进。界面加入了五彩缤纷的颜色、流畅的动画效果,呈现出一种清新的风格。采用这种设计的目的在于统一 Android 设备的外观和使用体验,不论是手机、平板还是多媒体播放器。

5.1

Android 5.1新系统相对于Android5.0更加稳定了,同时支持多张SIM卡,加强了设备保护机制,增强了设备的WiFi能力。

6.0

Android 6.0Marshmallow(棉花糖):2015年9月30日

新系统的整体设计风格依然保持扁平化的Material Design风格。Android6.0在对软件体验与运行性能上进行了大幅度的优化。据测试,Android6.0可使设备续航时间提升30%。

7.0

Android 7.0Nougat(牛轧糖):2016年8月22日

Android 7.0 提供新功能以提升性能、生产效率和安全性。通过新的系统行为测试您的应用,以节省电量和内存。充分利用多窗口 UI、直接回复通知等功能。

7.1

Android 7.1更新为用户和开发人员引入了各种新功能。

快捷方式

您可以使用新的快捷方式功能将用户从启动器直接带入应用程序内的关键操作。用户只需长按应用程序的启动器图标以显示应用程序的快捷方式,然后点击快捷方式即可跳至相关的操作。这些快捷方式是吸引用户的好方法,它们使您甚至在用户启动应用程序之前也可以展示应用程序的功能。

每个快捷方式都引用一个意图,每个意图都会启动一个特定的动作或任务,并且您可以为可以表示为意图的任何动作创建一个快捷方式。例如,您可以创建用于发送新短信,进行预订,播放视频,继续游戏,加载地图位置等等的意图。

您可以通过将应用程序快捷方式添加到APK中的资源文件中来为其静态创建快捷方式,也可以在运行时动态添加它们。静态快捷方式是常见操作的理想选择,动态快捷方式使您可以根据用户的偏好,行为,位置等突出显示操作。每个应用程序中最多可以提供五个快捷键。但是请注意,某些启动器应用程序不会显示您为应用程序注册的所有快捷方式。

您的应用添加快捷方式后,便可以在任何支持它们的启动器上使用它们,例如Pixel启动器(Pixel设备上的默认启动器),Now启动器(Nexus设备上的默认启动器)以及其他提供支持的启动器。

任何应用程序都可以创建快捷方式,任何启动器应用程序都可以添加对快捷方式的支持。Android 7.1提供了一个API,供应用程序注册快捷方式和启动程序读取已注册的快捷方式。

7.1 屏幕截图

8.0

Android 8.0Oreo(奥利奥):2017年8月22日发布。

Android 8.0 奥利奥

更智能、更快速、功能更强大。您喜爱的新 Android 版本以全球人都爱的一款曲奇饼为代号。

新功能:画中画 通知圆点 通知渠道 自动填充框架 自动调整 TextView 的大小 可下载字体 自适应图标 快捷方式固定 广色域色彩 WebView 功能 Java 8 语言 API 媒体功能 多显示器支持 Neural Networks API Android Oreo(Go 版本)

8.1

Android 8.1 功能和 API

Android 8.1(API 级别 27)为用户和开发者引入了各种新功能。

Android 8.1 Go是一项旨在为全球数十亿网络用户优化 Android 体验的计划。从 Android 8.1 开始,我们就在将 Android 打造成入门级设备的理想平台。Android Oreo(Go 版本)配置中的功能包括:

  • 内存优化。改进了整个平台的内存使用情况,可确保应用可以在内存不超过 1GB 的设备上高效运行。

  • 灵活的定位选项。新的硬件功能常量,可让您通过 Google Play 向正常内存或低内存设备分发应用。

  • Google Play。尽管所有应用都可以在搭载 Android Oreo(Go 版本)的设备上使用,但 Google Play 仍会按照“为数十亿用户打造产品”指南展示经过开发者专门优化的应用,以便为数十亿用户提供出色的体验。

我们更新了“为数十亿用户打造产品”指南,加入了有关如何针对搭载 Android Oreo(Go 版本)的设备优化应用的指导。对于大多数开发者来说,优化现有的 APK,或使用 Google Play 的多 APK 功能将某个 APK 版本定位到低内存设备,是针对搭载 Android Oreo(Go 版本)的设备做好准备的最佳方式。请注意,无论您的受众使用何种设备,将应用打造得更加纤巧高效都对他们有益。

9.0

Pie (派):2018年5月9日发布。

通知栏样式更改,整体设计添加了更多圆形。

Android 9 利用人工智能技术,让手机可以为您提供更多帮助。现在,手机变得更智能、更快,并且还可以随着您的使用进行调整。

10.0

从 Android 10 开始,Google 开始提供系统级的黑暗模式,大部分预装应用、抽屉、设置菜单和 Google Feed 资讯流等界面和按钮,都会变成以黑色为主色调,就和你在 macOS Mojave 中看到的暗色界面一样。为确保用户隐私和安全支持新的保护措施。借助高性能编解码器、更出色的生物识别技术、更快的应用启动速度、Vulkan 1.1、NNAPI 1.2、可折叠设备和 5G 等更多功能扩展!

谷歌宣布Android系统的重大改变,不仅换了全新的logo,命名方式也变了,2019年的Android Q的正式名称是Android 10。 

11

2019年10月11日消息,据外媒报道,2019年Android开发峰会将于本月晚些时候开幕,谷歌公布了完整的会议日程。在会议日程中谷歌官方首次提到了Android 11。

此前外媒发现在AOSP中,谷歌已经启用了代号“Android R”。按照Android命名规则,Android R应该就是下一代Android:Android 11。

由于疫情原因,谷歌宣布取消线下的开发者大会,后来又取消了线上开发者大会,所以Android 11 将在2020年第三季度发布

Android 11 开发者预览版计划从 2020 年 2 月启动,到向 AOSP 和 OEM 提供最终的公开版本时结束,最终版本预计将于 2020 年第 3 季度发布。在开发阶段的各个关键里程碑,我们将为您的开发和测试环境提供更新。每次更新均包括 SDK 工具、系统映像、模拟器、API 参考和 API 差异。

体系架构

Android的系统架构和其操作系统一样,采用了分层的架构。

从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

应用程序

Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的

应用程序框架

开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。

隐藏在每个应用后面的是一系列的服务和系统,其中包括:

  • 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons), 甚至可嵌入的web浏览器。
  • 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据
  • 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。
  • 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息
  • 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能

系统运行库

Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:

* 系统 C 库 - 一个从BSD继承来的标准C系统函数库 Libc, 它是专门为基于Embedded linux的设备定制的

* 媒体库 - 基于PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG 。

* Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。

* LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

系统结构

系统内核

Android 是运行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 Userspace,使得Linux driver 与 Linux kernel彻底分开。Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。

Android 的 Linux kernel控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具 Repo来初始化源码。Repo 是 Android 用来辅助Git工作的一个工具。

硬件抽像层

Android 的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL 的目的是为了把 Android framework 与 Linux kernel 隔开,让 Android 不至过度依赖 Linux kernel,以达成 Kernel independent 的概念,也让 Android framework 的开发能在不考量驱动程序实现的前提下进行发展。

HAL stub 是一种代理人(Proxy)的概念,Stub 是以 *.so 档的形式存在。Stub 向 HAL“提供”操作函数(Operations),并由 Android runtime 向 HAL 取得 Stub 的Operations,再 Callback 这些操作函数。HAL 里包含了许多的 Stub(代理人)。Runtime 只要说明“类型”,即 Module ID,就可以取得操作函数。

中介软件

操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari 浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。

Android采用OpenCORE作为基础多媒体框架。Open CORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

Android 使用skia 为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo,skia 功能还只是雏形的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,Skia 也是Google Chrome 的图形引擎。

Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。

Android的中间层多以Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

Dalvik虚拟机可以有多个实例(Instance), 每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik 虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。

安全权限机制

Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。

系统更多的安全功能通过权限机制提供。权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。

Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。

安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。从用户角度看,一款Android应用通常会要求如下的权限:

拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。

一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。

应用组件

Android开发四大组件分别是:活动(Activity): 用于表现功能服务(Service): 后台运行服务,不提供界面呈现广播接收器(BroadcastReceiver):用于接收广播内容提供商(Content Provider): 支持在多个应用中存储和读取数据,相当于数据库

活动

Android 中,Activity是所有程序的根本,所有程序的流程都运行在Activity 之中,Activity可以算是开发者遇到的最频繁,也是Android 当中最基本的模块之一。在Android的程序当中,Activity 一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页。在Activity 当中可以添加一些Button、Check box 等控件。可以看到Activity 概念和网页的概念相当类似。

一般一个Android 应用是由多个Activity 组成的。这多个Activity 之间

可以进行相互跳转,例如,按下一个Button按钮后,可能会跳转到其他的Activity。和网页跳转稍微有些不一样的是,Activity 之间的跳转有可能返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 运行结束的时候,有可能会给Activity A 一个返回值。这样做在很多时候是相当方便的。

当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

服务

Service 是android 系统中的一种组件,它跟Activity 的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,这个时候若想上网了,那么,打开Android浏览器,这个时候虽然已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。其实这个播放就是由播放音乐的Service进行控制。当然这个播放音乐的Service也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。Service 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD 卡上文件的变化,再或者在后台记录地理信息位置的改变等等,总之服务嘛,总是藏在后头的。

开启Service有两种方式:

(1) Context.startService():Service会经历onCreate -> onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次 );StopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用StopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者StopSelf(),他都会被停止。补充说明:传递给StartService()的Intent对象会传递给onStart()方法。调用顺序为:onCreate --> onStart(可多次调用) --> onDestroy。

(2) Context.bindService():Service会经历onCreate() -->onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Service就会调用onUnbind --> onDestroyed相应退出,所谓绑定在一起就共存亡了。

广播接收器

在Android 中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver 是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以使用BroadcastReceiver 来让应用对一个外部的事件做出响应。这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用BroadcastReceiver 进行处理。例如,当下载一个程序成功完成的时候,仍然可以利用BroadcastReceiver 进行处理。BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。BroadcastReceiver通过NotificationManager 来通知用户这些事情发生了。BroadcastReceiver 既可以在AndroidManifest.xml 中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast () 将它们自己的Intent Broadcasts广播给其他应用程序。

内容提供

Content Provider 是Android提供的第三方应用数据的访问方案

在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。Android当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类, 封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST 更为灵活。和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。

平台优势

开放性

在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。

开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。同时也可以通过一些第三方优化过的系统通过刷机来实现更好的用户体验,如MIUI,Flyme等。

丰富的硬件

这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。

方便开发

Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。

Google应用

在互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。

转自:百度百科-验证

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fuhanghang/article/details/106028719

智能推荐

容器三把斧之 | cgroup原理与实现_struct list_headtasks;-程序员宅基地

文章浏览阅读1.6k次,点赞5次,收藏12次。前面我们介绍了CGroup的使用与基本概念,接下来将通过分析源码(本文使用的 Linux2.6.25 版本)来介绍CGroup的实现原理。在分析源码前,我们先介绍几个重要的数据结构,因为CGroup就是通过这几个数据结构来控制进程组对各种资源的使用。cgroup结构体前面介绍过,cgroup是用来控制进程组对各种资源的使用,而在内核中,cgroup是通过cgroup结构体来描述的,我们来看看其定义:structcgroup{unsignedlongfla..._struct list_headtasks;

SpringMVC初认识_兔头程序员-程序员宅基地

文章浏览阅读164次。SpringMVCMVC1. 什么是MVC?MVC是一种框架模式,是Model View Controller(模型-视图-控制器)的缩写。Model 模型数据模型,提供要展示的数据,用于封装数据View 视图展示数据Controller 控制器控制模型的数据要在哪一个视图展示2. 作用MVC模式使展示与模型分离,流程控制逻辑、业务逻辑调用与展示分离。最终实现系统的职能分工。3. 优缺点优点耦合性低重用性高生命周期成本低部署快可维护性高有利于软件工程化管理_兔头程序员

Svchost.exe进程详解及Svchost.exe病毒清除方法_svchost.exe -k rpcss-程序员宅基地

文章浏览阅读2.3w次,点赞3次,收藏18次。这几天在宿舍上网的时候其他的舍友反映网络特别的卡。不知道是什么原因。然后我就发现自己的电脑有一个程序,自己走流量而且每秒能达100kb以上对于宿舍8个人共用的一个4M的网线来说已经算是占了好大一部分网速了。在金山流量监控上发现这个程序叫Svchost.exe。这是一个什么程序呢。然后我就尝试禁用。但我发现win7的任务管理器的进程中是找不到这个进程的。然后我通过上网了解了这个进程。 s_svchost.exe -k rpcss

java中修改对象类的数据_Java基础09 类数据与类方法-程序员宅基地

文章浏览阅读728次。我们一直是为了产生对象而定义类(class)的。对象是具有功能的实体,而类是对象的类型分类。这是面向对象的一个基本概念。在继承(inheritance)中,我们将类当做可以拓展的主体,这提高了我们对“类”的认识。类本身还有许多值得讨论的地方。我们将继续深入。static数据成员有一些数据用于表述类的状态。比如Human类,我们可以用“人口”来表示Human类的对象的总数。“人口”直接描述类的状态,..._java中如何用方法来改变一个类的值

hdu 2066:一个人的旅行_输入数据:每组的第一行是三个整数t,s和d,表示有t条路,和去往临近城市高铁站、火车-程序员宅基地

文章浏览阅读448次。草儿决定要在最短的时间去一个自己想去的地方,因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车。多组输入数据,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=接着的第T+1行有S个数,表示和草儿家相连的城市;接着的第T+2行有D个_输入数据:每组的第一行是三个整数t,s和d,表示有t条路,和去往临近城市高铁站、火车

java统计字符串中每个字符出现的次数_java string 统计某个字符出现的次数-程序员宅基地

文章浏览阅读6.3w次,点赞33次,收藏76次。例如String str = “abcaaaefdabbhg”; 统计该字符串中每个字符出现的次数,输出: a====5 b====3 c====1 d====1 e====1 f====1 g====1 h====1方法一: 采用HashMappublic static void count(String str){ //将字符串转化为字符数组_java string 统计某个字符出现的次数

随便推点

python 数据存储方式_数据存储是什么python-程序员宅基地

文章浏览阅读1.9k次。blog.csdn.net/ffblog/article/details/46558051一.序列1.用于存储一系列的数据2.在内存中,序列就是一块用于存放多个值的连续的内存空间如a=[10,20,30,40]存储示意:3.python中序列结构:str,list,tuple,dict,set..._数据存储是什么python

【语音去噪】IIR+FIR滤波器语音信号去噪(含滤波前后对比图)【含Matlab源码 4062期】-程序员宅基地

文章浏览阅读354次,点赞4次,收藏4次。IIR+FIR滤波器语音信号去噪(含滤波前后对比图)完整的代码,包运行;运行操作视频见CSDN资源!适合小白!

Tensorflow-hub[例子解析1]-程序员宅基地

文章浏览阅读364次。0. 引言Tensorflow于1.7之后推出了tensorflow hub,其是一个适合于迁移学习的部分,主要通过将tensorflow的训练好的模型进行模块划分,并可以再次加以利用。不过介于推出不久,目前只有图像的分类和文本的分类以及少量其他模型这里先通过几个简单的例子,来展示该hub的使用流程。1. 一个超简单例子1.1 创建一个Module#该文件名为half_plus_two..._tensorflow hub、py

Linux利用重定向三步搞定请求百度主页源代码_linux socket 访问百度-程序员宅基地

文章浏览阅读1.4k次。Linux利用重定向三步搞定请求百度主页源代码第一步:新建文件描述符,简历与百度通信的socket通道exec 8<> /dev/tcp/www.baidu.com/80命令解释:8:新建的文件描述符<>:既要发送请求,又要接收响应数据/dev/tcp:这个目录看不到,但内核确实有一旦执行该命令,就会新建一个socket连接删除文件描述符:..._linux socket 访问百度

C primer plus(第六版) 第七章答案_第七章单元测试提交作业6. 单选题(2分)下图中哪个点是最小方差点?( )。a点cb-程序员宅基地

文章浏览阅读7.1k次,点赞21次,收藏19次。C primer plus(第六版) 第七章答案/* 第一题 */#include<stdio.h>#define SPACE ' 'int main(void){ int count_space = 0; int count_line_break = 0; int count_others = 0; int ch; printf("Please pu..._第七章单元测试提交作业6. 单选题(2分)下图中哪个点是最小方差点?( )。a点cb

Ubuntu:显存占用及处理_ubuntu root图形界面占显存-程序员宅基地

文章浏览阅读2.7k次。问题在进行深度学习时,显存是一种非常宝贵的资源。但是即便在Ubuntu下,各种各样的系统配置都会不自觉的占用一些显存,导致深度学习难以为继。在本博客中,主要搬运一些查询显存占用原因及处理方法。翻译来源链接https://unix.stackexchange.com/questions/591393/how-to-shift-process-from-gpu-to-cpu-usagehttps://askubuntu.com/questions/1220144/can-somebody-explai_ubuntu root图形界面占显存

推荐文章

热门文章

相关标签