@@ -61,6 +61,7 @@ RUN yes | sdkmanager --licenses > /dev/null 2>&1 && \
6161 "ndk;23.2.8568313" \
6262 "cmake;3.10.2.4988404"
6363
64+ # Make SDK cmake available as system cmake
6465RUN ln -sf /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/local/bin/cmake && \
6566 ln -sf /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/local/bin/cmake3
6667
@@ -72,35 +73,56 @@ FROM base AS native-builder
7273COPY TMessagesProj/jni/ /build/jni/
7374WORKDIR /build/jni
7475
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
82-
83- # Phase 2: CMake build of libtmessages.49.so per ABI
84- RUN for abi in arm64-v8a armeabi-v7a; do \
85- mkdir -p /build/cmake-build/$abi && \
86- cd /build/cmake-build/$abi && \
87- cmake \
88- -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
89- -DCMAKE_BUILD_TYPE=Release \
90- -DANDROID_ABI=$abi \
91- -DANDROID_STL=c++_static \
92- -DANDROID_PLATFORM=android-21 \
93- /build/jni/ && \
94- make -j$(nproc); \
76+ # Phase 1: Build static libraries directly (bypasses prepare.py which
77+ # assumes git submodules and rm/re-checkout cycle unsuitable for Docker).
78+ ENV NDK=$ANDROID_NDK_HOME
79+ ENV NINJA_PATH=/usr/bin/ninja
80+
81+ RUN ./build_dav1d_clang.sh arm64 arm
82+
83+ RUN ./build_libvpx_clang.sh arm64 arm
84+
85+ RUN ./build_ffmpeg_clang.sh arm64 arm && ./patch_ffmpeg.sh
86+
87+ RUN ./patch_boringssl.sh && ./build_boringssl.sh arm64 arm
88+
89+ RUN tde2e_dir=$(pwd)/tde2e && \
90+ source_dir=$(pwd)/tde2e_source && \
91+ boringssl_dir=$(pwd)/boringssl && \
92+ for arch in arm64-v8a armeabi-v7a; do \
93+ mkdir -p $source_dir/example/android/third-party/openssl/$arch/lib/ && \
94+ cp "$boringssl_dir/build/$arch/crypto/libcrypto.a" "$source_dir/example/android/third-party/openssl/$arch/lib/" && \
95+ cp "$boringssl_dir/build/$arch/ssl/libssl.a" "$source_dir/example/android/third-party/openssl/$arch/lib/" && \
96+ cp -R "$boringssl_dir/include" "$source_dir/example/android/third-party/openssl/$arch/" ; \
97+ done && \
98+ cp "$tde2e_dir/build-tdlib.sh" "$source_dir/example/android/." && \
99+ cp "$tde2e_dir/CMakeLists.txt" "$source_dir/example/android/." && \
100+ sed -i "s/ php//g" "$source_dir/example/android/check-environment.sh" && \
101+ sed -i "s/PHP_EXECUTABLE/FALSE/g" "$source_dir/td/generate/CMakeLists.txt" && \
102+ cd "$source_dir/example/android" && \
103+ 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;" && \
104+ sed "$SED_CMDS" ./build-tdlib.sh | bash -s -- "$NDK/../.." && \
105+ for arch in arm64-v8a armeabi-v7a; do \
106+ mkdir -p $tde2e_dir/$arch && \
107+ cp "$source_dir/example/android/build-$arch-Java/td/tde2e/libtde2e.a" $tde2e_dir/$arch && \
108+ cp "$source_dir/example/android/build-$arch-Java/td/tdutils/libtdutils.a" $tde2e_dir/$arch; \
95109 done
96110
97- # Collect .so files
98- RUN mkdir -p /prebuilt/arm64-v8a /prebuilt/armeabi-v7a && \
99- cp /build/cmake-build/arm64-v8a/lib*.so /prebuilt/arm64-v8a/ && \
100- cp /build/cmake-build/armeabi-v7a/lib*.so /prebuilt/armeabi-v7a/
111+ # Collect Phase 1 artifacts (.a files) for CI reuse
112+ RUN mkdir -p /prebuilt && \
113+ for lib in boringssl ffmpeg libvpx dav1d tde2e; do \
114+ if [ -d "/build/jni/$lib/build" ]; then \
115+ mkdir -p /prebuilt/$lib && cp -r /build/jni/$lib/build /prebuilt/$lib/; \
116+ fi; \
117+ done && \
118+ for arch in arm64-v8a armeabi-v7a; do \
119+ if [ -d "/build/jni/tde2e/$arch" ]; then \
120+ mkdir -p /prebuilt/tde2e/$arch && cp /build/jni/tde2e/$arch/*.a /prebuilt/tde2e/$arch/; \
121+ fi; \
122+ done
101123
102124# ============================================================
103- # Stage 3: Final image (tools + prebuilt .so )
125+ # Stage 3: Final image (tools + prebuilt Phase 1 .a files )
104126# ============================================================
105127FROM base AS final
106128
0 commit comments