NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

你的代码是干的还是湿的?

敏捷开发

项目管理 敏捷开发 代码 代码人生 bug管理

9 年蝉联 IM 第一!艾瑞咨询发布最新报告,融云持续引领专业通信云行业

融云 RongCloud

融云荣获 ToB 行业头条「实力先锋企业」

融云 RongCloud

“敏捷教练进阶课程”2024年4月26-27日 · A-CSM认证在线

ShineScrum捷行

详解从ERP传到MES系统的数据

万界星空科技

系统集成 ERP 生产管理系统 mes

阿里云首个 AI 员工入职,围观开发工程师使用反馈

阿里云云效

阿里云 Serverless 云原生 通义灵码

阿里云首个 AI 员工入职,围观开发工程师使用反馈

阿里巴巴云原生

阿里云 AI 云原生 通义灵码

《射雕》热度不减!英特尔锐炫A750亮眼帧率展现高性价比优势!

E科讯

避雷指南:11个常见 Kubernetes 误区详解

SEAL安全

Kubernetes 容器 云原生

Disk Drill for Mac(数据恢复软件)v5.5.1515中文激活版

影影绰绰一往直前

GroupsPro for Mac(通讯录和邮件管理)v5.5.2激活版

影影绰绰一往直前

AI数字人系统源码部署--赋能企业品牌推广!

青否数字人

数字人

不惜血本、重金打造的数据平台为何效果平平?

feng

数据平台 企业数据化运营

阿里云ACK One GitOps:轻松实现多团队多集群应用交付

阿里巴巴云原生

阿里云 云原生 容器服务

有手就会?记一次绕过防重放的漏洞挖掘

权说安全

漏洞挖掘

MWeb Pro for mac(好用的博客生成编辑器)v4.5.9中文激活版

影影绰绰一往直前

JetBrains DataSpell for mac(数据科学家的IDE)v2024.1中文激活版

影影绰绰一往直前

JetBrains PhpStorm 2024 for Mac(PHP集成开发)v2024.1中文激活版

影影绰绰一往直前

目前拉萨等保测评公司有几家?在哪里?

行云管家

等保 等保测评 拉萨

开源语言大模型

百度开发者中心

人工智能 机器学习 大模型

硬件标准化之道:Linux社区与硬件厂商的协同创新

GousterCloud

硬件 Linux Kenel 设备

行云绽放与瀚高完成兼容性认证,携手推进国产化进程

行云管家

信创 堡垒机 国产化 瀚高

万界星空科技MES系统对生产追溯的好处

万界星空科技

生产管理系统 mes 万界星空科技 生产追溯 追溯管理

LLama2大模型指令微调实操:解锁AI生成文本的新境界

百度开发者中心

人工智能 机器学习 大模型 llama2

怎么用OpenAI Sora?最全分析-新手小白必看

蓉蓉

openai ChatGPT sora

一站式解读多模态——Transformer、Embedding、主流模型与通用任务实战(上)

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 多模态 多模态学习

ChatGPT加持,需求分析再无难题

测试人

人工智能 软件测试 ChatGPT

PullTube for Mac(在线视频下载器)v1.8.5.31中文激活版

影影绰绰一往直前

DevOps已死?2024年的DevOps将如何

禅道项目管理

程序员 DevOps 自动化测试 知识分享

JetBrains pycharm pro 2024 for mac(Python编辑开发)v2024.1中文激活版

影影绰绰一往直前

ChatGPT加持,需求分析再无难题

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

测试

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