美文网首页
Android平台架构介绍和源码下载

Android平台架构介绍和源码下载

作者: codeteenager | 来源:发表于2018-06-26 23:44 被阅读0次

    本篇文章为Android源码学习的第一章,主要讲述Android平台架构的分层,以及如何下载Android源码。

    Android平台架构介绍

    Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。下图所示为 Android 平台的主要组件。


    image

    从上图可以看出,Android系统大体可以分为6个层次,从下往上依次是:

    1. Linux内核层:Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
    2. 硬件抽象层 (HAL):硬件抽象层 (HAL) 提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
    3. Android Runtime:对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在其自己的进程中运行,并且有其自己的 Android Runtime (ART) 实例。ART 编写为通过执行 DEX 文件在低内存设备上运行多个虚拟机,DEX 文件是一种专为 Android 设计的字节码格式,经过优化,使用的内存很少。编译工具链(例如 Jack)将 Java 源代码编译为 DEX 字节码,使其可在 Android 平台上运行。

    ART 的部分主要功能包括:

    • 预先 (AOT) 和即时 (JIT) 编译
    • 优化的垃圾回收 (GC)
    • 更好的调试支持,包括专用采样分析器、详细的诊断异常和崩溃报告,并且能够设置监视点以监控特定字段

    在 Android 版本 5.0(API 级别 21)之前,Dalvik 是 Android Runtime。如果您的应用在 ART 上运行效果很好,那么它应该也可在 Dalvik 上运行,但反过来不一定。
    Android 还包含一套核心运行时库,可提供 Java API 框架使用的 Java 编程语言大部分功能,包括一些 Java 8 语言功能。

    1. 原生 C/C++ 库:许多核心 Android 系统组件和服务(例如 ART 和 HAL)构建自原生代码,需要以 C 和 C++ 编写的原生库。Android 平台提供 Java 框架 API 以向应用显示其中部分原生库的功能。例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以支持在应用中绘制和操作 2D 和 3D 图形。
      如果开发的是需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问某些原生平台库。
    2. Java API 框架:您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。这些 API 形成创建 Android 应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务:
    • 丰富、可扩展的视图系统,可用以构建应用的 UI,包括列表、网格、文本框、按钮甚至可嵌入的网络浏览器
    • 资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件
    • 通知管理器,可让所有应用在状态栏中显示自定义提醒
    • Activity 管理器,用于管理应用的生命周期,提供常见的导航返回栈
    • 内容提供程序,可让应用访问其他应用(例如“联系人”应用)中的数据或者共享其自己的数据

    开发者可以完全访问 Android 系统应用使用的框架 API。

    1. 系统应用:Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台随附的应用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。
      系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信,您无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。

    从上图可以将Android平台划分为两层,一层是由C/C++编写的,可以称为Native层。另一层是由Java编写的,可以称为Framework层。这两层之间的联系是通过JNI进行连接。

    Android源码下载

    了解了Android平台架构之后,作为开发者学习源码,需要下载其源代码。在下载源代码之前,需要了解AOSP这个概念,AOSP是Android Open Source Project(Androi开源项目)的缩写,如果可以翻墙的话,可以按照AOSP官网 https://source.android.com/setup/downloading 这个地址上的步骤进行源码下载,如果不具备翻墙的条件,可以在清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 进行下载。步骤如下:

    安装 Repo

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    ## 如果上述 URL 不可访问,可以用下面的:
    ## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
    chmod a+x ~/bin/repo
    

    建立工作目录

    mkdir WORKING_DIRECTORY
    cd WORKING_DIRECTORY
    

    初始化仓库

    repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
    ## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
    ## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
    ## 如果需要某个特定的Android版本,则使用repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.0_r1
    

    同步源码树(以后只需执行这条命令来同步)

    repo sync
    

    如果中间有网络断开的情况,则只需要执行repo sync继续同步即可。直到下载完Android源码。

    相关链接

    Android官方文档
    AOSP官网
    清华大学AOSP镜像地址
    中国科学技术大学开源软件镜像服务

    相关文章

      网友评论

          本文标题:Android平台架构介绍和源码下载

          本文链接:https://www.haomeiwen.com/subject/uoevyftx.html