环境准备
1.设备
- mac os 13.0.1 intel cpu
- 安装pd 虚拟机 运行Ubuntu 22.04
- Linux配置设置 zhuanlan.zhihu.com/p/139305626
- Linux分配的内存尽量大点,200G往上
2.源码下载
- 能使用Google源最好,如果不能使用
- 可以使用清华源mirrors.tuna.tsinghua.edu.cn/help/AOSP/
- 下载 mirrors.tuna.tsinghua.edu.cn/aosp-monthl…下载完成后记得根据checksum.txt 的内容校验一下
- 将下载的aosp-latest.tar解压到你指定的目录
进入AOSP目录
- 不需要指定分支
- 直接repo sync
- 运行完成后会看到多个目录出现在AOSP 目录下
- 需要指定分支
- 进入aosp/.repo/manifests
##查看所有分支
git branch -a
##按q可以退出
##查看本地分支
git branch
##查看远程分支
git branch -r
git branch -r |grep android-10 ##(可以过滤版本号,数据过多)
- 切换到需要的分支
##拉取切换远程分支
git checkout android-10.0.0_r4 origin/android-10.0.0_r4
##android-10.0.0_r4 本地分支命名,可自定义
##origin/android-10.0.0_r4 远程分支命名,查找到需要的远程分支名直接复制就可以
##切换本地分支
git checkout android-10.0.0_r4
在aosp目录执行repo sync 运行完成后会看到多个目录出现在AOSP 目录下
编译代码
#进入aosp 目录下
#初始化脚本环境
source build/envsetup.sh
lunch
##选择你需要的环境(我这边选择的x86_64)
make
##进入漫长的等待,也可能出现环境问题导致中止,解决问题后继续make就可以了
踩坑记录
1.Mac系统
我使用的系统版本mac os 13.0.1 intel cpu,最后编译问题太多我mac转Linux了,mac上装个pd 弄个Linux
环境问题
- 需要新建个区分大小的盘,内容尽量大一点200g+,如果不区分后面编译会失败
- 编译的时候会出现,diff -c 等指令方法无法识别(mac的diff和Linux的不是同一个),不能正确比较两个文件的一致性,会判定你修改了系统文件,导致编译失败,我当时的解决方法是将找到文件中的diff指令修改为mac的格式,有些没找到平替的直接删除了,编译可以通过
- 后面还有几处错误,我记不清了,当时没记录,我给归咎为mac当时的环境不适合Android的编译不对,我修改了几处后,实在改不动了,我就放弃了
2.Linux系统
系统版本 Ubuntu 22.04
源码下载
- 能科学上网下载最好,但是流量占用太大,机场的流量不够折腾,只能投靠清华源mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 这个网站里面有详细的下载说明
- 我建议使用mirrors.tuna.tsinghua.edu.cn/aosp-monthl… 这个下载方案,手动下载然后repo sync, 虽然使用repo -init -b 分支名称可以直接下载我们想要的分支,但是可能会因为网络原因丢失一些Moudle ,导致编译时找不到
编译过程error
- ninja: build stopped: subcommand failed
-
编译时运行内存不够用,需要扩容下swap
-
先free -h 查看下swap内存
-
关闭swapfile
sudo swapoff /swapfile (如果关闭失败,可以重启下Linux,使swap的使用为空)
- 写入需要的大小内容,根据自己需求控制bs 和 count ,内存=bs*count
sudo dd if=/dev/zero of=/swapfile bs=1G count=10
- 创建swap文件,打开swap文件
sudo mkswap /swapfile
sudo swapon /swapfile
- 实例图
2./bin/bash: line 1: m4 command not found
- 安装m4
sudo apt install m4
3.error while loading shared libaries: libncurses.so.5:cannot open shared object file: No such file or directory
- 安装libncurses5 根据需求安装64 或 32
sudo apt install libncurses5 (64位)
sudo apt install libncurses5:i386 (32位)
4.repo reset: error: Entry 'command.py' not uptodate. Cannot merge
##本地repo和项目不一致 同步一下就可以
cd .repo/repo
git pull