您现在的位置是:首页 >技术杂谈 >使用docker (Ubuntu 20.04)编译Android源码AOSP网站首页技术杂谈
使用docker (Ubuntu 20.04)编译Android源码AOSP
编译AOSP源码,使用比较多的是Ubuntu 18.04和20.04,这2个版本的系统可以按照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 image时,通过参数-v把AOSP源码目录挂载到Container上。
(2)在容器内创建和外面Host OS中同样的用户(相同的uid、gid),这样容器内外修改文件不存在权限不一致的问题。
安装docker软件
$ sudo apt install docker.io
拉取Ubuntu 20.04镜像
$ docker pull ubuntu:20.04
在Host OS中做如下配置。
把当前用户添加到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
启动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源码。