33FROM ubuntu:24.04
44
55ARG DEBIAN_FRONTEND=noninteractive
6+
7+ # ============================================================
8+ # Versions
9+ # ============================================================
10+
611ARG ANDROID_NDK_VERSION=r27c
712
13+ # ============================================================
14+ # Environment
15+ # ============================================================
16+
817ENV CARGO_HOME=/root/.cargo \
918 RUSTUP_HOME=/root/.rustup \
1019 ANDROID_HOME=/opt/android-sdk \
@@ -13,7 +22,7 @@ ENV CARGO_HOME=/root/.cargo \
1322 ANDROID_NDK_HOME=/opt/android-ndk \
1423 JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
1524
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}"
25+ ENV PATH="/root/.cargo/bin:${ANDROID_HOME}/ cmdline-tools/latest/bin:${ANDROID_HOME}/ platform-tools:${ANDROID_HOME}/ build-tools/35.0.0:${ANDROID_NDK_ROOT}:${ANDROID_NDK_ROOT} /toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}"
1726
1827# ============================================================
1928# System dependencies
@@ -41,6 +50,193 @@ RUN apt-get update \
4150 openjdk-17-jdk \
4251 && rm -rf /var/lib/apt/lists/*
4352
53+ # ============================================================
54+ # Android SDK Command Line Tools
55+ # ============================================================
56+
57+ ARG ANDROID_CMDLINE_TOOLS=13114758
58+
59+ RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \
60+ && wget -q \
61+ "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip" \
62+ -O /tmp/cmdline-tools.zip \
63+ && unzip -q \
64+ /tmp/cmdline-tools.zip \
65+ -d "${ANDROID_SDK_ROOT}/cmdline-tools" \
66+ && mv \
67+ "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" \
68+ "${ANDROID_SDK_ROOT}/cmdline-tools/latest" \
69+ && rm -f /tmp/cmdline-tools.zip
70+
71+ # ============================================================
72+ # Android SDK
73+ # ============================================================
74+
75+ RUN yes | sdkmanager --licenses >/dev/null 2>&1 || true
76+
77+ RUN sdkmanager \
78+ "platform-tools" \
79+ "platforms;android-35" \
80+ "build-tools;35.0.0"
81+
82+ # ============================================================
83+ # Android NDK
84+ # ============================================================
85+
86+ RUN wget -q \
87+ "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" \
88+ -O /tmp/android-ndk.zip \
89+ && unzip -q \
90+ /tmp/android-ndk.zip \
91+ -d /opt \
92+ && mv \
93+ "/opt/android-ndk-${ANDROID_NDK_VERSION}" \
94+ "${ANDROID_NDK_ROOT}" \
95+ && rm -f /tmp/android-ndk.zip
96+
97+ # ============================================================
98+ # Verify Android NDK
99+ # ============================================================
100+
101+ RUN test -f "${ANDROID_NDK_ROOT}/source.properties" \
102+ && test -f "${ANDROID_NDK_ROOT}/ndk-build"
103+
104+ # ============================================================
105+ # Rust
106+ # ============================================================
107+
108+ RUN curl \
109+ --proto '=https' \
110+ --tlsv1.2 \
111+ -sSf \
112+ https://sh.rustup.rs \
113+ | sh -s -- \
114+ -y \
115+ --profile minimal
116+
117+ # ============================================================
118+ # Rust targets
119+ # ============================================================
120+
121+ RUN rustup target add \
122+ x86_64-unknown-linux-gnu \
123+ i686-unknown-linux-gnu \
124+ aarch64-unknown-linux-gnu \
125+ armv7-unknown-linux-gnueabihf \
126+ x86_64-pc-windows-gnu \
127+ i686-pc-windows-gnu \
128+ aarch64-linux-android \
129+ armv7-linux-androideabi \
130+ x86_64-linux-android \
131+ i686-linux-android
132+
133+ # ============================================================
134+ # Cargo Android linker configuration
135+ # ============================================================
136+
137+ RUN mkdir -p "${CARGO_HOME}" \
138+ && cat > "${CARGO_HOME}/config.toml" <<'EOF'
139+
140+ [target.aarch64-linux-android]
141+ linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
142+
143+ [target.armv7-linux-androideabi]
144+ linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
145+
146+ [target.x86_64-linux-android]
147+ linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang"
148+
149+ [target.i686-linux-android]
150+ linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang"
151+
152+ EOF
153+
154+ # ============================================================
155+ # Node.js
156+ # ============================================================
157+
158+ RUN curl -fsSL \
159+ https://deb.nodesource.com/setup_22.x \
160+ | bash - \
161+ && apt-get update \
162+ && apt-get install -y --no-install-recommends nodejs \
163+ && npm install -g corepack \
164+ && corepack enable \
165+ && rm -rf /var/lib/apt/lists/*
166+
167+ # ============================================================
168+ # Verification
169+ # ============================================================
170+
171+ RUN echo "========================================" \
172+ && echo "System" \
173+ && echo "========================================" \
174+ && uname -a \
175+ && echo \
176+ && echo "========================================" \
177+ && echo "Java" \
178+ && echo "========================================" \
179+ && java -version \
180+ && echo \
181+ && echo "========================================" \
182+ && echo "Rust" \
183+ && echo "========================================" \
184+ && rustc --version \
185+ && cargo --version \
186+ && rustup --version \
187+ && echo \
188+ && echo "========================================" \
189+ && echo "Node.js" \
190+ && echo "========================================" \
191+ && node --version \
192+ && npm --version \
193+ && echo \
194+ && echo "========================================" \
195+ && echo "C/C++ Toolchain" \
196+ && echo "========================================" \
197+ && gcc --version \
198+ && clang --version \
199+ && cmake --version \
200+ && ninja --version \
201+ && echo \
202+ && echo "========================================" \
203+ && echo "Android SDK" \
204+ && echo "========================================" \
205+ && sdkmanager --version \
206+ && adb --version \
207+ && echo \
208+ && echo "========================================" \
209+ && echo "Android NDK" \
210+ && echo "========================================" \
211+ && "${ANDROID_NDK_ROOT}/ndk-build" --version \
212+ && echo \
213+ && echo "========================================" \
214+ && echo "Rust Targets" \
215+ && echo "========================================" \
216+ && rustup target list --installed \
217+ && echo \
218+ && echo "========================================" \
219+ && echo "Android Linkers" \
220+ && echo "========================================" \
221+ && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" \
222+ && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" \
223+ && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang" \
224+ && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang" \
225+ && echo "Android linkers: OK"
226+
227+ # ============================================================
228+ # Project
229+ # ============================================================
230+
231+ WORKDIR /workspace
232+
233+ CMD ["bash" ] lld \
234+ llvm \
235+ python3 \
236+ python3-pip \
237+ openjdk-17-jdk \
238+ && rm -rf /var/lib/apt/lists/*
239+
44240# ============================================================
45241# Android SDK command-line tools
46242# ============================================================
0 commit comments