-
Notifications
You must be signed in to change notification settings - Fork 105
Expand file tree
/
Copy pathbuild.android.sh
More file actions
executable file
·84 lines (76 loc) · 3.03 KB
/
Copy pathbuild.android.sh
File metadata and controls
executable file
·84 lines (76 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
# arm64-v8a armeabi-v7a x86 x86_64
#
# 使用方法:
# ./build.android.sh <path-to-src> <path-to-ndk> [host-tag] [architecture] [ssl]
# ssl 可选值为 boringssl(默认) 或 openssl.
# 示例:
# ./build.android.sh ~/Documents/proxy /Users/jack/Library/Android/sdk/ndk/26.1.10909125
# ./build.android.sh ~/Documents/proxy /Users/jack/Library/Android/sdk/ndk/26.1.10909125 darwin-x86_64 arm64-v8a
# ./build.android.sh /root/proxy /root/ndk linux-x86_64 armeabi-v7a
# ./build.android.sh /root/proxy /root/ndk linux-x86_64 arm64-v8a openssl
#
SRC_PATH=$1
NDK_PATH=$2
HOST_TAG=${3:-windows-x86_64}
TARGET_ARCH=$4
SSL_BACKEND=${5:-boringssl}
BUILD_TYPE="Release"
case "$SSL_BACKEND" in
boringssl)
SSL_ARGS="-DENABLE_USE_OPENSSL=OFF -DENABLE_USE_BORINGSSL=ON -DENABLE_USE_WOLFSSL=OFF"
;;
openssl)
SSL_ARGS="-DENABLE_USE_OPENSSL=ON -DENABLE_SYSTEM_OPENSSL=OFF -DENABLE_USE_BORINGSSL=OFF -DENABLE_USE_WOLFSSL=OFF"
;;
*)
echo "Unknown ssl backend: ${SSL_BACKEND} (expected: boringssl, openssl)"
exit 1
;;
esac
# 如果指定了具体的架构则只编译该架构,否则默认编译所有架构
if [ -n "$TARGET_ARCH" ]; then
ARCHITECTURES=("$TARGET_ARCH")
else
ARCHITECTURES=("arm64-v8a" "armeabi-v7a" "x86" "x86_64")
fi
kernel=$(uname -s)
if [ "$kernel" = "Linux" ]; then
HOST_TAG=linux-x86_64
elif [ "$kernel" = "Darwin" ]; then
HOST_TAG=darwin-x86_64
elif [ "$kernel" = "MINGW64_NT-10.0" ]; then
HOST_TAG=windows-x86_64
fi
echo "SRC_PATH: ${SRC_PATH}"
echo "NDK_PATH: ${NDK_PATH}"
echo "HOST_TAG: ${HOST_TAG}"
echo "ARCHITECTURES: ${ARCHITECTURES[*]}"
echo "SSL_BACKEND: ${SSL_BACKEND}"
for ARCH in "${ARCHITECTURES[@]}"
do
cmake -S ${SRC_PATH} -B android/$ARCH -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake -DANDROID_ABI=${ARCH} -DANDROID_PLATFORM=android-19 -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${SSL_ARGS} -G Ninja
cmake --build android/$ARCH
mkdir -p release/$ARCH
# 桌面端可执行文件 (非 Android 场景).
if ls android/$ARCH/bin/* >/dev/null 2>&1; then
${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_TAG}/bin/llvm-strip android/$ARCH/bin/*
cp android/$ARCH/bin/* release/$ARCH/
fi
# SWIG 库 (libxproxy.so) 与生成的 Java 包装文件.
${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_TAG}/bin/llvm-strip android/$ARCH/lib/libxproxy.so
cp android/$ARCH/lib/libxproxy.so release/$ARCH/
# 同步 libxproxy.so 到 Android 客户端工程 (Flutter), 避免 APK 编译时缺少 .so.
JNI_LIBS_DIR=${SRC_PATH}/apps/android/xproxy/android/app/src/main/jniLibs/${ARCH}
if [ -d "${SRC_PATH}/apps/android/xproxy/android/app" ]; then
mkdir -p ${JNI_LIBS_DIR}
cp android/$ARCH/lib/libxproxy.so ${JNI_LIBS_DIR}/libxproxy.so
echo "copied libxproxy.so -> ${JNI_LIBS_DIR}/libxproxy.so"
fi
mkdir -p outputs/binaries
if [ -d "android/$ARCH/swig" ]; then
cp -r android/$ARCH/swig/* outputs/
fi
cp -r release/* outputs/binaries/
done
echo "Build finished."