diff options
| author | Albin <albin@mullvad.net> | 2022-10-24 18:11:10 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-10-24 18:11:10 +0200 |
| commit | f9553b7a2695f0e2c5794e13ac021f518d947e63 (patch) | |
| tree | 9ef6ecf88e026ec39ee4abb77339a35eec6c8859 /android | |
| parent | 3d99c76e9487dee9bb620d5e2640c69c1d7b0042 (diff) | |
| parent | babb41c722cddaf1020c756293e58602357fc47d (diff) | |
| download | mullvadvpn-f9553b7a2695f0e2c5794e13ac021f518d947e63.tar.xz mullvadvpn-f9553b7a2695f0e2c5794e13ac021f518d947e63.zip | |
Merge branch 'base-android-docker-image-on-desktop'
Diffstat (limited to 'android')
| -rw-r--r-- | android/docker/Dockerfile | 156 | ||||
| -rw-r--r-- | android/docker/cargo-config.toml | 15 |
2 files changed, 92 insertions, 79 deletions
diff --git a/android/docker/Dockerfile b/android/docker/Dockerfile index 3a2bfd73ac..1ea4ffa8a3 100644 --- a/android/docker/Dockerfile +++ b/android/docker/Dockerfile @@ -1,83 +1,111 @@ -FROM debian:10 +# To build the image: +# podman build . -t mullvadvpn-app-build-android +# +# To build using the image: +# podman run --rm \ +# -v /path/to/container_cache/target:/root/.cargo/target:Z \ +# -v /path/to/container_cache/registry:/root/.cargo/registry:Z \ +# -v /path/to/container_cache/gradle:/root/.gradle:Z \ +# -v /path/to/repository_root:/build:Z \ +# mullvadvpn-app-build-android ./build-apk.sh --dev-build --no-docker +# +# See the base image Dockerfile in the repository root (../../Dockerfile) +# for more information. -RUN apt-get update && apt-get install -y \ - curl \ +# === Base image (built from: ../../Dockerfile) === +# NOTE: When bumping the base image, it's important to keep the go patch applied +# in this image in sync with the go version used in the base image. An appropriate +# patch for a given go version can be identified by checking the wireguard-android +# repo: https://git.zx2c4.com/wireguard-android/tree/tunnel/tools/libwg-go. +# It's also important to keep the go path in sync. +FROM ghcr.io/mullvad/mullvadvpn-app-build@sha256:b539c83c4336246fef1c324242b49b0fd35fb0839dffd2b9c9fc8361e629a40c + +# === Metadata === +LABEL org.opencontainers.image.source=https://github.com/mullvad/mullvadvpn-app +LABEL org.opencontainers.image.description="Mullvad VPN app Android build container" +LABEL org.opencontainers.image.licenses=GPL-3.0 + +# === Define toolchain versions and paths === + +ENV SDK_VERSION=platforms;android-33 \ + BUILD_TOOLS_VERSION=build-tools;30.0.2 + +# SDK tools +ENV SDK_TOOLS_VERSION=4333796 \ + SDK_TOOLS_SHA256_CHECKSUM=92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 + +# NDK and checksum from: https://github.com/android/ndk/wiki/Unsupported-Downloads +ENV NDK_VERSION=r20b \ + NDK_SHA1_CHECKSUM=d903fdf077039ad9331fb6c3bee78aa46d45527b \ + MIN_SDK_VERSION=21 + +ENV ANDROID_HOME=/opt/android +ENV ANDROID_NDK_HOME=${ANDROID_HOME}/android-ndk-${NDK_VERSION} +ENV NDK_TOOLCHAIN_DIR=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin +ENV GRADLE_USER_HOME=/root/.gradle + +# Rust cross-compilation for: aarch64 +ENV AR_aarch64_linux_android=${NDK_TOOLCHAIN_DIR}/aarch64-linux-android-ar \ + CC_aarch64_linux_android=${NDK_TOOLCHAIN_DIR}/aarch64-linux-android${MIN_SDK_VERSION}-clang \ + CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=${NDK_TOOLCHAIN_DIR}/aarch64-linux-android${MIN_SDK_VERSION}-clang + +# Rust cross-compilation for: armv7 +ENV AR_armv7_linux_androideabi=${NDK_TOOLCHAIN_DIR}/arm-linux-androideabi-ar \ + CC_armv7_linux_androideabi=${NDK_TOOLCHAIN_DIR}/armv7a-linux-androideabi${MIN_SDK_VERSION}-clang \ + CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=${NDK_TOOLCHAIN_DIR}/armv7a-linux-androideabi${MIN_SDK_VERSION}-clang + +# Rust cross-compilation for: i686 +ENV AR_i686_linux_android=${NDK_TOOLCHAIN_DIR}/i686-linux-android-ar \ + CC_i686_linux_android=${NDK_TOOLCHAIN_DIR}/i686-linux-android${MIN_SDK_VERSION}-clang \ + CARGO_TARGET_I686_LINUX_ANDROID_LINKER=${NDK_TOOLCHAIN_DIR}/i686-linux-android${MIN_SDK_VERSION}-clang + +# Rust cross-compilation for: x86_64 +ENV AR_x86_64_linux_android=${NDK_TOOLCHAIN_DIR}/x86_64-linux-android-ar \ + CC_x86_64_linux_android=${NDK_TOOLCHAIN_DIR}/x86_64-linux-android${MIN_SDK_VERSION}-clang \ + CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=${NDK_TOOLCHAIN_DIR}/x86_64-linux-android${MIN_SDK_VERSION}-clang + +# === Install/set up the image === + +RUN apt-get update -y && apt-get install -y \ file \ - gcc \ - git \ gpg \ make \ python \ software-properties-common \ - unzip + unzip \ + && rm -rf /var/lib/apt/lists/* -# Install OpenJDK 8 +# Install JDK COPY adopt-openjdk-apt-key.pgp /tmp/adopt-openjdk-apt-key.pgp - RUN apt-key add < /tmp/adopt-openjdk-apt-key.pgp && \ - rm /tmp/adopt-openjdk-apt-key.pgp && \ add-apt-repository -y https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ && \ apt-get update && \ - apt-get install -y adoptopenjdk-8-hotspot + apt-get install -y adoptopenjdk-8-hotspot && \ + rm /tmp/adopt-openjdk-apt-key.pgp && rm -rf /var/lib/apt/lists/* -# Install Android SDK -RUN curl -sf https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -L -o /tmp/tools_r26.1.1-linux.zip && \ - cd /tmp && \ - echo "92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 tools_r26.1.1-linux.zip" | sha256sum -c && \ - mkdir -p /opt/android && \ - cd /opt/android && \ - unzip -q /tmp/tools_r26.1.1-linux.zip && \ - rm /tmp/tools_r26.1.1-linux.zip && \ - yes | /opt/android/tools/bin/sdkmanager "platforms;android-30" "build-tools;30.0.3" "platform-tools" +# Install base Android SDK tools +RUN curl -sfLo /tmp/sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-${SDK_TOOLS_VERSION}.zip && \ + echo "$SDK_TOOLS_SHA256_CHECKSUM /tmp/sdk-tools.zip" | sha256sum -c && \ + mkdir -p $ANDROID_HOME && \ + unzip -q /tmp/sdk-tools.zip -d $ANDROID_HOME && \ + rm /tmp/sdk-tools.zip -ENV ANDROID_HOME="/opt/android" +# Install Android SDK +RUN yes | $ANDROID_HOME/tools/bin/sdkmanager $SDK_VERSION $BUILD_TOOLS_VERSION "platform-tools" # Install Android NDK -RUN cd /tmp && \ - curl -sf -L -O https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip && \ - echo "8381c440fe61fcbb01e209211ac01b519cd6adf51ab1c2281d5daad6ca4c8c8c android-ndk-r20b-linux-x86_64.zip" | sha256sum -c && \ - cd /opt/android && \ - unzip -q /tmp/android-ndk-r20b-linux-x86_64.zip && \ - rm /tmp/android-ndk-r20b-linux-x86_64.zip +RUN curl -sfLo /tmp/ndk.zip https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux-x86_64.zip && \ + echo "$NDK_SHA1_CHECKSUM /tmp/ndk.zip" | sha1sum -c && \ + unzip -q /tmp/ndk.zip -d $ANDROID_HOME && \ + rm /tmp/ndk.zip -ENV ANDROID_NDK_HOME="/opt/android/android-ndk-r20b" \ - NDK_TOOLCHAIN_DIR="/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin" - -# Install golang -ENV GOLANG_VERSION 1.18.5 -# Checksum from: https://go.dev/dl/ -ENV GOLANG_HASH 9e5de37f9c49942c601b191ac5fba404b868bfc21d446d6960acc12283d6e5f2 +# Apply go patch required for Android +# See the comment above the FROM instruction for more information. COPY goruntime-boottime-over-monotonic.diff /tmp/goruntime-boottime-over-monotonic.diff -RUN cd /tmp && \ - curl -sf -L -o go.tgz https://go.dev/dl/go${GOLANG_VERSION}.linux-amd64.tar.gz && \ - echo "$GOLANG_HASH go.tgz" | sha256sum -c && \ - cd /opt && \ - tar -xzf /tmp/go.tgz && \ - patch -p1 -f -N -r- -d "/opt/go" < /tmp/goruntime-boottime-over-monotonic.diff && \ - mkdir /opt/go/go-path && \ - rm /tmp/goruntime-boottime-over-monotonic.diff /tmp/go.tgz - -ENV GOROOT=/opt/go GOPATH=/opt/go/go-path PATH=${PATH}:/opt/go/bin - -# Install Rust -COPY cargo-config.toml /root/.cargo/config - -ENV PATH="${PATH}:/root/.cargo/bin" \ - AR_x86_64_linux_android="${NDK_TOOLCHAIN_DIR}/x86_64-linux-android-ar" \ - AR_i686_linux_android="${NDK_TOOLCHAIN_DIR}/i686-linux-android-ar" \ - AR_aarch64_linux_android="${NDK_TOOLCHAIN_DIR}/aarch64-linux-android-ar" \ - AR_armv7_linux_androideabi="${NDK_TOOLCHAIN_DIR}/arm-linux-androideabi-ar" \ - CC_x86_64_linux_android="${NDK_TOOLCHAIN_DIR}/x86_64-linux-android21-clang" \ - CC_i686_linux_android="${NDK_TOOLCHAIN_DIR}/i686-linux-android21-clang" \ - CC_aarch64_linux_android="${NDK_TOOLCHAIN_DIR}/aarch64-linux-android21-clang" \ - CC_armv7_linux_androideabi="${NDK_TOOLCHAIN_DIR}/armv7a-linux-androideabi21-clang" +RUN patch -p1 -f -N -r- -d /usr/local/go < /tmp/goruntime-boottime-over-monotonic.diff && \ + rm /tmp/goruntime-boottime-over-monotonic.diff -RUN curl -sf -L https://sh.rustup.rs > /tmp/rustup.sh && \ - cd /tmp && \ - echo "173f4881e2de99ba9ad1acb59e65be01b2a44979d83b6ec648d0d22f8654cbce rustup.sh" | sha256sum -c && \ - chmod +x rustup.sh && \ - ./rustup.sh -y && \ - rm rustup.sh && \ - rustup target add x86_64-linux-android i686-linux-android aarch64-linux-android armv7-linux-androideabi +# Add rust targets +RUN rustup target add x86_64-linux-android i686-linux-android aarch64-linux-android armv7-linux-androideabi -CMD ["./build-apk.sh", "--no-docker"] +WORKDIR /build diff --git a/android/docker/cargo-config.toml b/android/docker/cargo-config.toml deleted file mode 100644 index bd056d8496..0000000000 --- a/android/docker/cargo-config.toml +++ /dev/null @@ -1,15 +0,0 @@ -[target.aarch64-linux-android] -ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar" -linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" - -[target.armv7-linux-androideabi] -ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar" -linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang" - -[target.x86_64-linux-android] -ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android-ar" -linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang" - -[target.i686-linux-android] -ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-ar" -linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang" |
