Ubuntu22.04编译Android12 AOSP

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那么需要扩容。

为什么要增加虚拟内存?编译Android12源码的时候提示如下:
2024-06-05_105519.png

意思是需要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空间,如图
2024-06-05_110311.png

使用以下命令查看swap详情:

swapon -s
2024-06-05_110450.png

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


2024-06-05_110636.png
2.1扩容
#1、停用交换文件
sudo swapoff /swapfile
#2、删除文件
sudo rm /swapfile
#3、新建swap空间,以16G为例,创建文件
sudo fallocate -l 16G /swapfile 
#4、查看文件信息
ls -lh  /swapfile

文件信息:
2024-06-05_111410.png
#5、设置文件权限
sudo chmod 600 /swapfile

文件信息:
2024-06-05_111548.png
#6、挂载
sudo mkswap /swapfile
#7、激活启用
sudo swapon /swapfile
#8、再次查看内存使用情况
free -m

内存使用情况:
2024-06-05_111744.png

发现交换空间 16G,然后还有重要的一步把交换信息写入系统配置,不然Ubuntu重启后以上配置swap空间工作得重新做

#9、使用vim编辑器打开配置文件
sudo vim /etc/fstab

如果提示vim找不到命令,使用以下命令安装vim,然后再次打开配置文件:

sudo apt-get install vim

打开配置文件如下:
2024-06-05_112011.png

发现已经存在/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小时左右。下载成功后会出现类似下图:
2024-06-05_113845.png

如果一切顺利,编译成功会这样:
2024-06-05_115811.png

.bashrc文件存放位置,打开Ubuntu桌面的文件,如图:
2024-06-05_114043.png

按快捷键crtl+H 显示隐藏文件,即可看到
2024-06-05_114130.png

感谢:
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容