使用Docker来加速构建Android应用的基本部署思路解析

意义

极大的缩短安卓开发到测试到产品到渠道的距离。
给安卓程序员减轻负担。
Google做的环境已经特别到位了,放到docker里面明显不会有多大的坑(误,逃)。
Dockerfile

https://github.com/lijianying10/FixLinux/blob/master/dockerfiles/androidautobuild/Dockerfile

团队协作的故事

在敏捷开发的站立会议上,我作为一个后端程序员发现安卓程序员发布的时间大概是半个小时左右的时间,我觉得时间太长了应该缩短一些,成为了研发这个东西的目的。 但是研究了一段时间之后发现了很多需要解决的问题:

  1. 很多东西是被墙的。
  2. 很多依赖不能够复用(各种pom包)。
  3. gradlew怎么能快速安装不需要从网上下载。
  4. 自动对齐。
  5. 自动签名。
  6. 自动混淆。

考虑范围

  • 系统底层依赖
  • JDK
  • Andorid-SDK
  • Gradlew
  • 项目依赖

构建解释

建议:使用国外vps构建,不然要等很长时间。

构建变量

ENV JAVA_HOME /jdk1.8.0_65
ENV ANDROID_HOME /opt/android-sdk-linux/
ENV ANDROID_SDK_FILENAME android-sdk_r24.4.1-linux.tgz
ENV ANDROID_SDK_URL http://dl.google.com/android/${ANDROID_SDK_FILENAME}
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${JAVA_HOME}/bin/

底层依赖

gcc一类的,注意我们需要安装32位编译环境,以及git wget。

代码如下:

RUN sudo apt-get update && sudo apt-get install -y gcc-multilib lib32z1 lib32stdc++6 git wget && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

安装JDK

RUN cd / && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.tar.gz &&\
  tar xf jdk-8u65-linux-x64.tar.gz \
  && rm -rf $JAVA_HOME/src.zip $JAVA_HOME/javafx-src.zip $JAVA_HOME/man /jdk-8u65-linux-x64.tar.gz

这里使用Cookie来确定同意协议。

安装SDK

RUN cd /opt && \
  wget -q ${ANDROID_SDK_URL} && \
  tar -xzf ${ANDROID_SDK_FILENAME} && \
  rm ${ANDROID_SDK_FILENAME} &&\
  echo y | android update sdk --no-ui --all --filter tools,platform-tools,extra-android-m2repository,android-21
RUN echo y | android update sdk --no-ui --all --filter android-22,build-tools-21.1.2,build-tools-22.0.1

因为最好每一个layer控制在1G以内所以这里切割用了两个run。
注意SDK用您项目中需要的最高的版本安装到image里面然后向下安装,不然会出现tool这个文件夹无法运行工具的情况。
注意上面的SDK plateform等都是根据我们的项目来的,详细的摸索一下项目代码就知道依赖什么了。
准备项目

使用git clone 同步项目目录。
进行第一次手动构建编译。 命令为:gradlew assembleDebug
第二点中目的有三个:

  1. 查看项目是否缺少依赖,使用android update sdk 命令来增加安卓sdk依赖包。
  2. 自动下载项目中所有的依赖。
  3. 安装gradlew。

需要备份的点有两个

  1. /root/.gradle 备份这个目录可以在以后自动化构建的时候不需要重复安装gradlew。
  2. $PROJDIR/.gradle项目依赖的备份,备份了。($PROJDIR 为您的项目根目录位置)

都备份之后下次编译就不需要网络了(容器就不需要梯子了,这点对提升速度很重要)。

根据项目构建 Image

因为每个项目的依赖不尽相同所以需要针对项目定制化。大概运行目标如下:

  • 创建容器。
  • 找个方法同步代码git,FTP,NFS等等方法。
  • 把上面两个备份点放到指定位置等待使用。
  • 执行构建输出。
  • 销毁容器。

其实只要能做到上面这一点,加一个git hook 加上简单的发布就是一个简单的CI了。

对齐,签名,混淆

根据下面参考文档可以对项目的build.gradlew进行调整

签名是在Android节点下面加入如下代码:

signingConfigs {
release{
      storeFile file("../xxxxxxx.keystore")
      storePassword "xxxxxx"
      keyAlias "xxxxx"
      keyPassword "xxxxx"
}}

在buildTypes 下面的release下面加入如下选项:

代码如下:

signingConfig signingConfigs.release

对齐方面根据安卓官方文档说明按照上面两步代码修改之后已经对齐。可以准备安装了。

混淆(proguard),在buildTypes 下面的 release 下面加入如下选项:

代码如下:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

总结

经过研究以及实战,如果使用普通的笔记本电脑,我们的应用的30多个渠道大概需要使用31分钟的时间来进行构建。 如果使用RancherOS服务器Xeon X5675 两颗CPU 48G内存的刀片服务器构建的时间是1分6秒。

(0)

相关推荐

  • 详解docker使用阿里云Docker镜像库加速(修订版)

    官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 阿里的文档是错误的, 复制代码 代码如下: sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=https://pee6w651.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service 这一句改为 复制代码 代码如下: sudo s

  • Docker配置国内加速器加速镜像下载的方法

    引言 由于网络原因,我们在pull Image 的时候,从Docker Hub上下载会很慢...所以,国内的Docker爱好者们就添加了一一些国内的镜像(mirror),方便大家使用. 配置阿里云加速器1. 登录阿里开发者平台:https://dev.aliyun.com/search.html2. 点击"创建我的容器镜像" 3. 注册/登录后,进入Docker 镜像仓库 (https://cr.console.aliyun.com/#/imageList),选中加速器 Tab 这里可

  • ubuntu16.10安装docker17.03.0-ce并配置国内源和加速器

    说明:这个针对docker-ce安装,ce和ee的区别是前者是社区版,后者是企业版 1.  配置Ubuntu的源,不然慢的去哭吧.参考https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/注意版本要对应.我的源配置见附件http://xiazai.jb51.net/201705/yuanma/sources_jb51.rar. 2. 安装docker,按照官方教程https://docs.docker.com/engine/installation/l

  • docker 镜像加速CentOS7详细介绍

    前言 在Docker Hub官网上注册帐号,即可下载使用仓库里的全部的docker镜像.而因为网络原因,国内的开发者没办法流畅的下载镜像,经常会出现下载中断的错误.解决方法就是使用国内的容器Hub加速服务,本质就是更改pull优先级较高的服务器为国内的站点. 国内docker镜像加速站 阿里云 DaoCloud 灵雀云 系统环境 操作系统: CentOS 7 docker版本: 1.9.1 DaoCloud加速 DaoCloud现在是提供一个一键脚本配置registry-mirror,然而对于上

  • docker如何使用阿里加速器的方法

    最近在学习docker,发现docker hub速度慢,本文介绍了阿里云docker加速器,分享给大家 国外的docker hub速度慢这是公认的,而我们可以使用阿里提供的加速器,管理你的镜像,拉别人的镜像等等. 1.注册一个阿里的账号 2.进行加速器页面https://cr.console.aliyun.com/#/accelerator 3.复制你的加入器URL 4.将加速参数添加到docker启动项 echo "DOCKER_OPTS=\"\$DOCKER_OPTS --regi

  • 如何给Docker配置官方国内加速镜像

    在国内访问 Docker 官方的镜像,一直以来速度都慢如蜗牛.为了快速访问 Docker 官方镜像都会配置三方加速器,目前常用三方加速器有: 网易 . USTC . DaoCloud . 阿里云 . 现在 Docker 官方针对中国区推出了镜像加速服务.通过 Docker 官方镜像加速,国内用户能够以更快的下载速度和更强的稳定性访问最流行的 Docker 镜像. 如何使用官方镜像 Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问.目前该镜像库只包含流行的公

  • 详解docker国内镜像拉取和镜像加速registry-mirrors配置修改

    由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长.一般我们会使用镜像加速或者直接从国内的一些平台镜像仓库上拉取. 我比较常用的是网易的镜像中心和daocloud镜像市场. 网易镜像中心:https://c.163.com/hub#/m/home/ daocloud镜像市场:https://hub.daocloud.io/ 我们可以先查看下自己的镜像,使用命令: [root@localhost docker]# docker images [root@localhost

  • Docker使用阿里加速器安装centos教程

    上一篇说了hub.docker.com里拉个镜像太,而阿里云为我们做了不少本国镜像,这样下载的速度就很惊人了,下面看一下在centos7下配置阿里云加速器的方法 打开服务配置文件 vi /etc/yum.repos.d/CentOS-Base.repo 将mirrorlist地址改为咱们阿里云加速器的地址 然后ESC,:wq,保存退出 查看一下docket服务的运行状态,systemctl status docker 从阿里云拉个centos的docker镜像下来,docker pull cen

  • 使用Docker来加速构建Android应用的基本部署思路解析

    意义 极大的缩短安卓开发到测试到产品到渠道的距离. 给安卓程序员减轻负担. Google做的环境已经特别到位了,放到docker里面明显不会有多大的坑(误,逃). Dockerfile https://github.com/lijianying10/FixLinux/blob/master/dockerfiles/androidautobuild/Dockerfile 团队协作的故事 在敏捷开发的站立会议上,我作为一个后端程序员发现安卓程序员发布的时间大概是半个小时左右的时间,我觉得时间太长了应

  • Docker中镜像构建文件Dockerfile与相关命令的详细介绍

    前言 使用docker build命令或使用Docker Hub的自动构建功能构建Docker镜像时,都需要一个Dockerfile文件.Dockerfile文件是一个由一系列构建指令组成的文本文件,docker build命令会根据这些构建指令完成Docker镜像的构建.本文将会介绍Dockerfile文件,及其中使用的构建指令. 1. Dockerfile文件使用 docker build命令会根据Dockerfile文件及上下文构建新Docker镜像.构建上下文是指Dockerfile所在

  • jenkins 远程构建Android的过程详解

    由于企业的需求,需要做一个网站开分享每个版本的Android的app,所以需要使用的工具如下: Jenkins平台,远程编译环境服务器一台,web服务器一台,根据自己的选择,可以搭配自己的资源,废话少说,直奔主题 1. Jenkins的操作 在Jenkins中添加一个节点,设置好远程的工作目录,创建好服务器的标签,然后创建好相关的环境键值对,比如Android_home,Java_home,Gradle_home等,这些都是比较平常的操作,这里就不罗嗦了,值得注意的有两点:第一,java的路径问

  • spring Boot 应用通过Docker 来实现构建、运行、发布流程

    1. Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口.Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序. 2.环境搭建 JDK 1.8+ Maven 3.0+ Docker 最新版. 3.用 Maven 构建项目 3.1 创建目录结构 mkdir -p

  • docker自定义镜像构建php7的方法

    首先进行简单的docker安装. 要进行自定义镜像,我们需要选择一个基础镜像进行构建自己的镜像:其实说白了,就是在一个有基础定义好的容器内,执行安装各种程序的命令,生成 所谓的Dockerfile 文件,既然如此第一步我们首先需要找一个本地的镜像作为基础镜像来操作即可: 1 如上图所示,我们来以centos为基础镜像,来构建一个Dockerfile 2第二步我们需要构建一个目录,用于存放Dockerfile文件 在root下构建docker_demo目录,存放 Dockerfile文件以及需要安

  • 使用Docker+Jenkins自动构建部署

    本文介绍了Docker+Jenkins自动构建部署,分享给大家,具体如下: 环境 阿里云ESC,宿主机服务器安装Docker,在安全规则中确认8080端口开启. 客户端mac 运行jenkins 运行jenkins容器 在主机上创建目录,并添加读写权限以便jenkins应用运行时读写文件,如: $ mkdir -p /var/jenkins_node $ chmod 777 /var/jenkins_node 拉取jenkins镜像:docker pull jenkins,当前是2.60.3版.

  • Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有image,如果没有帮你 从镜像仓库 pull 下来 然后解析你写的dockerfile构建新的image. 本文带你了解 pull 命令 背后是怎么做的? build 命令 背后是怎么做的? 下篇文章带你解析: 如果我不用docker 我如何构建一个镜像? 我们以微软的aspnet2.2为基础构建一个

  • 使用docker build kit构建树莓派上可用的Docker镜像

    Docker安装 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG ${user_name} build-kit是什么 参考build ARM based Docker Images 简单来说就是扩展docker build的一个实验性的功能 以bind为案例进行构建 docker-bind项目是一个开源的自定义DNS部署服务,但是并没有提供基于linux/aarch

  • Docker执行DockerFile构建过程指令解析

    目录 DockerFile 简介 DockerFile 构建过程 DockerFile 指令解析 DockerFile 案例演示 构建一个 mycentos 镜像 DockerFile 简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么那些无法重复的问题.镜像构建透明性的问题.体积的问题就都会解决.这个脚本就是 Dockerfile. DockerFile 是用来构建 Docker 镜像的构建文

随机推荐