使用docker (Ubuntu 20.04)编译Android源码AOSP

Ubuntu 1804和2004支持直接编译AOSP

编译AOSP源码,使用比较多的是Ubuntu 18.04和20.04,这2个版本的系统可以按照Google官方的操作步骤进行编译。
个人感觉20.04比18.04更好用一些,主要是UI/UE方面的差别(对AOSP编译没什么差别),20.04用起来更顺手,18.04有些操作比较别扭。
另外,如果要开发Linux C/C++程序,新版本的系统会支持更新的编译器和对应的语言版本,旧版本的系统原则上可以单独更新编译器及相关依赖库,但操作比较麻烦,而且未必能够成功。

Ubuntu 2204适用docker编译AOSP

如果要尝鲜用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 image时,通过参数-v把AOSP源码目录挂载到Container上。
(2)在容器内创建和外面Host OS中同样的用户(相同的uid、gid),这样容器内外修改文件不存在权限不一致的问题。

配置操作详细说明

1. 安装docker软件
$ sudo apt install docker.io
2. 配置当前用户(非root)docker执行权限

把当前用户添加到docker组中,并更新当前执行命令的shell的group id。
这样,就无需使用root权限运行docker命令。
我使用的系统中,前2条命令不用执行,安装docker.io后都已经设置好了。

$ sudo chown root:docker /var/run/docker.sock 
$ sudo groupadd docker      
$ sudo gpasswd -a $USER docker  
$ newgrp docker    

在Host OS(Ubuntu 22.04)中查看当前用户id:

$ 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)

user: dev
uid: 1000
gid: 1000

3. 拉取Ubuntu 20.04镜像
$ docker pull ubuntu:20.04
4. 配置docker容器内的系统用户,保持和Host OS一致

启动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源码编译环境),就可以source环境变量、lunch选择编译目标、make -jxx编译AOSP源码。

你可能感兴趣的:(车载系统开发,Android开发技术专栏,docker,ubuntu,android)