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的内核组件有: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系统使用完全标准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设备可以进行自定义的策略,也就是各个平台可以自定义哪些许可将获得增加到哪些用户组中去
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。