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

文章讲述了如何在Ubuntu22.04系统上利用Docker环境来编译AOSP源码,推荐使用Ubuntu20.04的镜像,以避免权限问题和保持与HostOS同步。主要内容包括安装Docker、配置用户权限、拉取Ubuntu20.04镜像、创建与HostOS用户ID一致的容器内用户,以及启动和使用容器进行AOSP编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
Adding user test_user to group docker  
$ newgrp docker    

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

# newgrp命令执行前,gid=1000
$ id
uid=1000(test_user) gid=1000(test_user) groups=1000(test_user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),135(lxd),136(sambashare)

$ newgrp docker

# newgrp命令执行后,gid=137,groups切换为docker
$ id
uid=1000(test_user) gid=137(docker) groups=137(docker),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),135(lxd),136(sambashare),1000(sw)

user: test_user
uid: 1000
gid: 137

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

启动docker容器,并创建相应的用户:

#启动docker
$ docker run --name optional_name -it  -v local_dirA:docker_dirA -v local_dirB:docker_dirB ubuntu:20.04(image_name)

#创建新的用户组和用户
$ groupadd -g 1000 dev 
$ useradd -m -g 1000 -u 1000 dev -s /bin/bash

#切换为新创建的用户
$ su dev 

到这里,在docker容器中需要做的专门的配置就完成了。如果已经参照上面的步骤,安装配置好AOSP的编译环境(可参见:从头搭建Android源码编译环境),就可以source环境变量、lunch选择编译目标、make -jxx编译AOSP源码。

为了使用方便,可以写一个简单的启动脚本,容器已启动自动切换为制定用户,并挂载上所需目录

# 可以添加多个-v参数
docker run --name android_build --user dev -v /home/:/home/-v /source_code/:/source_code/ -it ubuntu20.04:tag2024 /bin/bash

# 连接到已有的终端上,和上面命令相同的输出内容,两边都可以控制。
docker attach android_build

# 新启动一个bash shell
docker exec -it android_build /bin/bash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抓饼先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值