I run this command on docker to install some android-sdk components:
RUN mkdir ${ANDROID_HOME} && wget --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip \
&& unzip android-sdk.zip -d ${ANDROID_HOME} \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} --list \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "build-tools;25.0.1" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "build-tools;28.0.3" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "build-tools;29.0.2" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "platform-tools" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "platforms;android-25" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "platforms;android-28" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "platforms;android-30" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "extras;android;m2repository" \
&& echo y | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "extras;google;google_play_services" \
&& ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "ndk;${ANDROID_NDK_VERSION}" \
&& ${SDKMANAGER} --sdk_root=${ANDROID_HOME} "cmake;3.10.2.4988404" \
&& yes | ${SDKMANAGER} --sdk_root=${ANDROID_HOME} --update
since it's a docker image, I must run everything in the same command, otherwise the images will have too much extra layers and occupy too much space.
The problem is that because of mu unreliable internet, it's very likely that I get a tag mismatch for one of these components being installed, what makes me have to run the process again. I'm having to build my docker image more than 30 times to get it to execute all the commands sucessfully.
Is there a way to retry on tag mismatch in the android-sdk?
I also thought of trying to run each line individually but still inside one big command.
Maybe
while true; do
subcommand1
if [ $? -eq 0 ]; then
break
fi
sleep 1
done
while true; do
subcommand2
if [ $? -eq 0 ]; then
break
fi
sleep 1
done
This would be easy on a .sh file by creating a function that does the while loop, but what if I want to do everything in the Dockerfile?
Anyone has a better idea?