1、编译环境
电脑:R7-4800U 8核/16线程、内存16G
Linux系统版本:Ubuntu22.04.4
Android版本:android 12
AOSP: android-12.0.0_r8
这里我下载的是android12源码,android所有版本参考:https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds
2、给Ubuntu增加虚拟内存
如果swap空间超过16G则不用增加,如果swap空间没有16G那么需要扩容。

意思是需要16G左右的内存(实测已经超过16G,如果你没有分配20G还是使用虚拟内存吧),如果内存不足,编译一定会失败!Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
所以需要添加虚拟内存(swap交换空间)
Linux 的交换分区(swap),或者叫内存置换空间(swap space),是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。交换分区的作用是,当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,也就是常说的 swap out 和 swap in。
查看是否已经存在交换内存:
free -m
我们安装的Ubuntu默认有2G大小的swap空间,如图
使用以下命令查看swap详情:
swapon -s

可以看到我们Ubuntu上的默认的swap是存放在根目录的swapfile文件,我们去根目录找一下看看。
进入根目录方法:打开ubuntu桌面“文件”->点击其他位置->点击计算机 即可查看到

2.1扩容
#1、停用交换文件
sudo swapoff /swapfile
#2、删除文件
sudo rm /swapfile
#3、新建swap空间,以16G为例,创建文件
sudo fallocate -l 16G /swapfile
#4、查看文件信息
ls -lh /swapfile
文件信息:
#5、设置文件权限
sudo chmod 600 /swapfile
文件信息:
#6、挂载
sudo mkswap /swapfile
#7、激活启用
sudo swapon /swapfile
#8、再次查看内存使用情况
free -m
内存使用情况:
发现交换空间 16G,然后还有重要的一步把交换信息写入系统配置,不然Ubuntu重启后以上配置swap空间工作得重新做
#9、使用vim编辑器打开配置文件
sudo vim /etc/fstab
如果提示vim找不到命令,使用以下命令安装vim,然后再次打开配置文件:
sudo apt-get install vim
打开配置文件如下:
发现已经存在/swapfile 这条信息,并且你后来创建的16G的文件使用的名字依然是“swapfile ”,那么我们直接退出编辑器,不用修改。按ESC键退出编辑模式,然后依次输入:wq(英文冒号+wq)保存退出。
重启Ubuntu 再次查看内存使用情况:
free -m
发现交换空间存在。
3、下载AOSP源码、编译、运行
AOSP(Android Open Source Project)是Google开放的Android 开源项目
中国官网:https://source.android.google.cn/
如果无法连接谷歌服务器获取AOSP源码,可以从清华源AOSP、 清华大学镜像站或者 中科大镜像。
#1、安装 Git
sudo apt-get install git
#2、设置git身份,添加自己的邮箱和姓名
git config --global user.email "xxxx@qq.com"
git config --global user.name "xxxx"
#3、创建bin,并加入到PATH中
mkdir ~/bin
PATH=~/bin:$PATH
#4、安装curl库
sudo apt-get install curl
#5、下载repo并设置权限
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
# 6、安装python,repo初始化时会用到
sudo apt-get install python
# 7、安装 jdk11
sudo apt-get update
sudo apt-get install openjdk-11-jdk
# 8、安装编译需要的依赖包
sudo apt install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
# 9、编译需要有libncurses.so.5
sudo vi /etc/apt/sources.list
#在行尾添加下面这个源保存
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe
sudo apt install apt-file
sudo apt-file update
sudo apt-file find libncurses.so.5 #没有这个文件再执行下面的。
sudo apt install libncurses5
# 10、创建工作目录
mkdir aosp_12
cd aosp_12
#repo的运行过程中会尝试访问官方的git源更新repo自己,如果想使用tuna的镜像源进行更新,可以将如下内容添加到你的~/.bashrc里
echo 'export REPO_URL="https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/"'>> ~/.bashrc
source ~/.bashrc
# 11、初始化并指定版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-12.0.0_r1
# 12、同步源码 -j后面的数字一般为cpu核心数的2倍,我的cpu为8核,这里我这设置的12。
repo sync -j12
# 13、源码下载成功后 cd进入AOSP的目录依次执行如下2个命令:
source build/envsetup.sh
make clobber #编译前删除build文件夹
# 14、选择编译目标
lunch
# 或者
lunch sdk_phone_x86_64
# 15、开始编译
make -j12
# 16、编译 启动模拟器
source build/envsetup.sh
lunch sdk_phone_x86_64
emulator -gpu off -partition-size 3048
如果出现了这个错误:
emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037
说明adb工具还未运行 ,crtl +C 退出模拟器,然后执行:
adb start-server
这个时候再运行
emulator -gpu off -partition-size 3048
下载比较慢,我下载的时间基本在2-3小时左右。下载成功后会出现类似下图:



感谢:
https://www.jianshu.com/p/53941de91c77
https://blog.csdn.net/weixin_53760974/article/details/134572827
https://blog.csdn.net/Jasmyn112/article/details/137893435
https://blog.csdn.net/weixin_43836998/article/details/129411486
https://www.jianshu.com/p/197096d3206d