写点什么

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

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

关注

评论

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

冲呀!Kotlin-Jetpack-实战之Kotlin-高阶函数!,android初级面试题2018

android 程序员 移动开发

超大规模天线还能给5G带来什么?

脑极体

公司倒闭,面试被怼,闭关2个月拿下头条offer,flutter整合百度地图sdk

android 程序员 移动开发

关于大厂Android面试必问的事件分发机制,应该没有比这篇讲的更好的了

android 程序员 移动开发

写代码还是做管理?安卓开发者的困扰,androidstudio记事本开发教程

android 程序员 移动开发

你确定自己学会了自定义MarqueeView?这个你会吗?进来看看吧

android 程序员 移动开发

使用Google开源库AutoService进行组件化开发,移动应用开发课程设计心得

android 程序员 移动开发

八年老Android开发谈:垃圾中的战斗机,offer都发了,Android大厂面试真题解析大全

android 程序员 移动开发

关于Handler同步屏障你可能不知道的问题,已获万赞

android 程序员 移动开发

使用更为安全的方式收集 Android UI 数据流,深入浅出Android

android 程序员 移动开发

做了6年Android开发,你会的还只有初级工程师的技术吗?

android 程序员 移动开发

全网唯一一份,从入门到精通的Android进阶学习笔记整理,Android应用层

android 程序员 移动开发

质量基础设施一站式服务平台,NQI云服务平台搭建

电微13828808271

写给互联网大厂员工的真心话:2020年,别瞎折腾,企业移动应用开发

android 程序员 移动开发

八年老Android开发谈:垃圾中的战斗机,offer都发了(1)

android 程序员 移动开发

使用 Flutter 快速实现聊天应用,计算机移动应用开发

android 程序员 移动开发

做android开发一直不相信35岁危机,好像被自己遇到了,9次Android面试经验总结

android 程序员 移动开发

做个酷炫的“锤子” 开关效果,kotlinwindows桌面开发

android 程序员 移动开发

全网热议:Android 在未来是否会走向终结?,android路由实现

android 程序员 移动开发

使用 Kotlin API 实践 WorkManager,看完豁然开朗

android 程序员 移动开发

八年Android开发,从码农到架构师分享我的技术成长之路,共勉(1)

android 程序员 移动开发

六年 Android 开发的涨薪之路,从15K涨到30K的面试解析

android 程序员 移动开发

关于拼多多被曝删除用户本机照片的一点想法,flutter弹窗页面缩小

android 程序员 移动开发

再见!onActivityResult!你好,看完你还觉得算法不重要

android 程序员 移动开发

冲刺金三银四:Android即将迎来面试高峰期,掌握这四步离你理想的岗位不远了

android 程序员 移动开发

使用C#创建,查看,2021大厂Android面试题精选

android 程序员 移动开发

全面解析Android事件分发机制:一篇足矣!,Alibaba高并发业务实战文档

android 程序员 移动开发

区块链赋能“双碳”战略,为绿色发展提供强劲动力!

CECBC

内存优化(二),kotlin协程原理

android 程序员 移动开发

做了三年Android,公司发不出工资了,怎么办,阿里、腾讯大厂Android面试必问知识点系统梳理

android 程序员 移动开发

八年Android开发,从码农到架构师分享我的技术成长之路,共勉

android 程序员 移动开发

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