在 Android NDK zip 上解压 returns 非零代码 2(已测试多个版本)

unzip returns non-zero code 2 on Android NDK zip (tested multiple versions)

我 运行 使用简单的 docker 命令 (ubuntu:bionic) 下载 Android NDK 并解压缩:

ENV ANDROID_NDK_VERSION r21d
ENV ANDROID_NDK_URL http://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip
RUN curl -L "${ANDROID_NDK_URL}" -o android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip
RUN unzip android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip -d ${SDK_HOME}

但我总是得到(即使我删除所有内容并重新开始):

  creating: /opt/android-ndk-r21d/wrap.sh/
  inflating: /opt/android-ndk-r21d/wrap.sh/asan.sh  
The command '/bin/sh -c unzip android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip -d ${SDK_HOME}' returned a non-zero code: 2

/opt/android-ndk-r21d/wrap.sh/asan.sh是最后要解压的东西。在 r20 上,它是 inflating: /opt/android-ndk-r20/ndk-stack,然后我得到同样的错误。

运行 按照下面的建议用 -v 解压缩会给出一个奇怪的输出:

   16704  Defl:X     3281  80% 2019-05-22 12:47 80a0acc7  android-ndk-r20/sources/android/native_app_glue/android_native_app_glue.c
     577  Defl:X      371  36% 2019-05-22 12:47 e63c146e  android-ndk-r20/sources/android/native_app_glue/NOTICE
     439  Defl:X      282  36% 2019-05-22 12:47 8fc9fc18  android-ndk-r20/sources/android/native_app_glue/Android.mk
       0  Stored        0   0% 2019-05-22 12:47 00000000  android-ndk-r20/sources/android/renderscript/
     577  Defl:X      371  36% 2019-05-22 12:47 e63c146e  android-ndk-r20/sources/android/renderscript/NOTICE
     813  Defl:X      234  71% 2019-05-22 12:47 bfbf4628  android-ndk-r20/sources/android/renderscript/Android.mk
    2172  Defl:X     1117  49% 2019-05-22 12:47 43b8cf66  android-ndk-r20/CHANGELOG.md
      92  Defl:X       86   7% 2019-05-22 12:50 250f0ae3  android-ndk-r20/ndk-stack
--------          -------  ---                            -------
3049400190         854740668  72%                            18484 files

立即执行(解压缩没有延迟),然后图像继续构建,但当它完成时,解压缩的目标上没有任何内容。

我尝试下载 sdk r21cr21b 认为可能是 zip 存档的问题,但事实并非如此。容器是 ubuntu:bionic.

根据 man page 退出代码 2 是一般错误。

2 a generic error in the zipfile format was detected. Processing may have completed successfully anyway; some broken zipfiles created by other archivers have simple work-arounds.

运行 unzip 使用选项 -v 查看诊断输出,这应该有助于调试此问题。

编辑:我不太确定解压缩发生了什么,但以下对我有用:

FROM ubuntu:bionic

ENV SDK_HOME /var/ndk
ENV ANDROID_NDK_VERSION r21d
ENV ANDROID_NDK_URL http://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip
RUN apt-get update && apt-get -y install curl unzip && apt-get clean && \
    curl -L "${ANDROID_NDK_URL}" -o android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip && \
    unzip -qq android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip -d ${SDK_HOME} && \
    rm -f android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip && \
    apt-get -y remove curl unzip && apt-get -y autoremove && rm -rf /var/lib/apt/lists/*

如果有帮助请告诉我

curl 大部分时间都在下载损坏的文件。使用来自 android 网站和下载文件的 sha1 进行压缩。

通过移动到 wget 它起作用了...