摆脱主机环境限制,随心所欲编译Android源码

原创
2020/03/20 11:06
阅读数 2.9W

本文源代码详见 https://github.com/Tinker-S/docker-android-build

使用docker编译aosp源码

google官方推荐的安卓编译源码为14.04,由于目前的工作环境为macosx环境或者高版本的ubuntu环境,直接在本机编译会有很多问题,不过借助docker这个强大的工具可解决这个烦恼

安装docker

google搜索安装方法即可

docker更换国内镜像源

为了加速docker镜像的拉取,可以设置国内镜像源,例如设置成网易的镜像源方法如下:

  • 创建 /etc/docker 目录
sudo mkdir -p /etc/docker

  • /etc/docker 目录下创建 daemon.json 文件,写入以下内容
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

  • 重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

创建编译镜像

由于aosp源码推荐在ubuntu 14.04版本上编译,所以我们基于14.04来创建镜像。这里准备使用5.1.1版本的源码,所以需要安装jdk7。

构建镜像的细节详见 Dockerfile

使用如下命令创建镜像

docker build -t aosp-build:1.0.0 .

查看创建成功的镜像

  image

使用镜像编译源码

  1. 下载aosp源码 推荐去清华镜像站下载打包好的源码即可,也可以使用repo下载指定版本,具体详见网站文档
  2. 假设aosp源码下载路径为 /home/user/aosp,使用aosp-build镜像创建容器,并挂载aosp源码路径
docker run -itd --name aosp-build -v /home/user/aosp:/home/aosp aosp-build:1.0.0
docker exec -it aosp-build /bin/bash

  1. 进入 /home/rom 目录,直接编译源码即可
. build/envsetup.sh
lunch
make -j8

展开阅读全文
打赏
2
29 收藏
分享
加载中
最近我在我们项目里面就是使用docker编译安卓源码的。这个方法在实际中也是可行的。
2020/03/29 15:24
回复
举报
我遇到的一些问题和解决办法 1. 安卓源码编译需要区分大小写的文件系统。 2. 基于这个大小写的原因。在windows上最好使用 WSL2 后端的linux去运行docker。并把源码放到wsl文件系统后,再挂载到容器内。不然wsl2现在直接访问windows文件系统很慢很慢。影响编译速度。并且解决了大小写的问题。 3. mac上默认的APFS出厂配置也是使用的不区分大小写的文件系统。可以利用磁盘工具创建一个虚拟的分区。这样不需要重新格式化磁盘就可以创建出一个区分文件大小写的的区域用于挂载安卓源码编译了。
2020/03/29 15:29
回复
举报
我编译的是安卓 2.3.x 的安卓系统源码。编译出来的动态库中的调试符号使用的容器内的linux文件系统路径分割符号。 在windows使用lldb远程调试安卓的时候,加载windows文件系统的调试符号路径,调试器无法正常加载到源码。尝试过修改编译出来动态库中路径符号为windows路径分隔符。仍旧无法正常加载源码。对比windows直接编译出来的安卓动态库中的调试符号信息发现其使用绝对路径,而不是目录+相对路径文件名的方式。所以得出这可能是目前lldb的bug,或者未实现的点。如果大家遇到了同样的问题可以还是使用unix系统进行调试。
2020/03/29 15:34
回复
举报
TinkerS博主
赞,我倒没用过这么多环境 😄
2020/04/02 10:34
回复
举报
要编译多久
2020/03/28 13:00
回复
举报
TinkerS博主
看你的主机性能和aosp版本吧,我机器编5.1.1的两个半小时
2020/03/28 15:12
回复
举报
更多评论
打赏
6 评论
29 收藏
2
分享
返回顶部
顶部