|
| 1 | +FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-android-env:1.6.0 |
| 2 | + |
| 3 | +# |
| 4 | +# Android SDK/NDK |
| 5 | +# https://developer.android.com/studio/command-line/variables |
| 6 | +# |
| 7 | +ENV ANDROID_ROOT=${PLATFORMSDK_DIR}/android |
| 8 | +# ANDROID_HOME has been replaced with ANDROID_SDK_ROOT |
| 9 | +ENV ANDROID_HOME=${ANDROID_ROOT}/android-sdk-linux |
| 10 | +ENV ANDROID_SDK_ROOT=${ANDROID_HOME} |
| 11 | +# ANDROID_SDK_HOME is the location of the .android folder |
| 12 | +ENV ANDROID_SDK_HOME=${ANDROID_ROOT}/.android |
| 13 | + |
| 14 | +ENV ANDROID_BUILD_TOOLS_VERSION=36.1.0 |
| 15 | +ENV ANDROID_SDK_VERSION=36 |
| 16 | +ENV ANDROID_SDK_FILENAME=android-sdk-linux-android-${ANDROID_SDK_VERSION}-${ANDROID_BUILD_TOOLS_VERSION}.tar.gz |
| 17 | + |
| 18 | +ENV ANDROID_SDK_BUILD_TOOLS_PATH=${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS_VERSION} |
| 19 | +ENV ANDROID_LIBRARYJAR=${ANDROID_HOME}/platforms/android-${ANDROID_SDK_VERSION}/android.jar |
| 20 | + |
| 21 | +# We specify it in build_input.yml by setting it the first in PATH for new SDK |
| 22 | +# But at least one SDK should be specified by default in Dockerfile |
| 23 | +ENV PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_SDK_BUILD_TOOLS_PATH} |
| 24 | +# ANDROID_SDK_VERSION used in Java code, default should be specified in Dockerfile as well: |
| 25 | +ENV ANDROID_SDK_VERSION=${ANDROID_SDK_VERSION} |
| 26 | + |
| 27 | +ENV ANDROID_NDK_VERSION=25b |
| 28 | +ENV ANDROID_NDK_API_VERSION=19 |
| 29 | +ENV ANDROID_64_NDK_API_VERSION=21 |
| 30 | + |
| 31 | +# These paths are the same for both the 32 and 64 bit toolchains |
| 32 | +ENV ANDROID_NDK_PATH=${ANDROID_ROOT}/android-ndk-r${ANDROID_NDK_VERSION} |
| 33 | +ENV ANDROID_NDK_BIN_PATH=${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin |
| 34 | +ENV ANDROID_NDK_SYSROOT=${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/sysroot |
| 35 | +ENV ANDROID_NDK_FILENAME=android-ndk-r${ANDROID_NDK_VERSION}-linux.tar.gz |
| 36 | + |
| 37 | +# We specify it in build_input.yml by setting it the first in PATH |
| 38 | +ENV PATH=${PATH}:${ANDROID_NDK_BIN_PATH} |
| 39 | + |
| 40 | +# android proguard was version 4.7, this is at least 5.2.1 which seems to work with OpenJDK 11 |
| 41 | +RUN \ |
| 42 | + apt-get update && \ |
| 43 | + apt-get install -y --no-install-recommends proguard && \ |
| 44 | + ls -la /usr/share/java/proguard.jar |
| 45 | + |
| 46 | +ENV ANDROID_PROGUARD=/usr/share/java/proguard.jar |
| 47 | + |
| 48 | +RUN --mount=type=secret,id=DM_PACKAGES_URL,required=true \ |
| 49 | + echo "Android SDK" && \ |
| 50 | + mkdir -p ${ANDROID_HOME} && \ |
| 51 | + wget -q -O - $(cat /run/secrets/DM_PACKAGES_URL)/${ANDROID_NDK_FILENAME} | tar xz -C ${ANDROID_ROOT} && \ |
| 52 | + wget -q -O - $(cat /run/secrets/DM_PACKAGES_URL)/${ANDROID_SDK_FILENAME} | tar xz -C ${ANDROID_HOME} --strip-components=1 && \ |
| 53 | + rm -rf ${ANDROID_HOME}/extras && \ |
| 54 | + rm -rf ${ANDROID_NDK_PATH}/prebuilt && \ |
| 55 | + rm -rf ${ANDROID_NDK_PATH}/simpleperf && \ |
| 56 | + rm -rf ${ANDROID_NDK_PATH}/shader-tools && \ |
| 57 | + rm -rf ${ANDROID_NDK_PATH}/sources/third_party && \ |
| 58 | + rm -rf ${ANDROID_NDK_PATH}/sources/cxx-stl && \ |
| 59 | + rm -rf ${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/i686-linux-android && \ |
| 60 | + rm -rf ${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/x86_64-linux-android && \ |
| 61 | + rm -rf ${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-* && \ |
| 62 | + rm -rf ${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-* && \ |
| 63 | + rm -rf ${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android && \ |
| 64 | + rm -rf ${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android && \ |
| 65 | +# create the .android folder and give read+write permissions (the Android Gradle plugin will write to the folder) |
| 66 | +# It is not enough to give 'user' and 'group'. We unfortunately also need 'others' |
| 67 | + mkdir ${ANDROID_SDK_HOME} && \ |
| 68 | + chmod ugo+rw -R ${ANDROID_SDK_HOME} && \ |
| 69 | +# fix permissions |
| 70 | + chmod +r -R ${ANDROID_ROOT} && \ |
| 71 | + chmod +w -R ${ANDROID_SDK_ROOT} && \ |
| 72 | + chmod -R 755 ${ANDROID_ROOT}/android-ndk-r${ANDROID_NDK_VERSION} && \ |
| 73 | +# check that dx installed properly |
| 74 | + ls -la ${ANDROID_SDK_BUILD_TOOLS_PATH}/d8 && \ |
| 75 | + which ${ANDROID_NDK_BIN_PATH}/armv7a-linux-androideabi${ANDROID_NDK_API_VERSION}-clang++ && \ |
| 76 | + which ${ANDROID_NDK_BIN_PATH}/aarch64-linux-android${ANDROID_64_NDK_API_VERSION}-clang++ && \ |
| 77 | +# check that aapt installed correctly |
| 78 | + aapt v && \ |
| 79 | + aapt2 version |
| 80 | + |
| 81 | +# download and install R8 utility separatly. It's done in that way because |
| 82 | +# R8/D8 received fixes from time to time which not populated with build tools |
| 83 | +# It's ok that R8.jar downloaded but saved to D8.jar. Can't find D8 as separate utility. |
| 84 | +# R8 contains all classes of D8. |
| 85 | +ENV R8_VERSION=8.13.19 |
| 86 | +RUN wget -O ${ANDROID_SDK_BUILD_TOOLS_PATH}/lib/d8.jar https://storage.googleapis.com/r8-releases/raw/${R8_VERSION}/r8.jar |
| 87 | + |
| 88 | +# Since dotnet cannot really cross compile, we need to create a "ar" shim for "llvm-ar" |
| 89 | +# As long as it's in the path, it will be picked up |
| 90 | +RUN \ |
| 91 | + echo '#!/usr/bin/env bash' > /usr/bin/ar && \ |
| 92 | + find /opt/platformsdk/android -iname "llvm-ar" | tail -1 | xargs xargs printf "%s \$*\n" $1 >> /usr/bin/ar && \ |
| 93 | + chmod +x /usr/bin/ar |
0 commit comments