Skip to content

Commit a73ee7f

Browse files
committed
chore(git): add android cargo build
1 parent 663a5ce commit a73ee7f

1 file changed

Lines changed: 21 additions & 57 deletions

File tree

Dockerfile

Lines changed: 21 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
FROM ubuntu:22.04
22

3-
# Set environment variables for the Android SDK and NDK, and the API level.
4-
ENV ANDROID_API_LEVEL="22"
3+
# Environment setup
4+
ENV ANDROID_API_LEVEL=22
55
ENV ANDROID_NDK_VERSION=r22
6-
ENV ANDROID_SDK_ROOT="/usr/lib/android-sdk"
7-
ENV ANDROID_HOME="/usr/lib/android-sdk"
8-
ENV ANDROID_NDK_HOME="${ANDROID_SDK_ROOT}/ndk-bundle"
9-
ENV ANDROID_NDK_PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin"
10-
ENV NDK_SYSROOT="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot"
11-
12-
# Set non-interactive mode for SDK manager.
6+
ENV ANDROID_SDK_ROOT=/usr/lib/android-sdk
7+
ENV ANDROID_HOME=/usr/lib/android-sdk
8+
ENV ANDROID_NDK_HOME=${ANDROID_SDK_ROOT}/ndk-bundle
9+
ENV ANDROID_NDK_PATH=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin
10+
ENV NDK_SYSROOT=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot
1311
ENV DEBIAN_FRONTEND=noninteractive
1412

1513
# Install dependencies
1614
RUN apt-get update && \
17-
apt-get install -y \
18-
wget curl git build-essential file unzip \
19-
python3 python3-pip pkg-config openjdk-17-jdk \
20-
cmake ninja-build clang && \
15+
apt-get install -y wget curl git build-essential file unzip \
16+
python3 python3-pip pkg-config openjdk-17-jdk \
17+
cmake ninja-build clang && \
2118
rm -rf /var/lib/apt/lists/*
2219

23-
# Set JAVA_HOME and update PATH
24-
ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
25-
ENV PATH="${PATH}:${JAVA_HOME}/bin"
20+
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
21+
ENV PATH=${PATH}:${JAVA_HOME}/bin
2622

2723
# Install Android SDK command-line tools
2824
RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \
@@ -32,45 +28,25 @@ RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \
3228
mv ${ANDROID_SDK_ROOT}/cmdline-tools/latest/cmdline-tools/* ${ANDROID_SDK_ROOT}/cmdline-tools/latest/ && \
3329
rm -rf ${ANDROID_SDK_ROOT}/cmdline-tools/latest/cmdline-tools
3430

35-
# Add SDK tools to PATH
36-
ENV PATH="${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin"
31+
ENV PATH=${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin
3732

38-
# Install Android platform, build tools, and NDK
33+
# Install Android SDK packages
3934
RUN yes | sdkmanager --licenses --sdk_root=${ANDROID_SDK_ROOT}
40-
RUN sdkmanager "platforms;android-${ANDROID_API_LEVEL}" "build-tools;${ANDROID_API_LEVEL}.0.0" "ndk-bundle" "cmake;3.22.1" \
41-
--sdk_root=${ANDROID_SDK_ROOT}
35+
RUN sdkmanager "platforms;android-${ANDROID_API_LEVEL}" "build-tools;${ANDROID_API_LEVEL}.0.0" "ndk-bundle" "cmake;3.22.1" --sdk_root=${ANDROID_SDK_ROOT}
4236

43-
# Add NDK to PATH
44-
ENV PATH="${ANDROID_NDK_PATH}:${PATH}"
37+
ENV PATH=${ANDROID_NDK_PATH}:${PATH}
4538

4639
# Install Rust
4740
ENV RUSTUP_HOME=/root/.rustup
4841
ENV CARGO_HOME=/root/.cargo
49-
ENV PATH="/root/.cargo/bin:${PATH}"
42+
ENV PATH=/root/.cargo/bin:${PATH}
5043

5144
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
52-
53-
# Ensure stable toolchain and Android targets
54-
RUN rustup toolchain install stable
55-
RUN rustup default stable
45+
RUN rustup toolchain install stable && rustup default stable
5646
RUN rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android
5747

58-
# Debug toolchain setup
59-
RUN echo "=== TOOLCHAIN DEBUG ===" && \
60-
rustup show && \
61-
rustup target list --installed && \
62-
ls -la /root/.rustup/toolchains/*/lib/rustlib/ | grep -E "(aarch64|armv7|x86_64|i686).*android" && \
63-
find /root/.rustup -name "libcore*.rlib" -path "*android*" -ls
64-
65-
# Verify NDK libraries (especially libunwind)
66-
RUN echo "=== NDK LIBRARY DEBUG ===" && \
67-
find ${NDK_SYSROOT} -name "libunwind*" -ls && \
68-
ls -la ${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL} || echo "aarch64 API ${ANDROID_API_LEVEL} library directory not found!" && \
69-
ls -la ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android* || echo "No aarch64 linkers found!"
70-
71-
# Configure Cargo for Android cross-compilation (all 4 ABIs)
72-
RUN echo "=== SETTING UP CARGO CONFIG ===" && \
73-
mkdir -p /root/.cargo && \
48+
# Cargo config for Android cross-compilation (4 ABIs)
49+
RUN mkdir -p /root/.cargo && \
7450
cat > /root/.cargo/config.toml <<'EOF'
7551
[target.aarch64-linux-android]
7652
linker = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android22-clang"
@@ -94,8 +70,7 @@ rustflags = ["-C", "link-arg=--sysroot=/usr/lib/android-sdk/ndk-bundle/toolchain
9470
EOF
9571

9672
# Test with Cargo for all Android ABIs
97-
RUN echo "=== TESTING WITH CARGO ===" && \
98-
mkdir -p src && \
73+
RUN mkdir -p src && \
9974
echo '[package]' > Cargo.toml && \
10075
echo 'name = "test"' >> Cargo.toml && \
10176
echo 'version = "0.1.0"' >> Cargo.toml && \
@@ -106,15 +81,4 @@ RUN echo "=== TESTING WITH CARGO ===" && \
10681
cargo build --target $TARGET --verbose; \
10782
done
10883

109-
# Test direct rustc compilation for aarch64
110-
RUN echo "=== TESTING WITH RUSTC ===" && \
111-
echo 'fn main() {}' > test.rs && \
112-
rustc --target aarch64-linux-android --edition 2021 test.rs \
113-
--sysroot ${NDK_SYSROOT} \
114-
-C linker=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${ANDROID_API_LEVEL}-clang \
115-
-C link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android \
116-
-C link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL}
117-
118-
RUN echo "Test compilation successful!"
119-
12084
CMD ["bash"]

0 commit comments

Comments
 (0)