当前位置: 首页 > news >正文

使用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.lryc.cn/news/265387.html

相关文章:

  • 4-Docker命令之docker load
  • 微信小程序格创校园跑腿小程序源码v1.1.64+前端
  • 【单元测试】测还是不测,这是一个问题
  • Global Mapper SDK 19 中文开发文档(八)
  • es检索之复合检索
  • 09.list 容器
  • 速盾网络:网站用速盾cdn的好处
  • Centos7在安装Graylog时新安装MongoDB报错端口不监听服务不启动无法运行启动失败
  • Spark Machine Learning进行数据挖掘的简单应用(兴趣预测问题)
  • DRF从入门到精通二(Request源码分析、DRF之序列化、反序列化、反序列化校验、序列化器常用字段及参数、source、定制字段、保存数据)
  • Flink系列之:Upsert Kafka SQL 连接器
  • 前端与后端的异步编排(promise、async、await 、CompletableFuture)
  • python打开opencv图像与QImage图像及其转化
  • linux 其他版本RCU
  • 【单调栈】LeetCode:2818操作使得分最大
  • uniapp 添加分包页面,配置分包预下载
  • 成功案例分享:物业管理小程序如何助力打造智慧社区
  • Electron执行本地cmd命令
  • YOLOv8改进 | 主干篇 | 利用MobileNetV3替换Backbone(轻量化网络结构)
  • MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类
  • LangChain入门指南:定义、功能和工作原理
  • 关键字:import关键字
  • 【C#】.net core 6.0 通过依赖注入注册和使用上下文服务
  • 关于redis单线程和IO多路复用的理解
  • 第四十一章 XML 映射参数摘要
  • redis之五种基本数据类型
  • RocketMQ系统性学习-RocketMQ高级特性之消息大量堆积处理、部署架构和高可用机制
  • Angular 进阶之五: Signals到底用不用?
  • 构建数字化金融生态系统:云原生的创新方法
  • 前端性能优化五:css和js位置