docker源码编译 linux_Docker中使用Ubuntu编译Android源码

几点说明

为什么要使用Docker:

采用docker编译我们可以在本地不配置任何环境,只要安装docker,并下载docker镜像就好了。我在其他机器想编译,那我只需要把镜像pull下来,运行就好了。如果没有我们想要的镜像,我们可以自己配置,然后上传到docker hub,留着以后什么时候需要就下载。这是一劳永逸的过程。

为什么用Ubuntu:

首先编译Android源码必须使用 Linux 或 Mac OS。其次在AOSP开源中, master分支使用Ubuntu长期版本开发和测试的,因此也建议使用Ubuntu进行编译。

环境要求

操作系统要求

Android版本

编译要求的Ubuntu最低版本

Android 6.0至AOSP master

Ubuntu 14.04

Android 2.3.x至Android 5.x

Ubuntu 12.04

Android 1.5至Android 2.2.x

Ubuntu 10.04

JDK版本要求

Android版本

编译要求的JDK版本

Android 7.0 (Nougat) - Android 8.0 (O)

Android 5.x (Lollipop) - Android 6.0 (Marshmallow)

Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat)

Android 1.5 (Cupcake) - Android 2.2.x (Froyo)

jdk版本切换

sudo update-alternatives --config java

sudo update-alternatives --config javac

Docker注意事项

关于docker的基础知识以及如何使用我就不多说了,网上很多教程。这里说几点编译Android源码时的注意事项

docker 默认给的内存是2G,编译Android源码,在7.0以上需要使用jack-server来取代以往的编译器工具,它的内存消耗比较大,通常需要4G以上。这里就需要修改docker分配给容器的内存大小,run -m的形式只是限制内存使用量,并不能增加。需要增加内存需要在docker的偏好设置的高级选项中设置。

由于docker没有设置USER环境变量会导致编译失败,需要手动添加

export USER=$(whoami)

docker挂在本机目录

docker run -itv 需要共享的本机目录:docker目录 ubuntu:14.04 /bin/bash

编译源码

// cd到应的源码目路,初始化编译环境

1. source build/envsetup.sh

// aosp表示Android Open Source Project,arm64表示是使用arm64 cpu的设备,eng表示engineer版本,其直接开放了一些root等权限。当然直接使用lunch命令会列出所有可选的编译目标。

2. lunch aosp_arm64-eng

// 这里的j8表示可以开启8个线程来参与编译源码,这里指定的线程数一般应该遵从cpu内核数的2倍这个规律,可以通过cat /proc/cpuinfo查看相关cpu信息。

3. make -j8

错误锦集

recipe for target 'ninja_wrapper' failed

这种错误基本都是jack-server的内存太小导致,修改如下文件

prebuilts/sdk/tools/jack-admin 找到JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation" 在最后添加 -Xmx4096 即:JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096

重启jack-server:

prebuilts/sdk/tools/jack-admin kill-server

prebuilts/sdk/tools/jack-admin start-server

除了这个错基本就是依赖包没有安装,安装依赖包即可。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值