#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. Странно. Сам никогда не испытывал ничего подобного, я рад, что вы заставили это работать.