Skip to content

Commit 14ebee0

Browse files
authored
Code quality improvements (#909)
* Harden manifest merge tool * Harden regex used for parsing Pod versions * Introduced SanboxedPath to avoid different path-traversal issues * Rework docker images. Used multi-stage build to decrease result size of images * Updated to Spring boot 4.0.4 * Sanitized javac command. Sanitized build.gradle content from extensions. Added checks for file paths. Made integration tests runnable on Windows * Fix emsdk image cleanup. Added missed build-docker.sh changes
1 parent 306a91b commit 14ebee0

53 files changed

Lines changed: 1735 additions & 668 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

server/build-docker.sh

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,30 @@ DOCKER_XBOX_PRIVATE_REGISTRY=$REGISTRY_PREFIX/extender-xbox-private-registry
1616
MULTI_ARCH="linux/amd64"
1717
[[ -z "$NO_ARM64" ]] && MULTI_ARCH+=",linux/arm64"
1818

19+
# base stage image (shared across Dockerfiles)
20+
echo "Base stage image with archs: $MULTI_ARCH"
21+
docker buildx build --load --platform $MULTI_ARCH -t $DOCKER_REGISTRY/extender-base-stage:1.0.0 -t $DOCKER_REGISTRY/extender-base-stage:latest -f $SCRIPT_DIR/docker/Dockerfile.base-stage $SCRIPT_DIR/docker
22+
1923
# base images
2024
echo "Base image with archs: $MULTI_ARCH"
21-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform $MULTI_ARCH -t $DOCKER_REGISTRY/extender-base-env:1.5.0 -t $DOCKER_REGISTRY/extender-base-env:latest -f $SCRIPT_DIR/docker/Dockerfile.base-env $SCRIPT_DIR/docker
25+
docker buildx build --load --platform $MULTI_ARCH -t $DOCKER_REGISTRY/extender-base-env:1.6.0 -t $DOCKER_REGISTRY/extender-base-env:latest -f $SCRIPT_DIR/docker/Dockerfile.base-env $SCRIPT_DIR/docker
2226

2327
REQUESTED="$@"
2428
[ -z "$REQUESTED" ] && REQUESTED="android windows web ps4 ps5 nintendo linux"
2529
for request in $REQUESTED; do
2630
INSTALL=""
2731
case $request in
2832
web)
29-
INSTALL="emsdk-3155 emsdk-3165 emsdk-406"
33+
INSTALL="emsdk-406"
3034
;;
3135
ps4)
32-
INSTALL="wine ps4-12000 ps4-12500"
36+
INSTALL="wine ps4-12500"
3337
;;
3438
ps5)
35-
INSTALL="wine ps5-10000 ps5-12000"
39+
INSTALL="wine ps5-12000"
3640
;;
3741
nintendo)
38-
INSTALL="wine nssdk-1832 nssdk-2143"
42+
INSTALL="wine nssdk-2143"
3943
;;
4044
android)
4145
INSTALL="android android-ndk25 android-ndk25_sdk36"
@@ -61,28 +65,31 @@ for request in $REQUESTED; do
6165
echo "Install $install"
6266
case $install in
6367
ps4-*)
64-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_PS4_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
68+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_PS4_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
6569
;;
6670
ps5-*)
67-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_PS5_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
71+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_PS5_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
6872
;;
6973
nssdk-*)
70-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_NINTENDO_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
74+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_NINTENDO_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
7175
;;
7276
xbox-*)
73-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_XBOX_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
77+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_XBOX_PRIVATE_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
7478
;;
7579
wine)
76-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-wine-env:1.6.0 -t $DOCKER_REGISTRY/extender-wine-env:latest -f $SCRIPT_DIR/docker/Dockerfile.wine-env $SCRIPT_DIR/docker
80+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-wine-env:1.7.0 -t $DOCKER_REGISTRY/extender-wine-env:latest -f $SCRIPT_DIR/docker/Dockerfile.wine-env $SCRIPT_DIR/docker
7781
;;
7882
android)
79-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-android-env:1.6.0 -f $SCRIPT_DIR/docker/Dockerfile.android-env $SCRIPT_DIR/docker
83+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-android-env:1.7.0 -t $DOCKER_REGISTRY/extender-android-env:latest -f $SCRIPT_DIR/docker/Dockerfile.android-env $SCRIPT_DIR/docker
84+
;;
85+
winsdk-2022_144435207)
86+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-winsdk-2022_144435207-env:1.1.0 -t $DOCKER_REGISTRY/extender-winsdk-2022_144435207-env:latest -f $SCRIPT_DIR/docker/Dockerfile.winsdk.2022_144435207-env $SCRIPT_DIR/docker
8087
;;
8188
android-ndk*|winsdk-*|emsdk-*)
82-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
89+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform linux/amd64 -t $DOCKER_REGISTRY/extender-${install}-env:latest -f $SCRIPT_DIR/docker/Dockerfile.$(echo $install | sed 's,-,.,')-env $SCRIPT_DIR/docker
8390
;;
8491
linux)
85-
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --secret id=DM_PACKAGES_URL --platform $MULTI_ARCH -t $DOCKER_REGISTRY/extender-linux-env:latest -f $SCRIPT_DIR/docker/Dockerfile.linux-env $SCRIPT_DIR/docker
92+
DM_PACKAGES_URL=$DM_PACKAGES_URL docker buildx build --load --secret id=DM_PACKAGES_URL --platform $MULTI_ARCH -t $DOCKER_REGISTRY/extender-linux-env:latest -f $SCRIPT_DIR/docker/Dockerfile.linux-env $SCRIPT_DIR/docker
8693
;;
8794
*)
8895
echo "Unknown"

server/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ buildscript {
66
mavenCentral()
77
}
88
dependencies {
9-
classpath 'org.springframework.boot:spring-boot-gradle-plugin:4.0.3'
9+
classpath 'org.springframework.boot:spring-boot-gradle-plugin:4.0.4'
1010
}
1111
}
1212

1313
plugins {
1414
id 'java'
1515
id 'idea'
16-
id 'org.springframework.boot' version '4.0.2'
16+
id 'org.springframework.boot' version '4.0.4'
1717
id 'jacoco'
1818
}
1919

server/configs/application-local-dev-app.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ extender:
1111
url: http://android-ndk25_sdk36:9000
1212
instanceId: android-ndk25_sdk36
1313
alwaysOn: true
14-
emsdk-3165:
15-
url: http://emsdk-3165:9000
16-
instanceId: emsdk-3165
1714
emsdk-406:
1815
url: http://emsdk-406:9000
1916
instanceId: emsdk-406
@@ -35,6 +32,9 @@ extender:
3532
winsdk-2022:
3633
url: http://winsdk-2022:9000
3734
instanceId: winsdk-2022
35+
winsdk-2022_144435207:
36+
url: http://winsdk-2022_144435207:9000
37+
instanceId: winsdk-2022_144435207
3838
xbox-251001:
3939
url: http://xbox-251001:9000
4040
instanceId: xbox-251001

server/configs/application-test-app.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ extender:
77
url: http://android-ndk25:9000
88
instanceId: android-ndk25
99
alwaysOn: true
10-
emsdk-3165:
11-
url: http://emsdk-3165:9000
12-
instanceId: emsdk-3165
10+
android-ndk25_sdk36:
11+
url: http://android-ndk25_sdk36:9000
12+
instanceId: android-ndk25_sdk36
13+
alwaysOn: true
1314
emsdk-406:
1415
url: http://emsdk-406:9000
1516
instanceId: emsdk-406
@@ -31,6 +32,9 @@ extender:
3132
winsdk-2022:
3233
url: http://winsdk-2022:9000
3334
instanceId: winsdk-2022
35+
winsdk-2022_144435207:
36+
url: http://winsdk-2022_144435207:9000
37+
instanceId: winsdk-2022_144435207
3438
xbox-251001:
3539
url: http://xbox-251001:9000
3640
instanceId: xbox-251001

server/docker/.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
grafana-data/
2+
victoria-metrics-data/
Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,36 @@
1-
FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-base-env:1.5.0
1+
ARG GRADLE_VERSION=9.1.0
2+
3+
FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-base-stage:1.0.0 AS build
4+
5+
ARG GRADLE_VERSION
26

37
# Technically part of the Android build, but also required by the GradleService.java
48
# until it can be disabled (e.g. by looking for the existance of GRADLE_USER_HOME)
59

610
# Versions: https://developer.android.com/studio/releases/gradle-plugin?buildsystem=ndk-build#updating-gradle
711
# Java+Gradle version matrix: https://docs.gradle.org/current/userguide/compatibility.html
8-
ENV GRADLE_USER_HOME=/tmp/.gradle
9-
ENV GRADLE_VERSION=9.1.0
10-
ENV GRADLE_PLUGIN_VERSION=8.13.0
11-
ENV PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin
1212
RUN \
13-
echo "Gradle" && \
1413
wget -q https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip && \
1514
mkdir /opt/gradle && \
1615
unzip -q -d /opt/gradle gradle-${GRADLE_VERSION}-bin.zip && \
17-
rm gradle-${GRADLE_VERSION}-bin.zip && \
18-
which gradle && \
19-
chown -R extender: /opt/gradle
16+
rm gradle-${GRADLE_VERSION}-bin.zip
17+
18+
FROM europe-west1-docker.pkg.dev/extender-426409/extender-public-registry/extender-base-env:1.6.0
19+
20+
ARG GRADLE_VERSION
21+
22+
ENV GRADLE_USER_HOME=/tmp/.gradle
23+
ENV GRADLE_VERSION=${GRADLE_VERSION}
24+
ENV GRADLE_PLUGIN_VERSION=8.13.0
25+
ENV PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin
26+
27+
COPY --from=build /opt/gradle /opt/gradle
28+
RUN \
29+
chown -R extender: /opt/gradle && \
30+
apt-get update && \
31+
apt-get install -y --no-install-recommends \
32+
python3 \
33+
python-is-python3 && \
34+
apt-get autoremove -y && \
35+
apt-get clean && \
36+
rm -rf /var/lib/apt/lists/*
Lines changed: 105 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,43 @@
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

6740
RUN --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

Comments
 (0)