开发环境的装备与概述
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 库有效的进行统一的组织管理。
步骤:
-
我们先要下载一些工具git-core 和 curl:apt-get install git-core curl
-
下载repo脚本:
curl http://git-repo.googlecode.com/files/repo-1.12 > ./repo
- 修改下载好的repo脚本的权限为可执行:
chmod 777 repo
- 初始化git库:
./repo init -u https://android.googlesource.com/platform/manifest.git -b froyo
- 开始下载:
./repo sync
编译步骤
-
部署安装JDK环境,不同的源码编译时需要的JDK版本不同,如2.2需要JDK5,2.3以上需要JDK 1.6以上
-
安装辅助工具:
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
- 设置编译环境:
. build/envsetup.sh 或者 source build/envsetup.sh
作用:初始化编译环境,并引入一些辅助的 Shell 函数,这其中就包括下一步使用
lunch函数
- 选择编译目标:
lunch
作用:指明要为哪个环境编译哪种权限的文件
image.png
image.png
Gengric : emulator 编译最小的能够运行的系统
权限:
user:关闭调试相关操作。类似MIUI 稳定版,发布版本。
userdebug:跟user类似,但是有一些调试操作保留。类似MIUI 开发版,测试版
eng:开发版,打开所有调试相关设置,适用于开发阶段。内部工程师开发版本。
- 开始编译:
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:
- 新建源码工程: ProjectàNew project
image.png
-
设置工程路径
image.png
-
导入源码(最好以Add Tree方式,否则导入会很慢)












网友评论