美文网首页
android 源码分析(一)

android 源码分析(一)

作者: 小浩_w | 来源:发表于2018-10-16 11:04 被阅读0次

开发环境的装备与概述

Android构架次层如何划分的?

image.png image.png

老版架构:Linux内核层、 Library层 、 Framework层、Application层
新版架构:Linux内核层被拆分出了HAL层

HAL即Hardware Abstraction Layer,硬件抽象层

下载源码和编译后的空间比较大,最好保证磁盘有100g空间

下载源码的步骤

涉及到的命令:

apt-get: 主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。

通过/etc/apt/sources.list里添加的软件源,负责ubuntu下软件的管理。

curl: linux命令行下的下载工具

repo: Android 使用 Git 作为代码管理工具,同时还开发了 Repo 命令行工具,对 Git 部

分命令进行封装,将百多个 Git 库有效的进行统一的组织管理。

步骤:

  1. 我们先要下载一些工具git-core 和 curl:apt-get install git-core curl

  2. 下载repo脚本:

curl http://git-repo.googlecode.com/files/repo-1.12 > ./repo

  1. 修改下载好的repo脚本的权限为可执行:

chmod 777 repo

  1. 初始化git库:

./repo init -u https://android.googlesource.com/platform/manifest.git -b froyo

  1. 开始下载:

./repo sync

编译步骤

  1. 部署安装JDK环境,不同的源码编译时需要的JDK版本不同,如2.2需要JDK5,2.3以上需要JDK 1.6以上

  2. 安装辅助工具:

sudo aptitude (or apt-get) install gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386

  1. 设置编译环境:

. build/envsetup.sh 或者 source build/envsetup.sh

作用:初始化编译环境,并引入一些辅助的 Shell 函数,这其中就包括下一步使用

lunch函数

  1. 选择编译目标:

lunch

作用:指明要为哪个环境编译哪种权限的文件

image.png image.png

Gengric : emulator 编译最小的能够运行的系统
权限:
user:关闭调试相关操作。类似MIUI 稳定版,发布版本。
userdebug:跟user类似,但是有一些调试操作保留。类似MIUI 开发版,测试版
eng:开发版,打开所有调试相关设置,适用于开发阶段。内部工程师开发版本。

  1. 开始编译:

make -j4

j4指的是4个线程,并发编译,4个任务同时进行。一般值设置为CPU核心数*2

花费时间参考:
台式机:i5+8G+机械硬盘。编译4.3源码6个小时。编译4.1源码4个小时。编译2.3源码2个小时。

编译结果分析及注意的问题

Make命令

l 编译整个系统——make,耗时较长
l 编译SDK——make sdk
l 单个模块编译——make Media Provider,会将该模块依赖的所有模块也一起编译
l 编译某个目录下的模块——mm
l 编译某个目录下的指定模块——mmm

编译的结果目录

编译生成的所有文件,临时文件以及最终生成文件都位于 /out 目录下,该目录主要有以下几个子目录:
/out/host/:该目录下包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种
工具,例如:emulator,adb,aapt 等。

/out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java 应用
代码和 Java 库。

/out/target/product/<product_name>/:包含了针对特定设备的编译结果以及平台相关
的 C/C++ 库和二进制文件。<product_name>是具体目标设备的名称。Build产生的最重要的三个img文件,就在这个目录下。

编译出的三个最重要的img文件

ramdisk.img:
对应boot分区。在启动时将被 Linux 内核挂载为只读分区,它包含了 /init 文件和一些配置文件。它用来挂载其他系统镜像并启动 init 进程。

system.img:
对应system分区。包含了 Android OS 的系统文件,库,可执行文件以及预置的应用程序等。
userdata.img:
对应data分区。将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据。

AOSP通过什么管理系统编译过程

Android是通过Build系统来实现系统编译的,Build系统主要由 Make 文件,Shell 脚本以及 Python 脚本组成,其中最主要的是 Make 文件。
Build 系统中最主要的处理逻辑都在 Make 文件中,而其他的脚本文件只是起到一些辅助作用。

image.png

Android启动简介及源码导入

Android启动的顺序


image.png

Source Insight:

  1. 新建源码工程: ProjectàNew project
image.png
  1. 设置工程路径


    image.png
  2. 导入源码(最好以Add Tree方式,否则导入会很慢)

相关文章

网友评论

      本文标题:android 源码分析(一)

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