使用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源码。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

抓饼先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值