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- #
15- # SDK 34 (Defold 1.9.0):
16- #
17-
18- ENV ANDROID_BUILD_TOOLS_VERSION_34=34.0.0
19- ENV ANDROID_SDK_VERSION_34=34
20- ENV ANDROID_SDK_FILENAME_34=android-sdk-linux-android-${ANDROID_SDK_VERSION_34}-${ANDROID_BUILD_TOOLS_VERSION_34}.tar.gz
21-
22- ENV ANDROID_SDK_BUILD_TOOLS_PATH_34=${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS_VERSION_34}
23- ENV ANDROID_LIBRARYJAR_34=${ANDROID_HOME}/platforms/android-${ANDROID_SDK_VERSION_34}/android.jar
24-
25- #
26- # SDK 35 (Defold 1.9.8):
27- #
28-
29- ENV ANDROID_BUILD_TOOLS_VERSION_35=35.0.1
30- ENV ANDROID_SDK_VERSION_35=35
31- ENV ANDROID_SDK_FILENAME_35=android-sdk-linux-android-${ANDROID_SDK_VERSION_35}-${ANDROID_BUILD_TOOLS_VERSION_35}.tar.gz
32-
33- ENV ANDROID_SDK_BUILD_TOOLS_PATH_35=${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS_VERSION_35}
34- ENV ANDROID_LIBRARYJAR_35=${ANDROID_HOME}/platforms/android-${ANDROID_SDK_VERSION_35}/android.jar
35-
36- # We specify it in build_input.yml by setting it the first in PATH for new SDK
37- # But at least one SDK should be specified by default in Dockerfile
38- ENV PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_SDK_BUILD_TOOLS_PATH_34}
39- # ANDROID_SDK_VERSION used in Java code, default should be specified in Dockerfile as well:
40- ENV ANDROID_SDK_VERSION=${ANDROID_SDK_VERSION_35}
41-
42- #
43- # NDK25b (Defold 1.4.3):
44- #
45-
46- ENV ANDROID_NDK25_VERSION=25b
47- ENV ANDROID_NDK25_API_VERSION=19
48- ENV ANDROID_64_NDK25_API_VERSION=21
49-
50- # These paths are the same for both the 32 and 64 bit toolchains
51- ENV ANDROID_NDK25_PATH=${ANDROID_ROOT}/android-ndk-r${ANDROID_NDK25_VERSION}
52- ENV ANDROID_NDK25_BIN_PATH=${ANDROID_NDK25_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin
53- ENV ANDROID_NDK25_SYSROOT=${ANDROID_NDK25_PATH}/toolchains/llvm/prebuilt/linux-x86_64/sysroot
54- ENV ANDROID_NDK25_FILENAME=android-ndk-r${ANDROID_NDK25_VERSION}-linux.tar.gz
55-
56- # We specify it in build_input.yml by setting it the first in PATH
57- ENV PATH=${PATH}:${ANDROID_NDK25_BIN_PATH}
58-
59- # android proguard was version 4.7, this is at least 5.2.1 which seems to work with OpenJDK 11
60- RUN \
61- apt-get update && \
62- apt-get install -y --no-install-recommends proguard && \
63- ls -la /usr/share/java/proguard.jar
64-
65- ENV ANDROID_PROGUARD=/usr/share/java/proguard.jar
1+ ARG ANDROID_BUILD_TOOLS_VERSION_34=34.0.0
2+ ARG ANDROID_SDK_VERSION_34=34
3+ ARG ANDROID_BUILD_TOOLS_VERSION_35=35.0.1
4+ ARG ANDROID_SDK_VERSION_35=35
5+ ARG ANDROID_NDK25_VERSION=25b
6+ ARG ANDROID_NDK25_API_VERSION=19
7+ ARG ANDROID_64_NDK25_API_VERSION=21
8+ ARG PLATFORMSDK_DIR=/opt/platformsdk
9+ ARG ANDROID_ROOT=${PLATFORMSDK_DIR}/android
10+ ARG ANDROID_HOME=${ANDROID_ROOT}/android-sdk-linux
11+ ARG ANDROID_NDK25_PATH=${ANDROID_ROOT}/android-ndk-r${ANDROID_NDK25_VERSION}
12+ ARG ANDROID_NDK25_BIN_PATH=${ANDROID_NDK25_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin
13+ ARG ANDROID_SDK_HOME=${ANDROID_ROOT}/.android
14+ ARG ANDROID_SDK_BUILD_TOOLS_PATH_34=${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS_VERSION_34}
15+ ARG ANDROID_SDK_BUILD_TOOLS_PATH_35=${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS_VERSION_35}
16+
17+ FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-base-stage:1.0.0 AS build
18+
19+ ARG ANDROID_BUILD_TOOLS_VERSION_34
20+ ARG ANDROID_SDK_VERSION_34
21+ ARG ANDROID_BUILD_TOOLS_VERSION_35
22+ ARG ANDROID_SDK_VERSION_35
23+ ARG ANDROID_NDK25_VERSION
24+ ARG ANDROID_NDK25_API_VERSION
25+ ARG ANDROID_64_NDK25_API_VERSION
26+ ARG PLATFORMSDK_DIR
27+ ARG ANDROID_ROOT
28+ ARG ANDROID_HOME
29+ ARG ANDROID_NDK25_PATH
30+ ARG ANDROID_NDK25_BIN_PATH
31+ ARG ANDROID_SDK_HOME
32+ ARG ANDROID_SDK_BUILD_TOOLS_PATH_34
33+ ARG ANDROID_SDK_BUILD_TOOLS_PATH_35
34+
35+ ARG ANDROID_SDK_FILENAME_34=android-sdk-linux-android-${ANDROID_SDK_VERSION_34}-${ANDROID_BUILD_TOOLS_VERSION_34}.tar.gz
36+ ARG ANDROID_SDK_FILENAME_35=android-sdk-linux-android-${ANDROID_SDK_VERSION_35}-${ANDROID_BUILD_TOOLS_VERSION_35}.tar.gz
37+ ARG ANDROID_NDK25_FILENAME=android-ndk-r${ANDROID_NDK25_VERSION}-linux.tar.gz
38+ ARG R8_VERSION=8.7.0-dev
6639
6740RUN --mount=type=secret,id=DM_PACKAGES_URL,required=true \
68- echo "Android SDK" && \
6941 mkdir -p ${ANDROID_HOME} && \
7042 wget -q -O - $(cat /run/secrets/DM_PACKAGES_URL)/${ANDROID_NDK25_FILENAME} | tar xz -C ${ANDROID_ROOT} && \
7143 wget -q -O - $(cat /run/secrets/DM_PACKAGES_URL)/${ANDROID_SDK_FILENAME_34} | tar xz -C ${ANDROID_HOME} --strip-components=1 && \
@@ -88,29 +60,86 @@ RUN --mount=type=secret,id=DM_PACKAGES_URL,required=true \
8860 chmod ugo+rw -R ${ANDROID_SDK_HOME} && \
8961# fix permissions
9062 chmod +r -R ${ANDROID_ROOT} && \
91- chmod +w -R ${ANDROID_SDK_ROOT } && \
63+ chmod +w -R ${ANDROID_HOME } && \
9264 chmod -R 755 ${ANDROID_ROOT}/android-ndk-r${ANDROID_NDK25_VERSION} && \
9365# check that dx installed properly
94- ls -la ${ANDROID_SDK_BUILD_TOOLS_PATH_34}/d8 && \
95- ls -la ${ANDROID_SDK_BUILD_TOOLS_PATH_35}/d8 && \
9666 which ${ANDROID_NDK25_BIN_PATH}/armv7a-linux-androideabi${ANDROID_NDK25_API_VERSION}-clang++ && \
9767 which ${ANDROID_NDK25_BIN_PATH}/aarch64-linux-android${ANDROID_64_NDK25_API_VERSION}-clang++ && \
9868# check that aapt installed correctly
99- aapt v && \
100- aapt2 version
101-
69+ ${ANDROID_SDK_BUILD_TOOLS_PATH_34}/aapt2 version && \
10270# download and install R8 utility separatly. It's done in that way because
10371# R8/D8 received fixes from time to time which not populated with build tools
10472# It's ok that R8.jar downloaded but saved to D8.jar. Can't find D8 as separate utility.
10573# R8 contains all classes of D8.
106- ENV R8_VERSION=8.7.0-dev
107- RUN \
10874 wget -O ${ANDROID_SDK_BUILD_TOOLS_PATH_34}/lib/d8.jar https://storage.googleapis.com/r8-releases/raw/${R8_VERSION}/r8.jar && \
10975 wget -O ${ANDROID_SDK_BUILD_TOOLS_PATH_35}/lib/d8.jar https://storage.googleapis.com/r8-releases/raw/${R8_VERSION}/r8.jar
11076
77+ FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-android-env:1.7.0
78+
79+ ARG ANDROID_BUILD_TOOLS_VERSION_34
80+ ARG ANDROID_SDK_VERSION_34
81+ ARG ANDROID_BUILD_TOOLS_VERSION_35
82+ ARG ANDROID_SDK_VERSION_35
83+ ARG ANDROID_NDK25_VERSION
84+ ARG ANDROID_NDK25_API_VERSION
85+ ARG ANDROID_64_NDK25_API_VERSION
86+ ARG PLATFORMSDK_DIR
87+ ARG ANDROID_ROOT
88+ ARG ANDROID_HOME
89+ ARG ANDROID_NDK25_PATH
90+ ARG ANDROID_NDK25_BIN_PATH
91+ ARG ANDROID_SDK_HOME
92+ ARG ANDROID_SDK_BUILD_TOOLS_PATH_34
93+ ARG ANDROID_SDK_BUILD_TOOLS_PATH_35
94+
95+ ENV ANDROID_ROOT=${ANDROID_ROOT} \
96+ # ANDROID_HOME has been replaced with ANDROID_SDK_ROOT
97+ ANDROID_HOME=${ANDROID_HOME} \
98+ ANDROID_SDK_ROOT=${ANDROID_HOME} \
99+ # ANDROID_SDK_HOME is the location of the .android folder
100+ ANDROID_SDK_HOME=${ANDROID_SDK_HOME} \
101+ #
102+ # SDK 34 (Defold 1.9.0):
103+ #
104+ ANDROID_BUILD_TOOLS_VERSION_34=${ANDROID_BUILD_TOOLS_VERSION_34} \
105+ ANDROID_SDK_VERSION_34=${ANDROID_SDK_VERSION_34} \
106+ ANDROID_SDK_BUILD_TOOLS_PATH_34=${ANDROID_SDK_BUILD_TOOLS_PATH_34} \
107+ ANDROID_LIBRARYJAR_34=${ANDROID_HOME}/platforms/android-${ANDROID_SDK_VERSION_34}/android.jar \
108+ #
109+ # SDK 35 (Defold 1.9.8):
110+ #
111+ ANDROID_BUILD_TOOLS_VERSION_35=${ANDROID_BUILD_TOOLS_VERSION_35} \
112+ ANDROID_SDK_VERSION_35=${ANDROID_SDK_VERSION_35} \
113+ ANDROID_SDK_BUILD_TOOLS_PATH_35=${ANDROID_SDK_BUILD_TOOLS_PATH_35} \
114+ ANDROID_LIBRARYJAR_35=${ANDROID_HOME}/platforms/android-${ANDROID_SDK_VERSION_35}/android.jar \
115+ # ANDROID_SDK_VERSION used in Java code, default should be specified in Dockerfile as well:
116+ ANDROID_SDK_VERSION=${ANDROID_SDK_VERSION_35} \
117+ #
118+ # NDK25b (Defold 1.4.3):
119+ #
120+ ANDROID_NDK25_VERSION=${ANDROID_NDK25_VERSION} \
121+ ANDROID_NDK25_API_VERSION=${ANDROID_NDK25_API_VERSION} \
122+ ANDROID_64_NDK25_API_VERSION=${ANDROID_64_NDK25_API_VERSION} \
123+ # These paths are the same for both the 32 and 64 bit toolchains
124+ ANDROID_NDK25_PATH=${ANDROID_NDK25_PATH} \
125+ ANDROID_NDK25_BIN_PATH=${ANDROID_NDK25_BIN_PATH} \
126+ ANDROID_NDK25_SYSROOT=${ANDROID_NDK25_PATH}/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
127+ ANDROID_PROGUARD=/usr/share/java/proguard.jar \
128+ # We specify it in build_input.yml by setting it the first in PATH for new SDK
129+ # But at least one SDK should be specified by default in Dockerfile
130+ PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_SDK_BUILD_TOOLS_PATH_34}:${ANDROID_NDK25_BIN_PATH}
131+
132+ COPY --from=build ${ANDROID_ROOT} ${ANDROID_ROOT}
133+
134+ # android proguard was version 4.7, this is at least 5.2.1 which seems to work with OpenJDK 11
135+ RUN \
136+ apt-get update && \
137+ apt-get install -y --no-install-recommends proguard && \
138+ apt-get autoremove -y && \
139+ apt-get clean && \
140+ rm -rf /var/lib/apt/lists/* && \
111141# Since dotnet cannot really cross compile, we need to create a "ar" shim for "llvm-ar"
112142# As long as it's in the path, it will be picked up
113- RUN \
114143 echo '#!/usr/bin/env bash' > /usr/bin/ar && \
115144 find /opt/platformsdk/android -iname "llvm-ar" | tail -1 | xargs xargs printf "%s \$*\n" $1 >> /usr/bin/ar && \
116- chmod +x /usr/bin/ar
145+ chmod +x /usr/bin/ar
0 commit comments