xor*_*ate 11 android android-sdk-tools docker
我正在尝试使用Shippable创建一个可用于构建Android项目的docker镜像.
问题是android update sdk命令,它给出以下错误:
Installing Android SDK Tools, revision 24.2
Failed to rename directory /opt/android-sdk-linux/tools to /opt/android-sdk-linux/temp/ToolPackage.old01.
Failed to create directory /opt/android-sdk-linux/tools
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一些解决方案:https://stackoverflow.com/a/8839359/867099但它适用于Windows,似乎没有解决linux上的问题.似乎在更新命令期间,当前目录正在使用中,因此无法重命名.
使用该工作方法提示我的解决方法是:
RUN cp -r /opt/android-sdk-linux/tools /opt/android-sdk-linux/tools_copy
RUN cd /opt/android-sdk-linux/tools && echo 'y' | /opt/android-sdk-linux/tools_copy/android update sdk --no-ui -a --filter tools,platform-tools,build-tools-22.0.1,android-21,extra-android-support,extra-google-google_play_services --force
Run Code Online (Sandbox Code Playgroud)
为了自动接受许可证,我echo 'y'去了android命令.
但我认为该android命令也应该在正确的目录中运行,这就是我cd首先进入它的原因.
但是,它仍然失败.我很难解决如何解决这个问题,所以任何帮助都表示赞赏.
------更新--------
我在android sdk update没有tools过滤器的情况下运行命令,最后,我的gradle构建成功.所以我不确定不更新它们是否有问题......
小智 10
这可以通过在单个Dockerfile命令中组合所有Android SDK命令来解决RUN.它与Docker的文件系统有关.
有关Android开源项目问题跟踪器的帖子的详细说明:
在Docker容器中运行SDK更新时会导致此问题.Docker使用一个特殊的文件系统,它的工作方式类似于版本控制系统(例如git),并记录对文件系统所做的所有更改.问题是SDK更新使用硬链接移动操作来移动'tools'目录,底层Docker文件系统不支持该目录.
解决方案是在Docker中的单个"RUN"命令中简单地运行所有Android SDK命令.这样,只要您不在多个RUN命令(快照)之间使用"硬链接移动"操作,硬链接移动就会正常工作.这样做的好处还在于您的Docker层将更小(与运行多个单独的RUN命令相比).
这是Dockerfile中的行:
RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \
tar xzf android-sdk_r24.4.1-linux.tgz && \
rm android-sdk_r24.4.1-linux.tgz && \
(echo y | android-sdk-linux/tools/android -s update sdk --no-ui --filter platform-tools,tools -a ) && \
(echo y | android-sdk-linux/tools/android -s update sdk --no-ui --filter extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository -a) && \
(echo y | android-sdk-linux/tools/android -s update sdk --no-ui --filter build-tools-23.0.2,android-24 -a)
Run Code Online (Sandbox Code Playgroud)
这就是我目前正在做的事情,您可以在下面看到更新命令成功运行。在我的环境中,这些是一个层次结构中的 3 个不同的 docker 镜像,因此如果您的情况不是这样,FROM您可以组合很多镜像。apt-get
FROM ubuntu:14.04
# Set debconf to run non-interactively
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
apt-transport-https \
build-essential \
ca-certificates \
curl \
git \
libssl-dev \
python \
rsync \
software-properties-common \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install the JDK
RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections && \
add-apt-repository -y ppa:webupd8team/java && \
apt-get update -qq && \
DEBIAN_FRONTEND=noninteractive apt-get install -qqy --force-yes oracle-java7-installer && \
rm -rf /var/lib/apt/lists/* /var/cache/oracle-jdk7-installer
# Install Android Dev Tools
RUN apt-get update && apt-get install -y -q --no-install-recommends \
lib32ncurses5 \
lib32stdc++6 \
lib32z1 \
libswt-gtk-3-java \
unzip \
&& rm -rf /var/lib/apt/lists/*
RUN wget -qO- "http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz" | tar -zxv -C /opt/
RUN cd /opt/android-sdk-linux/tools/ && \
echo y | ./android update sdk --all --filter platform-tools,build-tools-20.0.0,android-17,sysimg-17,system-image,extra-android-support --no-ui --force
ENV PATH /opt/android-sdk-linux/build-tools/20.0.0:$PATH
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2974 次 |
| 最近记录: |