热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了使用Docker来加速构建Android应用的部署思路解析,在服务器中通过Docker镜像来获得更高效的开发和测试流程,需要的朋友可以参考下

意义

极大的缩短安卓开发到测试到产品到渠道的距离。
给安卓程序员减轻负担。
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秒。


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
author-avatar
mobiledu2502858053
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有