使用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.hqwc.cn/news/295237.html

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

相关文章

第九周算法题(哈希映射,二分,Floyd算法 (含详细讲解) )

第九周算法题 第一题 题目来源&#xff1a;33. 搜索旋转排序数组 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a;整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 <…

R软件包ConsensusCluster进行共识聚类(Consensus Clustering)

从下面论文看到这个方法&#xff1a; Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. 这篇论文基于 AI 方法对 bulk RNA-seq 数据识别肿瘤微环…

Python入门知识点分享——(八)文件的open方法

学完了Python当中的数据类型&#xff0c;下一步我们来了解如何用Python语言打开文件并添加内容。 目录 file mode buffering encoding errors newline closefd opener 函数 打开文件需要用到open函数&#xff0c;完整的语法格式如下所示&#xff0c;为了演示方便&…

内部FLASH模拟EPPROM

本例程基于STM32F103ZET6 FLASH大小为512K。 介绍FLASH 不同型号的 STM32&#xff0c;其 FLASH 容量也有所不同&#xff0c;最小的只有 16K 字节&#xff0c;最大的则达到了 1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节&#xff0…

Centos安装vsftpd:centos配置vsftpd,ftp报200和227错误

一、centos下载安装vsftpd&#xff08;root权限&#xff09; 1、下载安装 yum -y install vsftpd 2、vsftpd的配置文件 /etc/vsftpd.conf 3、备份原来的配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup 4、修改配置文件如下&#xff1a;vi /etc/vsftpd.conf …

基于Java SSM框架实现实现班级同学录、聚会报名网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现班级同学录聚会报名网站系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人…

懂机器学习?先来回答这三个问题 >>

机器学习是一种数据分析技术&#xff0c;让计算机学习人类和动物与生俱来的能力&#xff1a;从经验中学习。 机器学习算法使用计算方法直接从数据中“学习”信息&#xff0c;而不依赖于预定方程作为模型。 随着可用于学习的样本数量的增加&#xff0c;算法也会相应地提高性能。…

html5实现最高端的公司年会抽奖(源码)

文章目录 1.设计来源1.1 主界面1.2 抽奖效果1.3 中奖效果 2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13517192…

C++加法运算符的重载(operator)

1.重载加法运算符 为什么要重载加法运算符&#xff1f; 因为C提供的加法运算符只能满足基本数据类型间的加法&#xff0c;如果我想让俩个相同的类的对象进行加法的话会报错 所以为了能让俩个相同类的对象进行加法&#xff0c;我们要把这个过程封装到一个函数里面&#xff0c;只…

解决 MATLAB 遗传算法中 exitflg=4 的问题

一、优化问题简介 以求解下述优化问题为例&#xff1a; P 1 : min ⁡ p ∑ k 1 K p k s . t . { ∑ k 1 K R k r e q l o g ( 1 α k ∗ p k ) ≤ B b s , ∀ k ∈ K p k ≥ 0 , ∀ k ∈ K \begin{align} {P_1:}&\mathop{\min}_{\bm{p}}{ \sum\limits_{k1}^K p_k } \no…

HTML+CSS做一个时尚柿子造型计时器

文章目录 💕效果展示💕代码展示HTMLJS💕效果展示 💕代码展示 HTML <!DOCTYPE html> <html lang

Featured Based知识蒸馏及代码(3): Focal and Global Knowledge (FGD)

文章目录 1. 摘要2. Focal and Global 蒸馏的原理2.1 常规的feature based蒸馏算法2.2 Focal Distillation2.3 Global Distillation2.4 total loss3. 实验论文: https://arxiv.org/pdf/2111.11837.pdf