@@ -59,10 +59,12 @@ RUN yes | sdkmanager --licenses > /dev/null 2>&1 && \
5959 "build-tools;35.0.0" \
6060 "ndk;21.4.7075529" \
6161 "ndk;23.2.8568313" \
62- "cmake;3.10.2.4988404"
62+ "cmake;3.10.2.4988404" \
63+ "cmake;3.22.1"
6364
64- RUN ln -sf /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/local/bin/cmake && \
65- ln -sf /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/local/bin/cmake3
65+ # cmake 3.10.2 for Gradle compatibility, cmake 3.22.1 for standalone builds
66+ RUN ln -sf /opt/android-sdk/cmake/3.22.1/bin/cmake /usr/local/bin/cmake && \
67+ ln -sf /opt/android-sdk/cmake/3.22.1/bin/cmake /usr/local/bin/cmake3
6668
6769# ============================================================
6870# Stage 2: Build native libraries
@@ -72,13 +74,40 @@ FROM base AS native-builder
7274COPY TMessagesProj/jni/ /build/jni/
7375WORKDIR /build/jni
7476
75- # Phase 1: prepare.py (boringssl, ffmpeg, libvpx, dav1d, tde2e)
76- # Stub out git — prepare.py runs "git submodule update" and "git reset --hard"
77- # but the sources are already in place via COPY.
78- RUN mv /usr/bin/git /usr/bin/git.real && \
79- printf '#!/bin/sh\n true\n ' > /usr/bin/git && chmod +x /usr/bin/git && \
80- python3 prepare.py arm64 arm ndk=$ANDROID_NDK_HOME silent && \
81- mv /usr/bin/git.real /usr/bin/git
77+ # Phase 1: Build static libraries directly (bypasses prepare.py which
78+ # assumes git submodules and rm/re-checkout cycle unsuitable for Docker).
79+ ENV NDK=$ANDROID_NDK_HOME
80+ ENV NINJA_PATH=/usr/bin/ninja
81+
82+ RUN ./build_dav1d_clang.sh arm64 arm
83+
84+ RUN ./build_libvpx_clang.sh arm64 arm
85+
86+ RUN ./build_ffmpeg_clang.sh arm64 arm && ./patch_ffmpeg.sh
87+
88+ RUN ./patch_boringssl.sh && ./build_boringssl.sh arm64 arm
89+
90+ RUN tde2e_dir=$(pwd)/tde2e && \
91+ source_dir=$(pwd)/tde2e_source && \
92+ boringssl_dir=$(pwd)/boringssl && \
93+ for arch in arm64-v8a armeabi-v7a; do \
94+ mkdir -p $source_dir/example/android/third-party/openssl/$arch/lib/ && \
95+ cp "$boringssl_dir/build/$arch/crypto/libcrypto.a" "$source_dir/example/android/third-party/openssl/$arch/lib/" && \
96+ cp "$boringssl_dir/build/$arch/ssl/libssl.a" "$source_dir/example/android/third-party/openssl/$arch/lib/" && \
97+ cp -R "$boringssl_dir/include" "$source_dir/example/android/third-party/openssl/$arch/" ; \
98+ done && \
99+ cp "$tde2e_dir/build-tdlib.sh" "$source_dir/example/android/." && \
100+ cp "$tde2e_dir/CMakeLists.txt" "$source_dir/example/android/." && \
101+ sed -i "s/ php//g" "$source_dir/example/android/check-environment.sh" && \
102+ sed -i "s/PHP_EXECUTABLE/FALSE/g" "$source_dir/td/generate/CMakeLists.txt" && \
103+ cd "$source_dir/example/android" && \
104+ SED_CMDS="s/x86_64//g;s/x86//g;s/rm tdlib/# rm tdlib/g;s/jar/# jar/g;s/mv tdlib/# mv tdlib/g;" && \
105+ sed "$SED_CMDS" ./build-tdlib.sh | bash -s -- "$NDK/../.." && \
106+ for arch in arm64-v8a armeabi-v7a; do \
107+ mkdir -p $tde2e_dir/$arch && \
108+ cp "$source_dir/example/android/build-$arch-Java/td/tde2e/libtde2e.a" $tde2e_dir/$arch && \
109+ cp "$source_dir/example/android/build-$arch-Java/td/tdutils/libtdutils.a" $tde2e_dir/$arch; \
110+ done
82111
83112# Phase 2: CMake build of libtmessages.49.so per ABI
84113RUN for abi in arm64-v8a armeabi-v7a; do \
0 commit comments