社区讨论:Android的架构设计

标签: 社区 android 架构 | 发表时间:2012-07-31 22:07 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

最近,开发者在知乎社区中就Android的架构设计展开了 讨论

有人问“Android 架构设计的思想与原则是什么?”:

最近工作中遇到了Android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管就相当严格,限制做很多事情,这一点得益于Linux内核。这也勾起来对其架构研究的兴趣,不知到哪位能够深度剖析下Android架构设计的思想与原则?

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是开源的,不过开源不意味着可以乱来,开源只是告诉你我是怎么做的,至于为什么这么做,就是另外一个问题了。任何一个系统如果没有权限管理,那不是乱套了么?我倒是觉得Android的权限管理设计的还不错,有些地方比iOS好,也较灵活,不过同样是因为这一点,容易被利用。

说到Android架构的设计思想和原则,按我的理解主要是组件搭配,即在用户看来,所有的module或者组件,都是可以重复利用和简单组合的。想法是好的,不过有得必有失,或者说Android现在做的还不够好,在性能方面是很低的,否则的话Android也不会推出补丁(NDK之类的,dalvik的不断升级)。

我觉得所有Framework或者平台或者语言都想给应用开发者最方便使用的接口,最人性化的体验,同时又要争取最大的性能,两者权衡折中吧。不过随着硬件速度的飞速增长,性能的权重会变低。

范怀宇还谈到了资源体系:

Android架设在Linux之上,因此,继承了Linux可移植性、用户管理机制、文件系统,等等。

Android的核心在Framework层,本质上,这是一个基于组件的应用开发系统,组件间通过消息(Intent)进行通信。一方面,Intent是通信信息的载体,另一方面,Intent也定义了Android组件的通信协议。

Android可以对组件所运行的进程做托管,在Android中,进程概念相当薄弱。依赖于进程托管,Android可以轻松支撑多任务多进程的应用模型。

除了组件,资源体系也是Android中比较特色的一块,它提供了完整的资源支持,可以用来描述一切与UI相关的内容,并实现多设备的适配。

InfoQ的读者对Android的架构有何理解?欢迎发表自己的看法。

崔康 热情的技术探索者,资深软件工程师,InfoQ编辑,从事企业级Web应用的相关工作,关注性能优化、Web技术、浏览器等领域。

相关 [社区 android 架构] 推荐:

社区讨论:Android的架构设计

- - InfoQ cn
最近,开发者在知乎社区中就Android的架构设计展开了 讨论. 有人问“Android 架构设计的思想与原则是什么. 最近工作中遇到了Android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管就相当严格,限制做很多事情,这一点得益于Linux内核. 这也勾起来对其架构研究的兴趣,不知到哪位能够深度剖析下Android架构设计的思想与原则.

Android 系统架构分析

- - CSDN博客移动开发推荐文章
Android:开源的 Linux + Google 的封闭软件 + 私有的基带 + 运营商锁定 = 开放的 Android 手机. iPhone:开源的 BSD + 苹果的闭源软件 + 私有的基带 + 运营商锁定 = 封闭的苹果 iPhone. 一个平庸的应用商店,开发者依靠广告赚钱,商店并非独此一家,用户找不到好软件.

Android 架构演化之路

- - 移动开发 - ITeye博客
关注微信号:javalearns   随时随地学Java. 在开始之前, 我这里假设大家都读过了我之前用简洁的办法架构Android程序一文. 如果你还没有读过, 现在应该去读一下那篇文章, 读过之后可以更好的理解我下面要讲的内容.. 演化是指一个事物变化成为另一个不同的事物的一个平缓过程, 通常情况下会变得更加复杂或者变成更好..

[转载]【摘】SNS社区网站架构

- - 网站架构_搜搜博客搜索
  SNS网站:全称Social Network Site,就是依据六度理论建立的网站,也是基于社会网络关系建立的网站.   原本经济危机来了,FACEBOOK估值从150亿美金跌至40亿;国内互联网创投环境也日趋寒冷,而在舆论界,关于SNS的话题似乎热度未减,,当然在精彩文章之中也夹杂着一些隔靴搔痒式的讨论;.

安居客Android项目架构演进

- - SegmentFault 最新的文章
入职安居客三年从工程师到Team Leader,见证了Android团队一路走来的发展历程. 因此有心将这些记录下来与大家分享,也算是对自己三年来一部分工作的总结. 希望对大家有所帮助,更希望能得到大家宝贵的建议. 三年前入职时安居客在业务上刚完成了三网合并(新房、二手房、好租和商业地产多个平台多个网站合成现在的anjuke.com,这在公司的历史上称之为三网合并),因此app端也将原先的新房、二手房、好租和商业地产多个app合并成为了现在的安居客app.

有关京东商城采用.NET架构的社区讨论

- - InfoQ cn
​最近一段时间,随着双十一、双十二等优惠打折季的过去,有关电商网站的可靠性设计受到国内社区的热烈讨论. 在知名问答网站知乎上,有人提出了这样一个问题:“ 京东今天还在用.NET 架构的原因是什么. ”,半年来得到了许多技术圈内人士的回复,其中不乏有意思的内容,对读者朋友很有启发作用. 我们简单的对精华回复进行下分类.

Android层次化安全架构及核心组件概览

- - 酷勤网-挖经验 [expanded by feedex.net]
Android系统承袭了Linux开源操作系统的安全特性,并采用了层次化的方式来保证系统安全,本文将详细介绍Android层次化安全架构及其核心组件. Android层次化安全架构. Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application).

实战解析Android架构设计原则

- - 移动开发 - ITeye博客
关注微信号:javalearns   随时随地学Java. 经过一段时间收集了大量反馈意见后,我认为应该来说说这个话题了. 我会在这里给出我认为构建现代移动应用(Android)的好方法,这会是另一番体味. 开始之前,假设你已经阅读过我之前撰写的文章“ Architecting Android…The clean way ?”.

Android中的MVP架构分解和实现

- - IT瘾-geek
传统的Android开发架构一般是MVC模式,. Model:业务逻辑和实体模型. View:对应于布局文件. Controllor:对应于Activity. 单独从逻辑看起来非常好,与我们做Web开发时,开发模式类似,但在实际开发中,View对应于布局文件,实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,Activity既像View又像Controller(MVVP架构中包括数据绑定),导致Activity中职责太重,耦合度大.

掌握 Android 系统架构,看这一篇就够了!

- - IT瘾-jianshu
Android系统庞大且错综复杂,今天小编将带领大家初探Android系统整体架构,一窥其全貌. 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制. 虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰.