Skip to content

Commit 7d5b64d

Browse files
Update Dockerfile for Android SDK and Rust setup
1 parent b8fdda5 commit 7d5b64d

1 file changed

Lines changed: 197 additions & 1 deletion

File tree

‎Dockerfile‎

Lines changed: 197 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,17 @@
33
FROM ubuntu:24.04
44

55
ARG DEBIAN_FRONTEND=noninteractive
6+
7+
# ============================================================
8+
# Versions
9+
# ============================================================
10+
611
ARG ANDROID_NDK_VERSION=r27c
712

13+
# ============================================================
14+
# Environment
15+
# ============================================================
16+
817
ENV 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

Comments
 (0)