写在前面
由于MAC系统默认大小写不敏感
如果是使用MAC 编译 ,一定要先进行分区,使用大小写敏感的格式
本人由于MAC 磁盘空间不够用了,专门买了一块移动硬盘编译,注意同样改为 区分大小写的格式。
参考 https://blog.bihe0832.com/macOS-AOSP.html
下载AOSP
1. 下载repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
2. 使用wget断点下载 (清华大学开源软件镜像)
wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
3. 解压
tar xf aosp-latest.tar
4.同步
同步的时候可能因为网络原因失败,重新执行 repo sync即可
cd aosp # 解压得到的 AOSP 工程目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码
5.目录说明
目录名 | 描述 |
---|---|
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的基本系统 |
编译
1. 初始化编译环境
source ./build/envsetup.sh
2. 选择编译目标
# 这里我选择的是x86体系的源码,eng(BUILD_TYPE)代表的是工程机
# 如果需要模拟器运行的话,选择x86运行速度会快一点
# 如果需要烧写到手机上,那么选择aosp_arm-eng
lunch aosp_x86-eng
构建类型 | 用途 |
---|---|
user | 有限的访问权限,主要用于发布正式产品,没有root跟调试权限 |
userdebug | 跟user类型差不多,但是多了root跟debug调试权限 |
eng | 拥有各种调试工具的开发版设置,拥有root跟debug权限 |
4 使用make进行编译
sysctl machdep.cpu | grep thread
显示
machdep.cpu.thread_count: 8
故使用8个线程同时编译
make -j16 # 使用16个线程进行编译
5. 编译成功
显示如下图的结果就表示编译成功了
6. 在模拟器运行
首先需要配置一下环境
在~/.bash_profile 中添加下面三行
[VolumeName]填入自己的磁盘名称
# for build Android
export PATH="/Volumes/[VolumeName]/aosp/prebuilts/android-emulator/darwin-x86_64:$PATH"
export ANDROID_PRODUCT_OUT="/Volumes//[VolumeName]/aosp/out/target/product/generic_x86"
export ANDROID_BUILD_TOP="/Volumes//[VolumeName]/aosp"
然后运行
emulator -partition-size 1024