重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
rlei分析了Android的设计哲学:
创新互联公司专注于老河口企业网站建设,成都响应式网站建设,商城网站定制开发。老河口网站建设公司,为老河口等地区提供建站服务。全流程按需开发,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
理解好Intent,就可以理解Android哲学(所有应用生来平等)的一部分。举个简单的例子,iOS里面应用要集成SNS如facebook/twitter/sina weibo等,都需要应用自己实现(iOS5也只是集成twitter一家);Android上只需要广播一个share内容的intent。从理解Intent如何工作开始,你就在慢慢理解Activity Manager, Package Manager, Services这些Android的重要组件是如何工作的。
另外Binder是Android架构里非常核心的一块。Android基于Intent的消息传递和组件/应用解耦,下面的基础都是Binder IPC。在这一点上,Android实际上是光荣的传承了BeOS和Palm OS 6(悲催的OS6...)未能发扬光大的一部分。
MVC(Content Provider, Activity, Layout, Adapters)这个比较基础,也不算Android特有的。
Content Provider对数据访问的抽象也是比较有意思的一块。理想情况下,content provider可以让客户端用URI以语义化的方式访问数据(URI本身即表示数据层次结构和查询条件),而下面数据库表的结构可以任意变动,不影响客户端代码。当然实做的时候content provider还是会被各种复杂的where子句暴露出SQL的实现细节
至于Android的权限管理,其实比较简单,主要是利用现成的Linux安全模型,进程之间相互隔离。API级别的权限管理和JVM类似。
Billy Cui重点解析了权限系统的设计:
Android的权限系统是基于Linux,但又增加了很多自己的控制模块。
总体上来说,其分为以下几部分权限系统:
1. userid : 继承于linux,对于多个app,通过shareuid的方式可以使用同一个userid,主要承担一些目录访问权限之类的工作,比如私有目录只能由同一uid应用访问。
2. 安装level:system level or app level,这个是根据应用的安装位置决定的,在system/app下安装的应用就是system level,在权限访问中会得到更多的权限,比如静默安装应用的权限等。
3. permission : 这个是最主要的权限控制,一般开发者开发应用主要是接触这个部分,在这部分中,会根据应用在AndroidManifest.xml中声明的use-permission而在访问相应api或资源时判断其是否有访问权限,比如常用的android.permission.INTERNET等。
4. signature: 签名,是Android权限系统中的重要组成部分,对于系统签名的应用,会有一些特殊的功能,而shareuid等特性也是需要同一签名作为基础。此外,permission在设置/自定义其权限时也经常会使用到签名,比如控制只有我自己的应用才可以访问我自己定义的公开API。
除此以外,其实Android在uid的里面设置了一些预定义有特殊功能的uid,比如system/media等,在配置其system level的services的时候会用到。
董兆辉则认为Android主要是基于组件搭配思想:
说到Android架构的设计思想和原则,按我的理解主要是组件搭配,即在用户看来,所有的module或者组件,都是可以重复利用和简单组合的。想法是好的,不过有得必有失,或者说Android现在做的还不够好,在性能方面是很低的,否则的话Android也不会推出补丁(NDK之类的,dalvik的不断升级)。
我觉得所有Framework或者平台或者语言都想给应用开发者最方便使用的接口,最人性化的体验,同时又要争取最大的性能,两者权衡折中吧。不过随着硬件速度的飞速增长,性能的权重会变低。
范怀宇还谈到了资源体系:
Android架设在Linux之上,因此,继承了Linux可移植性、用户管理机制、文件系统,等等。
Android的核心在Framework层,本质上,这是一个基于组件的应用开发系统,组件间通过消息(Intent)进行通信。一方面,Intent是通信信息的载体,另一方面,Intent也定义了Android组件的通信协议。
Android可以对组件所运行的进程做托管,在Android中,进程概念相当薄弱。依赖于进程托管,Android可以轻松支撑多任务多进程的应用模型。
Android的系统架构和其操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
一、应用程序
Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
二、应用程序框架
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。
三、系统运行库
Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。
四、Linux内核层
Android内核是基于Linux 内核的修改的内核版本,它提供了用于支持Android平台的设备驱动。
android系统架构分从下往上为linux 内核层、运行库、应用程序框架层、和应用程序层
linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。
libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android网页浏览器的运行,例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发2dsgl和 3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等众多的多媒体文件格式。android的runtime负责解释和执行生成的dalvik格式的字节码。
applicationframework(应用软件架构),java应用程序开发人员主要是使用该层封装好的api进行快速开发。
applications:该层是java的应用程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放 器等处于该层,java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。
上面的四个层次,下层为上层服务,上层需要下层的支持,调用下层的服务,这种严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发。
android应用程序使用框架的api并在框架下运行,这就带来了程序开发的高度一致性,另一方面也告诉我们,要想写出优质高效的程序就必须对整个 applicationframework进行非常深入的理解。精通applicationframework,你就可以真正的理解android的设计 和运行机制,也就更能够驾驭整个应用层的开发。