50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

社区讨论: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:076228
用户头像

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

关注

评论

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

ChatGPT编程秀-2:最小元素的设计

仝键

JavaScript 编程 架构 java ChatGPT

提升用户体验与搜索引擎排名|网页性能监控实操详解

云智慧AIOps社区

监控 监控管理平台 监控宝 网站优化 网站监控

业界数据库工具结合 ChatGPT 的(不完全)汇总

Bytebase

人工智能 数据库 dba ChatGPT

定位任意时刻性能问题,持续性能分析实践解析

阿里巴巴中间件

阿里云 云原生 可观测

时不我待,拥抱趋势,开源IM项目OpenIM技术简介

Geek_1ef48b

远程桌面连接有哪些方式?远程桌面工具推荐

RayLink远程工具

远程桌面连接 远程桌面工具

远程办公模式开启,该如何选择合适的办公软件?

RayLink远程工具

远程办公 远程协助 远程办公软件

什么是远程桌面?远程桌面软件是如何进行连接工作的?

RayLink远程工具

远程桌面连接 远程桌面工具 远程桌面软件

2023 年最佳免费远程控制软件RayLink-远程办公必备

RayLink远程工具

远程控制软件 远程办公软件

内网渗透之某后渗透利用

网络安全学海

黑客 网络安全 安全 信息安全 渗透测试

远程桌面连接如何设置?远程桌面连接的设置方法

RayLink远程工具

远程桌面连接

什么是远程控制软件?远程控制软件推荐

RayLink远程工具

远程控制软件

华为Mate X3震撼发布!轻薄折叠屏携华为阅读带来全新精品阅听体验

最新动态

电脑怎么远程连接服务器?如何进行远程桌面连接?

RayLink远程工具

远程桌面连接

低代码实现探索(五十七)脚本模板模式的生成

零道云-混合式低代码平台

远程桌面和远程协助的区别,选择哪个方式连接更好?

RayLink远程工具

远程协助 远程桌面连接

Securtiy Code Reviewer 需要做些什么?6个安全实例一探究竟

极狐GitLab

DevOps Code Review 代码质量 代码安全 代码评审

如何远程控制电脑,远程控制电脑的设置方法

RayLink远程工具

远程控制连接 远程控制电脑

远程控制软件如何实现两台电脑连接

RayLink远程工具

远程控制软件

华为春季发布会召开,旗舰新品全面支持空间音频

最新动态

免费的远程控制软件有哪些?远程控制软件哪个好用?

RayLink远程工具

远程控制软件 远控软件

远程控制软件RayLink助力畅玩爆火双人游戏

RayLink远程工具

远程控制软件

GPT-4正刮起新的生成式AI风暴

澳鹏Appen

人工智能 ChatGPT GPT-4

大数据分析工具Power BI(六):DAX表达式简单运用

Lansonli

大数据分析工具Power BI

紧跟潮流,抓住趋势,跟上全民AI的节奏,开源IM项目OpenIM产品介绍,为AIGC贡献力量

Geek_1ef48b

官宣|Apache Flink 1.17 发布公告

Apache Flink

大数据 flink 实时计算

GTC 2023的算力协奏曲,NVIDIA与宁畅“共舞”AI时代

脑极体

算力

远程桌面连接是什么?远程桌面连接使用教程

RayLink远程工具

远程桌面无法连接远程计算机是什么原因?

RayLink远程工具

远程桌面连接 远程桌面

【必看答疑】为什么我的电脑远程连接不上?

RayLink远程工具

远程桌面连接

好用的远程控制桌面连接工具有哪些?

RayLink远程工具

远程桌面连接

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