写点什么

社区讨论:Android 的架构设计

  • 2012-07-31
  • 本文字数:1967 字

    阅读完需:约 6 分钟

最近,开发者在知乎社区中就 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 的架构有何理解?欢迎发表自己的看法。

2012-07-31 09:076025
用户头像

发布了 501 篇内容, 共 267.4 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

创新涌动于先丨2023 PingCAP 用户峰会等你来!

PingCAP

数据库 TiDB pingCAP 平凯星辰 用户峰会

用好支付宝小程序云云开发,告别繁琐的小程序开发流程

TRaaS

小程序 支付宝小程序

社交泛娱乐全球化,看融云出海如何助力玩法创新催生长线黑马?

融云 RongCloud

音视频 融云 泛娱乐 出海 通讯

九科信息亮相第三届中国(深圳)天使投资峰会

九科Ninetech

TRUNCATE 语句到底因何而慢?

爱可生开源社区

MySQL 源码 innodb TRUNCATE

JMeter笔记12 | JMeter集合点

测试 单元测试 Jmeter 性能测试 接口测试

Google Guava中 EventBus 导致线程阻塞

红袖添香

Java 多线程 EventBus

4 个月、2 万颗星,1 个恒纪元

Zilliz

非结构化数据 Milvus 大模型时代 向量数据库 zillizcloud

数字底座的连接集成加速数智企业互联互通

用友BIP

数智底座 数字底座 连接集成

霍格沃兹测试开发学社线下班开班啦!无offer返学费哦!

测吧(北京)科技有限公司

测试

70+页实战经验分享,《研发效能红宝书》重磅发布 | 附下载

思码逸研发效能

研发效能

软件测试 | 性能测试误区(二)

测吧(北京)科技有限公司

测试

基于OpenHarmony开发的玻璃拟态天气应用(1)项目介绍及项目的初始搭建

路北路陈

前端 HarmonyOS OpenHarmony应用开发 6 月 优质更文活动

沉浸式下载Niconico视频到手机相册,手残党们快快跟上!

frank

中国农发行的全面预算管理新举措

用友BIP

全面预算

一文读懂火山引擎A/B测试的实验类型(2)——可视化实验

字节跳动数据平台

A/B 测试

四行代码开启流计算之旅

吴英骏

数据库 开源 流计算 云原生 存储

2023-06-19:讲一讲Redis分布式锁的实现?

福大大架构师每日一题

redis 福大大架构师每日一题

Apache Doris 1.2.5 版本正式发布

SelectDB

数字非洲,沐光而行

脑极体

出海

OpenHarmony社区运营报告(2023年5月)

OpenHarmony开发者

OpenHarmony

JMeter笔记11 | JMeter事务

测试 Jmeter 性能测试 自动化测试 接口测试

合约交易所系统开发搭建流程

薇電13242772558

系统开发

KaiwuDB 受邀出席大型企业数字化转型峰会暨工赋山东济南峰会并发表演讲

KaiwuDB

KaiwuDB 数字化转型峰会

如何提升企业在全面预算中管理组织水平?

用友BIP

全面预算

数智人力:如何通过搭建全球人才供应链帮助企业海外扩张?

用友BIP

人力资源 数智人力

软件测试—性能测试的专业术语2

测吧(北京)科技有限公司

软件测试—性能测试的专业术语1

测吧(北京)科技有限公司

测试

软件测试 | 性能测试的种类有哪些?

测吧(北京)科技有限公司

测试

软件测试 | 性能测试的误区(一)

测吧(北京)科技有限公司

测试

社区讨论:Android的架构设计_Android/iOS_崔康_InfoQ精选文章