使用docker创建自己的Android编译容器

文章目录

      • 背景
      • 步骤
        • 1.创建Dockerfile
        • 2.编写Dockerfile指令
        • 3.编译
        • 4.使用

背景

每次拿到新机器或者系统重装,最麻烦的就是各种环境配置,最近学习了一下docker的知识,用dockerfile创建一个Android编译容器,这样就不用每次都吭哧吭哧的配置各种环境,至少编译可以方便点,开发环境还是得手动配的。

步骤

1.创建Dockerfile

新建一个目录,创建Dockerfile,并在这个目录下创建apps文件夹,在这个文件夹下放入jdk和commandlinetools,这个需要我们去官网上下载。
在这里插入图片描述
jdk:https://www.oracle.com/java/technologies/downloads/
commandline:https://developer.android.com/studio?gclid=Cj0KCQiA4Y-sBhC6ARIsAGXF1g5cCwfbTSfschbk_6x-YpZv3lN5PEDKAX3x18d71w54crTtfJYitbYaAoCpEALw_wcB&gclsrc=aw.ds&hl=zh-cn
在这里插入图片描述

2.编写Dockerfile指令
# 基于ubuntu基础镜像
FROM ubuntu:latest# 安装常用命令
RUN apt-get update \&& apt-get install -y curl \&& apt-get install -y wget \&& apt-get install -y zip \&& apt-get install -y unzip \&& apt-get install -y tar \&& apt-get install -y lsof \&& apt-get install -y git \&& apt-get install -y git-lfs \&& git lfs install \&& apt-get install -y tar \&& apt-get install -y python3 \&& apt-get clean all#设置工作目录
WORKDIR /home
COPY apps/ /home/# 设置java环境
RUN mkdir -p /opt/app/jdk \&& tar -xzvf jdk-17_linux-x64_bin.tar.gz -C /opt/app/jdk \&& rm jdk-17_linux-x64_bin.tar.gz
ENV JAVA_HOME=/opt/app/jdk/jdk-17.0.9
ENV PATH=$PATH:$JAVA_HOME/bin# 设置android环境
RUN mkdir -p /opt/app/android-sdk \&& unzip commandlinetools-linux-10406996_latest.zip -d /opt/app/android-sdk/ \&& rm commandlinetools-linux-10406996_latest.zip \&& mkdir -p /opt/app/android-sdk/cmdline-tools/latest \&& find /opt/app/android-sdk/cmdline-tools/ -maxdepth 1 -mindepth 1 -not -name 'latest' -exec mv {} /opt/app/android-sdk/cmdline-tools/latest/ \;
ENV ANDROID_HOME=/opt/app/android-sdk
ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin# 安装需要的platforms和build-tools版本
RUN yes | /opt/app/android-sdk/cmdline-tools/latest/bin/sdkmanager "platforms;android-34" \&& yes | /opt/app/android-sdk/cmdline-tools/latest/bin/sdkmanager "build-tools;30.0.3" 

这里的指令还是比较简单的,比如 COPY 就可以将apps文件夹下的文件复制到容器的home目录,ENV设置环境变量,RUN可以执行shell命令。
需要注意的是,RUN和COPY指令都会增加容器的层级,所以我们尽可能的将可以合并的指令通过 && 连接起来,以此来减少容器的层级,减少容器的大小。

3.编译

在根目录下执行以下指令

docker build -t android-package:0.0.1 . 

等待执行完成就可以看到我们编译出来的镜像了
在这里插入图片描述

4.使用

我们用这个镜像创建一个容器,并进入到这个容器中

docker run -it android-package:0.0.1 /bin/bash

发现已经有java的环境变量了
在这里插入图片描述
再clone一个工程,尝试编译,发现能够编译成功。
在这里插入图片描述
大功告成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/580871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 通过(三维坐标)生成(三维曲面地形图)和(圆柱曲面地形图)

有需要源代码CSDN私信我 注意 python项目移植前要进行以下操作 1.python项目备份 2.生成requirements.txt的库文件 以pycharm为例,生成Python项目所需要的依赖库/包文档:requirements.txt_如何将pycharm项目安装的库文件导出为requirement.txt-CSDN博…

揭秘千巡翼X4卫星通讯无人机

揭秘千巡翼X4卫星通讯无人机 在无人机作业的时候,经常遇到这些异常场景,例如通信网络中断,强干扰,导致无人机无法与飞手通信等。而这些给无人机作业带来三大难题: 难题1,山区作业时通信中断,飞…

Cookie的详解使用(创建,获取,销毁)

文章目录 Cookie的详解使用(创建,获取,销毁)1、Cookie是什么2、cookie的常用方法3、cookie的构造和获取代码演示SetCookieServlet.javaGetCookieServlet.javaweb.xml运行结果如下 4、Cookie的销毁DestoryCookieServletweb.xml运行…

Swift 周报 第四十二期

文章目录 前言新闻和社区苹果 CEO 库克透露接班计划,希望继任者来自公司内部消息称苹果自研 5G 调制解调器开发再“难产”,将推迟到 2026 年 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第四十二期&…

Android10(SDK29)以后存储问题

如果你的targetSDK>29 1:使用系统给app分配的内部存储不需要存储权限? 例如:context.getExternalFilesDir(null),随意使用 2:不能随意在外部存储创建文件/文件夹; 例如:Environment.getE…

maven工具的搭建以及使用

文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:🎀首先进行maven工具的搭建🦓1.[打开下载 maven 服务器官网](http://maven.apache.org)🪅2.解压之后,配置环境变量🏨3.打开设…

[前端已死论]——“Java 已死、前端已凉”

一、为什么会出现“前端已死”的言论 信息溯源:“前端已死”的论调是如何传播的? - 知乎 前端已死的真相! - 知乎 好几次看到有其他程序员说:“前端已死!”,这句话虽然太极端了,但是我是比较…

Python入门-组合数据类型(元组,字典,集合)

1.元组 元组 是Python中内置的 不可变序列 在Python中使用 ( ) 定义元组,元素与元素之间使用 英文的逗号分隔 元组总 只有一个 元素的是否,逗号不能省略 元组的创建与删除 # 使用小括号创建元组 t(hello,[10,20,30],python,world) print(t)#使用内置函…

JVM基础原理篇-带你深入拆解G1垃圾回收原理

一、一统天下的G1垃圾回收器概述 大白话: 1.整个堆空间,新生代和老年代比例大概为2:8; 2.正常情况下,新生代回收是高频的,混合回收是频率是适中的,完全回收则是基本不会发生、频率低代价高的,一…

Unity之DOTweenPath轨迹移动

Unity之DOTweenPath轨迹移动 一、介绍 DOTweenPath二、操作说明1、Scene View Commands2、INfo3、Tween Options4、Path Tween Options5、Path Editor Options:轨迹编辑参数,就不介绍了6、ResetPath:重置轨迹7、Events:8、WayPoin…

什么是众创空间?他有什么特点?

众创空间,是一种为大众创新创业提供专业化服务的创业服务平台,是顺应网络时代创新创业特点和需求,通过市场化机制、专业化服务和资本化途径构建的低成本、便利化、全要素、开放式的新型创业服务平台的统称。众创空间包括创客空间、联合办公空…

KCTF2023_签到题 1

题目环境: 提示说只有管理员权限才可以访问 考虑到伪造Client-Ip准备工作: 所需工具:Kali、burp suite、火狐浏览器 抓包-伪造Client-Ip-放包 得到flag:flag{tdQvKTtPj7v1lbhkDPesHb}

redis的搭建及应用(三)-Redis主从配置

Redis主从配置 为提升Redis的高可用性,需要搭建多个Redis集群以保证高可用性。常见搭建方式有:主从,哨兵集群等,本节我们搭建一主二从的多Redis架构。 redis主从安装1主2从的方式配置,以端口号为redis的主从文件夹。 主…

python作业题百度网盘,python作业答案怎么查

大家好,小编来为大家解答以下问题,python作业题百度网盘,python作业答案怎么查,今天让我们一起来看看吧! 1 以下代码的输出结果为: alist [1, 2, 3, 4] print(alist.reverse()) print(alist) A.[4, 3, 2, …

从 Google Gemini 到 OpenAI Q*(Q-Star):调研重塑生成人工智能(AI)的研究

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 这篇综述探讨了生成式人工智能不断发展的前景,重点关注混合专家(MoE)、多模态学习的变革性影响,以及对…

解决xcode15下载模拟器慢以及没有断点续传

问题描述:Xcode15 为了最小化安装包大小,iOS17模拟器需要单独安装。然而下载模拟器的时候,经常出现Could not download iOS... 的下载失败提示。 以下为解决方案: 一、直接下载IOS17模拟器的包 以下两种方式都可以 方法一&…

学习笔记:数据挖掘与机器学习

文章目录 一、数据挖掘、机器学习、深度学习的区别(一)数据挖掘(二)机器学习(三)深度学习(四)总结 二、数据挖掘体系三、数据挖掘的流程四、典型的数据挖掘系统 一、数据挖掘、机器学…

2023:代码岁月如歌,技术之路踏实前行

前言 转眼之间,2023年即将谢幕,这一年对于我而言充满了挑战、收获与成长。在这篇博客中,我将分享我在技术领域的一些心得体会,以及在项目和职场中的所思所感。愿这些文字能够为你带来启发,同时让我能够在反思中更进一…

Vuex状态管理(报警信息数量跟随变化)

需求:侧边栏显示报警信息数量 在store/project.js文件中定义相关状态 // 存储项目信息 const projectInfo JSON.parse(sessionStorage.getItem(projectInfo)) ? JSON.parse(sessionStorage.getItem(projectInfo)) : ; import { getUntreatedProjectAlarm } from …

Qt Creator可视化交互界面exe快速入门4

上一期介绍了信号与槽,本期介绍加法计算器 我们来新建一个项目 然后拖动设置按钮 还需要个输出框 这里拖动Line Edit 我这里只是简单演示一下,做个低配版计算器,再加个加号和一个等于号就结束了。 然后回到代码编辑部分,我们需要…