zoukankan      html  css  js  c++  java
  • 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设备可以进行自定义的策略,也就是各个平台可以自定义哪些许可将获得增加到哪些用户组中去

  • 相关阅读:
    Scrapy 扩展中间件: 针对特定响应状态码,使用代理重新请求
    Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
    Scrapy 隐含 bug: 强制关闭爬虫后从 requests.queue 读取的已保存 request 数量可能有误
    Scrapyd 改进第二步: Web Interface 添加 STOP 和 START 超链接, 一键调用 Scrapyd API
    简单示例理解神闭包
    ejs 模板使用方法
    我使用的开源组件汇总,以备学习使用
    了不起的Node.js--之五 TCP连接
    Windows7下Java运行时环境搭建
    了不起的Node.js--之四
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/4173336.html
Copyright © 2011-2022 走看看