天天看点

android架构

韩超为我们讲述了依据linux内核、硬件抽象层、中间件、应用层接口等几个层次android系统中使用的各种技术。以及这些技术的来龙去脉和在android系统中的发展。深入剖析android对传统技术的继承和密切关系,并预估其下一步发展方向。

听众可从中理解android系统的技术架构,并了解android如何快速构建成一个开源的移动系统,并迅速向其他各个领域发展的原因。进一步介绍android系统第三方应用和设备层之间的安全机制,指出android开发过程中隐含的安全漏洞。了解到android开发过程的安全策略和应注意的问题。

韩超提到,android技术生态系统和安全可以从五个方面来分析:一、android的操作系统层;二、android的硬件抽象层、android的中间件和gui系统、android应用程层接口、android的安全性。

android的总体技术特点是,android系统的诞生给了嵌入式系统两大方面的突破:第一,android是一个完备的系统;二,android是一个提供了标准化接口的系统。

android的操作系统层

android的内核遵从标准linux的结构,其实android系统就是linux系统,只是android系统从分利用已有的机制,尽量使用标准化的内容,比如驱动程序,并且做出必要的扩展。 android灵活充分使用内核到用户空间的接口主要表现在字符设备节点、sys文件系统、proc文件系统和不增加系统调用。

android架构

android的操作系统层结构图

其中android的内核组件有:binder驱动程序(用户ipc机制)、logger驱动程序(用户系统日志)、timed_output驱动框架、timed_gpio驱动程序、lowmemorykill组件、ram_console组件、ashmem驱动程序、alarm驱动程序、pmem驱动程序、adb garget驱动程序、android paranoid网络。

android的硬件抽象层

android系统需要运行于再不通的硬件平台上,因此需要具有很好的可移植性。android的硬件抽象层负责android系统和硬件设备之间的联系。

自下而上经典的模型为linux驱动、android硬件抽象层、android本地框架、android的java框架、android的java应用程序。

android架构

android的硬件抽象层结构图

对于标准化比较高的子系统,android系统使用完全标准linux驱动,如输入设备(input-event)、电池信息(power supply)、无线局域网(wifi协议和驱动)、蓝牙(bluetooth协议和驱动)。

对于有linux标准驱动,但是各系统定义情况不同的子系统,可以选择标准驱动或自定义驱动,如显示(framebuffer)、背光和指示灯(led驱动)、警报器和时钟(rtc驱动)、音频(oss、alsa或类似驱动)、视频输出和照相机(v412)、gps和modem(tty)。

android的中间件和gui系统

android的中间件的特点是标准而小巧的c语言库,适用的基本系统(c工具库、init、uevent),纵贯全局的通信机制(属性、套结字、binder),重新实现的dalvik徐弩机,大量适用linux和java标准库,同时减少模块间的底层耦合性。

而android的gui系统中,java层能够实现结构化,本地层结合具体的硬件,有suface处理图层、skia-图形接口处理2d和opengl标准处理3d。

android应用程层接口

由于android设备和android应用程序可以独立开发,因此android应用层接口至关重要。android应用层接口的特点有:根据api级别的标准化接口(兼容性),java层的隐藏接口和非api接口可调用,可以使用jni调用本地程序,sdk提供标准化的本地库(兼容性),预置应用和第三方应用的权限不同。

java框架层和应用层的技术特点:机制和策略的互通,框架层统一管理资源,框架层提供上层“虚拟解耦合”的api,应用层按照包得形式独立存在,强制应用层具有“组件”结构,灵活的应用层插件系统。

android的安全性

android安全性的限制表现在,无论java调用还是通过jni调用本地库,都会受到linux本身用户权限的限制,当使用java调用框架层的方法的时候,将受到框架层许可的限制,调用其他包中组件的时候,将受到组件许可的限制,最终的限制由签名机制完成。

许可机制对安全的控制主要表现在如下方面:某些系统的接口中将检查调用者的许可,如果所调用的应用程序包没有这个许可,调用将失败,并抛出异常;对于普通许可,应用程序包可以直接得到,对于危险许可,应用程序包在得到的时候具有提示;签名许可需要申请者和声明者具有相同的签名。

安全策略还有一个方面,就是一个额外的逻辑为“由于许可增加到额外的用户组”。也就是说由于应用程序包获得了某些许可,这个应用程序包可以从linux进程的角度被增加到特定的组。并且这是一个各个不同的android设备可以进行自定义的策略,也就是各个平台可以自定义哪些许可将获得增加到哪些用户组中去