最近一直在学习Android系统源码,当然搭建编译环境是第一步,我也是折腾了好久,个人觉得这个在学习Android过程中有里程碑意义的,因为以后过程中,自己的一些想法就能动手实现了。

下载Android源码

如果是MAC OS的话,需要在创建一个磁盘映像

使用自带的磁盘工具,创建磁盘映像即可。 也可以使用命令行进行创建

我给这个AOSP的磁盘映像分了100G的空间,但是我编译以后,出现了空间不够的问题,然后同样可以通过hdiutil工具调整这个磁盘映像的大小。

你还可以在 ~/.bash_profile 文件中,添加帮助函数来挂载跟取消挂载:

之后我们就可以通过执行mountAndroid指令来执行挂载镜像,通过umountAndroid指令来取消挂载。

使用Repo进行下载

如果需要学习Android源码的话,一定得需要了解Repo这个版本管理工具。 Repo工具的使用
https://source.android.com/source/using-repo

AOSP各版本和分支的关系 https://source.android.com/source/build-numbers#source-code-tags-and-builds

也可以直接使用wget -c进行断点续传进行下载

AOSP代码目录含义

目录名 描述
abi 应用程序二进制接口
bionic C/C++运行时库,在NDK程序中很大一部分调用就是这里的程序
bootable 用于Android装载和启动程序,其中就包括bootloader和recovery。bootloader是Android中唯一在LInux内核之前执行的程序。通过这段程序可以初始化硬件,建立内存控件的映射图等,总之,bootloader就是为LInux内核准备合适的运行环境。
build 用于编译Android源代码以及建议system.img,ramdisk.img等文件的工具
cts 用于兼容性测试的工具
dalvik Dalvik虚拟机的源代码
development 高层的开发和调试工具
device 与设备相关的代码
docs 包含与Android源代码项目的文档和工具,如Dalvik虚拟机格式文档等
external 扩展工具的源代码
framworks Android框架层源代码。也就是Android SDK的源代码
hardware 硬件层接口和库
libcore Java核心库
ndk NDK相关的源代码
packages 与Android系统一同发布的应用程序的源代码
prebuilts Android在各种平台下编译之前要使用的工具
sdk 在开发环境中使用的工具,如ddms,draw9path,sdkmanager等
system Android的基本系统

编译Android源码

###1 进入到AOSP目录 ###2 初始化编译环境 ,每次打开终端都需要

###3 选择编译目标,每次打开终端都需要

BUILD_TYPE 对照表:

构建类型 用途
user 有限的访问权限,主要用于发布正式产品,没有root跟调试权限
userdebug 跟user类型差不多,但是多了root跟debug调试权限
eng 拥有各种调试工具的开发版设置,拥有root跟debug权限

###4 使用make进行编译 如果之前有编译不同CPU体系的,那么需要使用 make -clobber清除之前的编译内容, 否则可能会出现错误

###5 使用模拟器运行

编译后的产物

编译后会在.//out/target/product/generic_x86/目录生成一些img文件,这些img文件是可以烧写到手机中的。

有三个img比较重要,分别是system.img, ramdisk.img, userdata.img。

一些不错的参考资料:

https://www.jianshu.com/p/367f0886e62b https://www.jianshu.com/p/aeaceda41798 https://blog.csdn.net/zaijzhgh/article/details/53819257 https://blog.csdn.net/chen930724/article/details/57086717 https://blog.csdn.net/cjpx00008/article/details/60474883

2 对 “编译Anroid源码到模拟器”的想法;

发表评论

电子邮件地址不会被公开。 必填项已用*标注