文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 09:13

关注

意义

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

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

团队协作的故事

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

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

考虑范围

系统底层依赖 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
第二点中目的有三个:

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

需要备份的点有两个

/root/.gradle 备份这个目录可以在以后自动化构建的时候不需要重复安装gradlew。 $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中部署tomcat并且部署java应用程序的步骤详解在Docker上开始部署Python应用的教程在Docker快速部署Node.js应用的详细步骤详解如何在 Docker 中设置 Go 并部署应用Ubuntu Docker 的安装部署及简单应用详解在Docker容器中运行Spring Boot应用Docker 搭建lamp应用实例详解Docker 镜像、容器、仓库的概念及应用详解docker中Dockerfile方式建立镜像HelloWorldDocker搭建简单的应用栈与容器Hello World访问详解


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯