33FROM ubuntu:24.04
44
55ARG DEBIAN_FRONTEND=noninteractive
6-
7- # ------------------------------------------------------------
8- # Versions
9- # ------------------------------------------------------------
10-
116ARG ANDROID_NDK_VERSION=r27c
127
13- # ------------------------------------------------------------
14- # Environment
15- # ------------------------------------------------------------
16-
178ENV CARGO_HOME=/root/.cargo \
189 RUSTUP_HOME=/root/.rustup \
1910 ANDROID_HOME=/opt/android-sdk \
@@ -22,75 +13,67 @@ ENV CARGO_HOME=/root/.cargo \
2213 ANDROID_NDK_HOME=/opt/android-ndk \
2314 JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
2415
25- ENV PATH="/root/.cargo/bin:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/build-tools/latest:${PATH}"
26-
27- # ------------------------------------------------------------
28- # System packages
29- # ------------------------------------------------------------
30-
31- RUN apt-get update && apt-get install -y --no-install-recommends \
32- ca-certificates \
33- curl \
34- wget \
35- git \
36- unzip \
37- zip \
38- xz-utils \
39- file \
40- pkg-config \
41- build-essential \
42- cmake \
43- ninja-build \
44- clang \
45- lld \
46- llvm \
47- python3 \
48- python3-pip \
49- openjdk-17-jdk \
50- gcc-multilib \
51- g++-multilib \
52- libc6-dev-i386 \
53- mingw-w64 \
54- gcc-aarch64-linux-gnu \
55- g++-aarch64-linux-gnu \
56- gcc-arm-linux-gnueabihf \
57- g++-arm-linux-gnueabihf \
16+ ENV PATH="/root/.cargo/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/opt/android-sdk/build-tools/35.0.0:/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}"
17+
18+ # ============================================================
19+ # System dependencies
20+ # ============================================================
21+
22+ RUN apt-get update \
23+ && apt-get install -y --no-install-recommends \
24+ ca-certificates \
25+ curl \
26+ wget \
27+ git \
28+ unzip \
29+ zip \
30+ xz-utils \
31+ file \
32+ pkg-config \
33+ build-essential \
34+ cmake \
35+ ninja-build \
36+ clang \
37+ lld \
38+ llvm \
39+ python3 \
40+ python3-pip \
41+ openjdk-17-jdk \
5842 && rm -rf /var/lib/apt/lists/*
5943
60- # ------------------------------------------------------------
61- # Android SDK
62- # ------------------------------------------------------------
44+ # ============================================================
45+ # Android SDK command-line tools
46+ # ============================================================
6347
6448ARG ANDROID_CMDLINE_TOOLS=13114758
6549
66- RUN mkdir -p "${ANDROID_HOME}/ cmdline-tools" \
50+ RUN mkdir -p /opt/android-sdk/ cmdline-tools \
6751 && wget -q \
68- "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip" \
69- -O /tmp/cmdline-tools.zip \
52+ "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip" \
53+ -O /tmp/cmdline-tools.zip \
7054 && unzip -q /tmp/cmdline-tools.zip \
71- -d "${ANDROID_HOME}/ cmdline-tools" \
55+ -d /opt/android-sdk/ cmdline-tools \
7256 && mv \
73- "${ANDROID_HOME}/ cmdline-tools/cmdline-tools" \
74- "${ANDROID_HOME}/ cmdline-tools/latest" \
57+ /opt/android-sdk/ cmdline-tools/cmdline-tools \
58+ /opt/android-sdk/ cmdline-tools/latest \
7559 && rm -f /tmp/cmdline-tools.zip
7660
77- RUN yes | sdkmanager --licenses >/dev/null || true
61+ # ============================================================
62+ # Android SDK
63+ # ============================================================
7864
79- # ------------------------------------------------------------
80- # Android SDK packages
81- # ------------------------------------------------------------
65+ RUN yes | sdkmanager --licenses >/dev/null 2>&1 || true
8266
8367RUN sdkmanager \
84- "platform-tools" \
85- "platforms;android-35" \
86- "build-tools;35.0.0"
68+ "platform-tools" \
69+ "platforms;android-35" \
70+ "build-tools;35.0.0"
8771
88- # ------------------------------------------------------------
72+ # ============================================================
8973# Android NDK
90- # ------------------------------------------------------------
74+ # ============================================================
9175
92- RUN mkdir -p /opt \
93- && wget -q \
76+ RUN wget -q \
9477 "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" \
9578 -O /tmp/android-ndk.zip \
9679 && unzip -q /tmp/android-ndk.zip -d /opt \
@@ -99,37 +82,28 @@ RUN mkdir -p /opt \
9982 "${ANDROID_NDK_ROOT}" \
10083 && rm -f /tmp/android-ndk.zip
10184
102- # ------------------------------------------------------------
85+ # ============================================================
10386# Rust
104- # ------------------------------------------------------------
87+ # ============================================================
10588
10689RUN curl --proto '=https' \
107- --tlsv1.2 \
108- -sSf https://sh.rustup.rs \
90+ --tlsv1.2 \
91+ -sSf https://sh.rustup.rs \
10992 | sh -s -- -y --profile minimal
11093
111- # ------------------------------------------------------------
112- # Rust native targets
113- # ------------------------------------------------------------
94+ # ============================================================
95+ # Rust Android targets
96+ # ============================================================
11497
11598RUN rustup target add \
116- x86_64-unknown-linux-gnu \
117- i686-unknown-linux-gnu \
118- aarch64-unknown-linux-gnu \
119- armv7-unknown-linux-gnueabihf \
120- x86_64-pc-windows-gnu \
121- i686-pc-windows-gnu \
122- aarch64-pc-windows-gnullvm \
123- x86_64-apple-darwin \
124- aarch64-apple-darwin \
125- aarch64-linux-android \
126- armv7-linux-androideabi \
127- x86_64-linux-android \
128- i686-linux-android
129-
130- # ------------------------------------------------------------
131- # Android Cargo linkers
132- # ------------------------------------------------------------
99+ aarch64-linux-android \
100+ armv7-linux-androideabi \
101+ x86_64-linux-android \
102+ i686-linux-android
103+
104+ # ============================================================
105+ # Cargo Android linker configuration
106+ # ============================================================
133107
134108RUN mkdir -p /root/.cargo \
135109 && cat > /root/.cargo/config.toml <<'EOF'
@@ -146,9 +120,9 @@ linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linu
146120linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang"
147121EOF
148122
149- # ------------------------------------------------------------
123+ # ============================================================
150124# Node.js
151- # ------------------------------------------------------------
125+ # ============================================================
152126
153127RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
154128 && apt-get update \
@@ -157,9 +131,9 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
157131 && corepack enable \
158132 && rm -rf /var/lib/apt/lists/*
159133
160- # ------------------------------------------------------------
161- # Verify toolchain
162- # ------------------------------------------------------------
134+ # ============================================================
135+ # Verification
136+ # ============================================================
163137
164138RUN rustc --version \
165139 && cargo --version \
@@ -168,11 +142,8 @@ RUN rustc --version \
168142 && clang --version \
169143 && cmake --version \
170144 && java -version \
171- && sdkmanager --version
172-
173- # ------------------------------------------------------------
174- # Project
175- # ------------------------------------------------------------
145+ && sdkmanager --version \
146+ && ndk-build --version
176147
177148WORKDIR /workspace
178149
0 commit comments