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

下载Android源码

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

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

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
# 挂载磁盘映像# 每次启动都需要挂载 !hdiutil attach ~/aosp.sparseimage -mountpoint  /Volumes/AndroidSourceCode;

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

# 将磁盘映像的大小调整到170Ghdiutil resize ~/aosp.sparseimage -size 170g

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

# mount the android file imagefunction mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }#如果创建dmg文件时生成的是android.dmg.sparseimage文件,则使用function mountAndroid { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; }# unmount the android file imagefunction umountAndroid() { hdiutil detach /Volumes/android; }

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

使用Repo进行下载

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

# 下载Repocurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo# 初始化Reporepo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest# 进入Repo目录,查看所有分支cd .repo/manifestsgit branch -a# 下载某个特定的分支repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.0_r7# 也可以这样切换其他分支repo init -b android-6.0.1_r63# 同步Repo代码 repo sync

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

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

wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar tar -vxzf aosp-latest.tar

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 初始化编译环境 ,每次打开终端都需要

source ./build/envsetup.sh

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

# 这里我选择的是x86体系的源码,eng(BUILD_TYPE)代表的是工程机# 如果需要模拟器运行的话,选择x86运行速度会快一点# 如果需要烧写到手机上,那么选择aosp_arm-englunch aosp_x86-eng

BUILD_TYPE 对照表:

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

4 使用make进行编译

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

make -j8 # 使用8个线程进行编译

5 使用模拟器运行

emulator

编译后的产物

编译后会在.//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

更多相关文章

  1. android 垂直 SeekBar 源代码(VerticalSeekBar)
  2. Android系统源代码情景分析
  3. 【android】 使用sd卡
  4. Android(安卓)ActionBar的源代码分析(一)
  5. Android源码50例汇总,欢迎各位下载
  6. [原]Android系统进程Zygote启动过程的源代码分析
  7. 英特尔® 硬件加速执行管理器安装指南 — Mac OS X*
  8. Android源代码分析(二) MediaScanner源码分析(上)
  9. Android中的SharedPreference源码整理总结

随机推荐

  1. Android(安卓)面试题(1)
  2. libusb移植到Android开发板
  3. Android简明开发教程九:创建应用程序框架
  4. android各个版本的名称和更新
  5. Android的selector背景选择器
  6. Google应用在Android上的Push机制以及C2D
  7. Windows环境下Android(安卓)NDK环境搭建
  8. Android(安卓)am 指令的使用
  9. [Android] 为Android安装BusyBox —— 完
  10. Android使用TextView实现无下划线超链接