本文描述了如何在一个docker上搭建Android编译环境。

Docker

Docker是一个计算机操作系统的容器,利用主机内核,搭建独立的文件系统,让用户程序运行在一个与宿主机文件系统无关的独立环境中。 Docker支持很多优雅的特性,方便项目的程序开发、调试和运行。在大数据云计算等领域具有不可比拟的优势,就连jvm就望而生畏。 Docker技术来源于Linux LXC技术,可以说是LXC技术的包装、升级和商品化。现在,也支持Windows Docker。

Docker有很多用途:

  • 编译Android,你不用因为主机环境的变化或者系统的升级而烦恼。
  • 学习分布式开发,一台计算机就能模拟分布式。
  • 搭建代理服务器,每一个业务逻辑都是分开的,比如搭建一个内部小型网站。
  • 模拟主机作业,先在docker上处理,防止破坏主机环境。

学习Docker时,有问题和需求,第一时间访问Docker官网,善于从英文文档中检索信息。
初学者可能对images和container管理、Dockerfile的CMD和ENTRYPOINT、网络配置、跨系统版本搭建Docker等感到困惑。
简单的提示一下:
images:静态存在的镜像,可以理解是一个静态的文件系统镜像,运行它就能得到一个container。
container:一个容器,可以理解是动态的文件系统镜像,我们可以运行它,在其上面作业,停止并删除它。
CMD:docker run最后一项就是CMD,在Dockerfile中定义CMD会被命令行中的CMD覆盖。
ENTRYPOINT:docker run后,docker容器的入口点,每次container运行时都会被执行,而且会覆盖命令行的CMD。
网络配置:Docker默认建立一个bridge,给定一个桥地址,没开辟一个container,自动分配一个在桥ip段的ip。
自定义网络配置:Docker的网络其实是linux的ip命令创建的虚拟网络,具体查找关键字linux ip命令maclanvlanvethbridge等。
跨系统版本搭建Docker:比如在ubuntu16.04上搭建一个ubuntu14.04的dokcer,可能会产生内核不兼容的情况,比如,如果我们在docker执行service命令将失败,因为ubuntu16.04内核中使用systemd而不是service管理守护进程。

以上内容,几乎都能从Docker官网得到答案。

Android Building Docker

这里采用Dockerfile的方式建立docker镜像。

例子:在ubuntu16.04中搭建Android6.0的编译环境。

  1 FROM ubuntu:xenial2 3 MAINTAINER jaren jlin@archos.com4 5 ADD sources.list /etc/apt/sources.list #这里更新一个源,会快很多。6 RUN apt-get update7 # 在ubuntu中安装openjdk7需要单独添加仓库。8 RUN apt-get install -y software-properties-common9 RUN add-apt-repository ppa:openjdk-r/ppa10 RUN apt-get update11 RUN apt-get install -y openjdk-7-jdk12 # 安装Android编译的依赖包,查看Android官网可以得到。13 RUN apt-get install -y git-core gnupg flex bison gperf build-essential \14   zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \15   lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \16   libgl1-mesa-dev libxml2-utils xsltproc unzip17 # ubuntu16.04中,默认不包含Python2.718 RUN apt-get install -y python2.719 20 RUN ln -sf /usr/bin/python2.7 /usr/bin/python21 # ubuntu16.04中默认不包含bc(一种编程语言)22 RUN apt-get install -y bc23 ENV USER=root

例子:在ubuntu16.04中创建ubuntu14.04的docker并编译Android6.0。
这个跟上一个例子是类似的,只是我们可以简单安装openjdk7。并且库依赖也是完整的,省去了很多麻烦。

  1 FROM ubuntu:14.042 MAINTAINER Jaren <jaren@archos.com>3 4 # Set to 32bit5 #RUN dpkg --add-architecture i3866 7 ADD sources.list /etc/apt/sources.list8 9 ADD setup.sh /setup/setup.sh10 RUN bash -x /setup/setup.sh11 12 ENV USER=root

setup.sh

  3 apt-get update || true4 5 apt-get install -y openjdk-7-jdk6 7 apt-get -y install git-core gnupg flex bison gperf build-essential \8   zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \9   lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \10   libgl1-mesa-dev libxml2-utils xsltproc unzip python-networkx

例子:搭建ubuntu14.04的docker编译Android7. 此文创建之时,官网说明,建议采用ubuntu14.04编译,所以,参考官网能实现编译需求。

参考文献

Docker
Android Building

http://nextstart.online/2017/01/24/docker-android-build/

http://nextstart.online/2017/01/24/docker-android-build/

利用docker编译Android源码相关推荐

  1. 《深入解析Android 虚拟机》——第1章,第1.3节编译Android源码

    本节书摘来自异步社区<深入解析Android 虚拟机>一书中的第1章,第1.3节编译Android源码,作者 钟世礼,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  2. 编译Android源码

    通过参考网上的相关资料,我编译Android源码的步骤如下: 1 我的系统是Ubuntu 8.04 2 系统上必须安装以下工具(摘自网上的资料):    sudo apt-get install bu ...

  3. (转)编译Android源码的全过程

    在网上看到一篇编译android源码的文章,照着做挺行的, 通过参考网上的相关资料,我编译Android源码的步骤如下: * 1 我的系统是Ubuntu 8.04      * 2 系统上必须安装以下 ...

  4. ubuntu 11.10下载和编译Android源码

    ubuntu 11.10下载和编译Android源码 由衷感谢网上的各个博主的文章,给了小弟我莫大的帮助.这里呢,小弟也把自己的经历记录下来,以供大家参考^^.这篇应该算是零基础.从无到有的流程介绍了 ...

  5. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决 参考文章: (1)Ubuntu12.04编译Android ...

  6. 编译Android源码致命错误解决方案

    编译Android源码致命错误解决方案 参考文章: (1)编译Android源码致命错误解决方案 (2)https://www.cnblogs.com/cliuwei/p/5605789.html 备 ...

  7. android:自己动手编译Android源码(超详细)

    自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...

  8. win10最新下载编译Android源码的简易方法分享(已亲测)

    win10最新下载编译Android源码的简易方法分享(已亲测) 准备至少150G的硬盘空间 win+R 输入control 打开程序与功能-启用或关闭Windows功能 勾选"适用于Lin ...

  9. ubuntu 20.04编译Android源码

    一直以来想编译android源码,趁闲编译了下,ubuntu版本:20.04,android源码版本:android-9.0.0_r30.总体还比较顺畅,中间遇到了一些报错,在文中也有记录,详情见下文 ...

最新文章

  1. [翻译]SQL Server 2005 Analysis Services性能指南
  2. Android下/data/data/package_name/files读写权限
  3. iOS网络编程之同步、异步、请求队列
  4. python3使用serial以及pyserial包读取串口数据并解析字节数组,涉及数据移位以及Python无符号整数转为有符号整数操作
  5. axios异步请求数据的简单使用
  6. java 从键盘中读取字符流 自定义异常
  7. android textview doubleclick,Android的TextView的双击事件监听
  8. 一篇文章入门Redis
  9. 8.3 bert的蒸馏讲解 意境级
  10. adlicensegen怎么生成许可_国家排污许可证申请系统常见问题及解决办法
  11. python全局变量一般没有缩进_python全局变量与局部变量
  12. 计算机odbc数据源管理位置,ODBC 常见数据源配置整理
  13. linux steam安装路径,Ubuntu Kylin 18.04 steam安装及解决方法
  14. 心不隔离|愿春早来,花枝春满
  15. 几种开源的网络流量监控软件
  16. 班章管家分享五一假日什么理财产品会有收益?五一假日理财攻略
  17. mysql能够跨平台使用吗_Mysql跨平台(Windows,Linux,Mac)使用与安装
  18. Python读取excel画图
  19. Python(TensorFlow框架)实现手写数字识别系统
  20. 记录配置Jupyter kernels

热门文章

  1. QEMU-KVM中的多线程压缩迁移技术
  2. POJ 2420 A Star not a Tree?【爬山法】
  3. javascript:重新加载js文件
  4. activex 控件的id 定义位置+使用ocx控件的客户端程序中对控件定义的文件中控件id定义的位置...
  5. Codeblocks 安装
  6. 机器学习导论(张志华):主元分析
  7. 深入解析C++编程中的静态成员函数
  8. ubuntu 系统中如何截图
  9. 学习笔记(二)——直方图均衡化和匹配
  10. Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记 4 —— 数据探索与可视化、发现规律