From a2ab41bf908750832b9f8c3e66843c5019543f28 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 19 Apr 2026 13:03:46 +0300 Subject: [PATCH 1/2] Fork vcpkg triplets to keep Android API version on 21 Fixes crash on API platforms 21 to 23 due to missing symbol `__write_chk` (available since API 24). Signed-off-by: Vasyl Gello --- flutter/build_android_deps.sh | 9 --------- res/vcpkg-triplets/arm-neon-android.cmake | 7 +++++++ res/vcpkg-triplets/arm64-android.cmake | 7 +++++++ res/vcpkg-triplets/x64-android.cmake | 7 +++++++ res/vcpkg-triplets/x86-android.cmake | 7 +++++++ vcpkg.json | 3 +++ 6 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 res/vcpkg-triplets/arm-neon-android.cmake create mode 100644 res/vcpkg-triplets/arm64-android.cmake create mode 100644 res/vcpkg-triplets/x64-android.cmake create mode 100644 res/vcpkg-triplets/x86-android.cmake diff --git a/flutter/build_android_deps.sh b/flutter/build_android_deps.sh index 64fb9dad2..07102e90e 100755 --- a/flutter/build_android_deps.sh +++ b/flutter/build_android_deps.sh @@ -20,8 +20,6 @@ if [ -z "$VCPKG_ROOT" ]; then exit 1 fi -API_LEVEL="21" - # Get directory of this script SCRIPTDIR="$(readlink -f "$0")" @@ -36,27 +34,20 @@ fi # NDK llvm toolchain -HOST_TAG="linux-x86_64" # current platform, set as `ls $ANDROID_NDK/toolchains/llvm/prebuilt/` -TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG - function build { ANDROID_ABI=$1 case "$ANDROID_ABI" in arm64-v8a) - ABI=aarch64-linux-android$API_LEVEL VCPKG_TARGET=arm64-android ;; armeabi-v7a) - ABI=armv7a-linux-androideabi$API_LEVEL VCPKG_TARGET=arm-neon-android ;; x86_64) - ABI=x86_64-linux-android$API_LEVEL VCPKG_TARGET=x64-android ;; x86) - ABI=i686-linux-android$API_LEVEL VCPKG_TARGET=x86-android ;; *) diff --git a/res/vcpkg-triplets/arm-neon-android.cmake b/res/vcpkg-triplets/arm-neon-android.cmake new file mode 100644 index 000000000..e0a9c0425 --- /dev/null +++ b/res/vcpkg-triplets/arm-neon-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE arm) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=armv7a-linux-androideabi") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=armeabi-v7a -DANDROID_ARM_NEON=ON) diff --git a/res/vcpkg-triplets/arm64-android.cmake b/res/vcpkg-triplets/arm64-android.cmake new file mode 100644 index 000000000..ffd358f9a --- /dev/null +++ b/res/vcpkg-triplets/arm64-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a) diff --git a/res/vcpkg-triplets/x64-android.cmake b/res/vcpkg-triplets/x64-android.cmake new file mode 100644 index 000000000..37ad1f676 --- /dev/null +++ b/res/vcpkg-triplets/x64-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=x86_64-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=x86_64) diff --git a/res/vcpkg-triplets/x86-android.cmake b/res/vcpkg-triplets/x86-android.cmake new file mode 100644 index 000000000..992816cf1 --- /dev/null +++ b/res/vcpkg-triplets/x86-android.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE x86) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=i686-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=x86) diff --git a/vcpkg.json b/vcpkg.json index d41b91c22..99c6c11d3 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -90,6 +90,9 @@ }, "overlay-ports": [ "./res/vcpkg" + ], + "overlay-triplets": [ + "./res/vcpkg-triplets" ] }, "overrides": [ From 19f00e76d7ea5103cb75556d87cb041886272649 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 19 Apr 2026 13:07:53 +0300 Subject: [PATCH 2/2] flutter/build_android_deps.sh: Refactor to remove unused ... variables and shellcheck warnings. Signed-off-by: Vasyl Gello --- flutter/build_android_deps.sh | 106 ++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 49 deletions(-) diff --git a/flutter/build_android_deps.sh b/flutter/build_android_deps.sh index 07102e90e..1f07cb7ba 100755 --- a/flutter/build_android_deps.sh +++ b/flutter/build_android_deps.sh @@ -6,74 +6,82 @@ ANDROID_ABI=$1 # Build RustDesk dependencies for Android using vcpkg.json # Required: -# 1. set VCPKG_ROOT / ANDROID_NDK path environment variables +# 1. set VCPKG_ROOT / ANDROID_NDK_HOME path environment variables # 2. vcpkg initialized # 3. ndk, version: r25c or newer -if [ -z "$ANDROID_NDK_HOME" ]; then - echo "Failed! Please set ANDROID_NDK_HOME" - exit 1 +if [ -z "${ANDROID_NDK_HOME}" ]; then + echo "ERROR: Please set ANDROID_NDK_HOME environment variable" 1>&2 + exit 1 fi -if [ -z "$VCPKG_ROOT" ]; then - echo "Failed! Please set VCPKG_ROOT" - exit 1 +if [ -z "${VCPKG_ROOT}" ]; then + echo "ERROR: Please set VCPKG_ROOT environment variable" 1>&2 + exit 1 fi +case "${ANDROID_ABI}" in +arm64-v8a) + VCPKG_TARGET=arm64-android + ;; +armeabi-v7a) + VCPKG_TARGET=arm-neon-android + ;; +x86_64) + VCPKG_TARGET=x64-android + ;; +x86) + VCPKG_TARGET=x86-android + ;; +*) + echo "Usage: build_android_deps.sh " 1>&2 + exit 1 + ;; +esac + # Get directory of this script SCRIPTDIR="$(readlink -f "$0")" -SCRIPTDIR="$(dirname "$SCRIPTDIR")" +SCRIPTDIR="$(dirname "${SCRIPTDIR}")" # Check if vcpkg.json is one level up - in root directory of RD -if [ ! -f "$SCRIPTDIR/../vcpkg.json" ]; then - echo "Failed! Please check where vcpkg.json is!" - exit 1 +if [ ! -f "${SCRIPTDIR}/../vcpkg.json" ]; then + echo "ERROR: Can not find vcpkg.json in RustDesk top-level directory" 1>&2 + exit 1 fi -# NDK llvm toolchain +echo "INFO: Building and install vcpkg dependencies for Android ${ANDROID_ABI} ..." -function build { - ANDROID_ABI=$1 +pushd "${SCRIPTDIR}/.." - case "$ANDROID_ABI" in - arm64-v8a) - VCPKG_TARGET=arm64-android - ;; - armeabi-v7a) - VCPKG_TARGET=arm-neon-android - ;; - x86_64) - VCPKG_TARGET=x64-android - ;; - x86) - VCPKG_TARGET=x86-android - ;; - *) - echo "ERROR: ANDROID_ABI must be one of: arm64-v8a, armeabi-v7a, x86_64, x86" >&2 - return 1 - esac +"${VCPKG_ROOT}/vcpkg" install \ + --triplet "${VCPKG_TARGET}" \ + --x-install-root="${VCPKG_ROOT}/installed" - echo "*** [$ANDROID_ABI][Start] Build and install vcpkg dependencies" - pushd "$SCRIPTDIR/.." - $VCPKG_ROOT/vcpkg install --triplet $VCPKG_TARGET --x-install-root="$VCPKG_ROOT/installed" - popd - head -n 100 "${VCPKG_ROOT}/buildtrees/ffmpeg/build-$VCPKG_TARGET-rel-out.log" || true - echo "*** [$ANDROID_ABI][Finished] Build and install vcpkg dependencies" +popd -if [ -d "$VCPKG_ROOT/installed/arm-neon-android" ]; then - echo "*** [Start] Move arm-neon-android to arm-android" +echo "INFO: Completed building vcpkg dependencies for Android ${ANDROID_ABI}" - mv "$VCPKG_ROOT/installed/arm-neon-android" "$VCPKG_ROOT/installed/arm-android" +if [ "${ANDROID_ABI}" = 'armeabi-v7a' ]; then + # Symlink arm-neon-android to arm-android because cargo-ndk does not + # understand NEON suffix. - echo "*** [Finished] Move arm-neon-android to arm-android" -fi -} - -if [ ! -z "$ANDROID_ABI" ]; then - build "$ANDROID_ABI" -else - echo "Usage: build-android-deps.sh " >&2 - exit 1 + if [ -d "${VCPKG_ROOT}/installed/arm-neon-android" ]; then + echo 'INFO: Symlinking arm-neon-android to arm-android' + + ln -sf \ + "${VCPKG_ROOT}/installed/arm-neon-android" \ + "${VCPKG_ROOT}/installed/arm-android" + + echo 'INFO: Symlinked arm-neon-android to arm-android' + else + cat 0<<.a +ERROR: 'vcpkg install' seem to complete successfully but +directory '${VCPKG_ROOT}/installed/arm-neon-android' is missing! + +.a + + exit 1 + fi fi