关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »如何利用 Docker 环境加速 Android 应用的构建

    如何利用 Docker 环境加速 Android 应用的构建

    2016-01-09 00:00:00 出处:soul_code
    分享

    意义

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

    如何利用 Docker 环境加速 Android 应用的构建

    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秒。

    因为写文章的时间仓促,很多地方写的不明白希望大家能够指出来,方便我改进,另外本人安卓水平非常一般请大神们批评指正。十分感谢。

    注:下面的文献非常具有参考价值。

    主要参考文献

    [1] Building and Running from the Command Line?http://developer.android.com/intl/pt-br/tools/building/building-cmdline.html

    [2] Configuring ProGuard?http://developer.android.com/intl/pt-br/tools/help/proguard.html

    [3] Signing Your Applications?http://developer.android.com/intl/pt-br/tools/publishing/app-signing.html

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。