编译AOSP源码,常用Ubuntu 18.04和20.04。 这两个版本的系统都可以按照Google官方的操作流程进行编译。
个人认为20.04比18.04好用,主要是UI/UE的差异(AOSP编译没有差异)。 20.04比较好用,而18.04的一些操作比较别扭。
另外,如果你想开发Linux C/C++程序,新版本的系统将支持更新的编译器和相应的语言版本。 老版本的系统原则上可以独立更新编译器和相关依赖库,但操作比较麻烦,也不一定可以。 是否能够成功。
如果你想尝试Ubuntu 22.04或更新版本,可以使用docker环境安装Ubuntu 20.04并编译AOSP。
本文讲解的使用场景:
1)物理机(Host OS)上安装22.04版本,用于源码管理(git/repo)、代码编辑、开发板调试和验证。
2)Docker安装20.04版本系统(Container OS)进行编译。
主要步骤:
1)安装docker镜像并搭建AOSP编译环境。
2)将docker中的用户和文件路径与外部系统关联起来,避免权限问题,方便开发。
(1)启动docker镜像时修改aosp源码编译版本,通过参数-v将AOSP源码目录挂载到Container中。
(2)在容器内创建与外部宿主OS相同的用户(相同的uid、gid),这样在容器内外更改文件时不会出现权限不一致的问题。
安装docker软件
$ sudo apt install docker.io
拉取 Ubuntu 20.04 镜像
$ docker pull ubuntu:20.04
在主机操作系统中进行以下配置。
将当前用户添加到docker组并更新当前执行命令的shell的组id。
这样,就不需要以 root 权限运行 docker 命令了。
在我使用的系统中,前两个命令不需要执行。 它们在安装 docker.io 后就已经设置好了。
$ sudo chown root:docker /var/run/docker.sock
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ newgrp docker
查看主机操作系统中的当前用户 ID (Ubuntu 22.04):
$ id
uid=1000(dev) gid=1000(dev) groups=1000(dev),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),135(lxd),136(sambashare)
用户: 开发者
uid: 1000
组号:1000
启动docker容器并创建对应的用户:
#启动docker
$ docker run -it -v ~/aosp_src:/aosp_src ubuntu:20.04
#创建新的用户组和用户
$ groupadd -g 1000 dev
$ useradd -m -g 1000 -u 1000 dev -s /bin/bash
#切换为新创建的用户
$ su dev
至此,docker容器中需要做的特殊配置就完成了。 如果您已经按照前面的步骤安装并配置了AOSP编译环境(请参阅:从头开始构建Android源码编译环境)修改aosp源码编译版本,您可以source环境变量,lunch选择编译目标,并make -jxx来编译AOSP源代码。