распаковка возвращает ненулевой код 2 на Android NDK zip (протестировано несколько версий)

#linux #docker #android-ndk #unzip

#linux #docker #android-ndk #распакуйте

Вопрос:

Я запускаю простые команды 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 я получаю ту же ошибку.

Запуск unzip с -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 r21c , r21b думая, что, возможно, это проблема с zip-архивом, но это не так. Контейнер — ubuntu: bionic.

Комментарии:

1. Я могу подтвердить, что inflating: /opt/android-ndk-r21d/wrap.sh/asan.sh это должно быть последним, что происходит во время распаковки. Возможно, проблема в том, что вы выбираете /opt в качестве цели. Рассмотрите возможность распаковки в домашний каталог. Вы можете переместить все дерево, куда захотите позже.

Ответ №1:

curl большую часть времени загружал поврежденные файлы. Собран с помощью sha1 веб-сайта Android и загруженного файла.

Перейдя к wget , это сработало…

Комментарии:

1. Это довольно странно. Обычно curl > wget .

Ответ №2:

Согласно справочной странице, код выхода 2 является общей ошибкой.

2 была обнаружена общая ошибка в формате zipfile. Обработка, возможно, в любом случае завершилась успешно; некоторые поврежденные zip-файлы, созданные другими архиваторами, имеют простые обходные пути.

Запустите unzip с опцией -v , чтобы увидеть диагностический вывод, который должен помочь устранить эту проблему.

Редактировать: я не совсем уверен, что происходит с unzip, но для меня работает следующее:

 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 amp;amp; apt-get -y install curl unzip amp;amp; apt-get clean amp;amp; 
    curl -L "${ANDROID_NDK_URL}" -o android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip amp;amp; 
    unzip -qq android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip -d ${SDK_HOME} amp;amp; 
    rm -f android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip amp;amp; 
    apt-get -y remove curl unzip amp;amp; apt-get -y autoremove amp;amp; rm -rf /var/lib/apt/lists/*
  

Дайте мне знать, если это поможет

Комментарии:

1. Спасибо за вашу помощь! Я обнаружил, что curl неправильно загружал файл. Большую часть времени он был поврежден. Я использовал th SHA1, предоставленный веб-сайтом Android, и сравнил. Простое изменение на wget сработало…

2. Странно. Сам никогда не испытывал ничего подобного, я рад, что вы заставили это работать.