hi-client/libcore/docker-compile.sh
2025-10-27 22:15:25 +08:00

73 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -e
echo "安装构建依赖..."
apt-get update -qq
apt-get install -y -qq wget unzip openjdk-17-jdk build-essential npm
echo "创建Android SDK目录结构..."
mkdir -p /opt/android-sdk/cmdline-tools
echo "下载Android SDK命令行工具..."
cd /tmp
wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip -q commandlinetools-linux-11076708_latest.zip
mv cmdline-tools /opt/android-sdk/cmdline-tools/latest
export ANDROID_HOME=/opt/android-sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools
echo "接受Android SDK许可..."
yes | sdkmanager --licenses > /dev/null 2>&1 || true
echo "安装Android SDK Platform 21和Build Tools..."
sdkmanager "platforms;android-21" "build-tools;30.0.3" "platform-tools"
echo "安装Android NDK..."
cd /tmp
wget -q https://dl.google.com/android/repository/android-ndk-r26c-linux.zip
unzip -q android-ndk-r26c-linux.zip
export ANDROID_NDK_HOME=/tmp/android-ndk-r26c
echo "安装gomobile..."
go install -v github.com/sagernet/gomobile/cmd/gomobile@v0.1.1
go install -v github.com/sagernet/gomobile/cmd/gobind@v0.1.1
export PATH=$PATH:/root/go/bin
echo "安装npm依赖..."
npm install --silent
echo "初始化gomobile..."
gomobile init -ndk $ANDROID_NDK_HOME
cd /workspace
echo "开始使用gomobile编译..."
gomobile bind -v \
-androidapi=21 \
-javapkg=io.nekohasekai \
-libname=box \
-tags="with_gvisor,with_quic,with_wireguard,with_ech,with_utls,with_clash_api,with_grpc" \
-trimpath \
-target=android/arm64 \
-o libcore.aar \
github.com/sagernet/sing-box/experimental/libbox ./mobile
if [ ! -f libcore.aar ]; then
echo "❌ 编译失败: libcore.aar未生成"
exit 1
fi
echo "提取libbox.so..."
unzip -j libcore.aar jni/arm64-v8a/libbox.so -d /tmp/
if [ -f /tmp/libbox.so ]; then
cp /tmp/libbox.so /workspace/libbox-new.so
echo "✅ 编译成功!"
ls -lh /workspace/libbox-new.so
md5sum /workspace/libbox-new.so
else
echo "❌ 提取失败: libbox.so未找到"
exit 1
fi