NuvioStreaming/scripts/build-torrserver-android.sh
tapframe 47e110f582 Refactor P2P streaming implementation and enhance torrent metadata handling
- Updated MainAppContent to use p2pFileIdx and p2pFilename for improved torrent handling.
- Enhanced P2pStreamRequest to include magnetUri for better P2P stream requests.
- Modified PlayerLaunch and PlayerScreen to accommodate new torrentMagnetUri parameter.
- Improved StreamItem to extract P2P metadata from clientResolve when top-level fields are missing.
- Added tests for StreamItem to validate P2P metadata extraction logic.
- Introduced warmup and shutdown methods in P2pStreamingEngine for better state management.
- Created build script for TorrServer Android binaries and updated APK installation logic.
2026-06-04 15:55:25 +05:30

96 lines
2.8 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TORRSERVER_DIR="${TORRSERVER_DIR:-"${ROOT_DIR}/vendor/TorrServer/server"}"
OUT_DIR="${OUT_DIR:-"${ROOT_DIR}/composeApp/src/androidMain/jniLibs"}"
GO_BIN="${GO_BIN:-go}"
UPX_BIN="${UPX_BIN:-upx}"
SDK_ROOT="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-"${HOME}/Library/Android/sdk"}}"
NDK_ROOT="${ANDROID_NDK_HOME:-}"
export GOCACHE="${GOCACHE:-"${ROOT_DIR}/build/go-cache"}"
export GOMODCACHE="${GOMODCACHE:-"${ROOT_DIR}/build/go-mod-cache"}"
if ! command -v "${GO_BIN}" >/dev/null 2>&1; then
echo "Go toolchain not found. Install Go or set GO_BIN=/path/to/go." >&2
exit 1
fi
if [[ ! -d "${TORRSERVER_DIR}" ]]; then
echo "TorrServer source not found at ${TORRSERVER_DIR}" >&2
exit 1
fi
if [[ -z "${NDK_ROOT}" ]]; then
if [[ ! -d "${SDK_ROOT}/ndk" ]]; then
echo "Android NDK not found. Set ANDROID_HOME, ANDROID_SDK_ROOT, or ANDROID_NDK_HOME." >&2
exit 1
fi
NDK_VERSION="$(ls -1 "${SDK_ROOT}/ndk" | sort | tail -n 1)"
NDK_ROOT="${SDK_ROOT}/ndk/${NDK_VERSION}"
fi
PREBUILT_ROOT="${NDK_ROOT}/toolchains/llvm/prebuilt"
HOST_TAG=""
for candidate in darwin-x86_64 linux-x86_64; do
if [[ -d "${PREBUILT_ROOT}/${candidate}" ]]; then
HOST_TAG="${candidate}"
break
fi
done
if [[ -z "${HOST_TAG}" ]]; then
echo "Could not find an LLVM prebuilt toolchain under ${PREBUILT_ROOT}" >&2
exit 1
fi
TOOLCHAIN="${PREBUILT_ROOT}/${HOST_TAG}"
LDFLAGS="${LDFLAGS:-"-s -w -checklinkname=0"}"
BUILD_FLAGS=(-tags=nosqlite -trimpath -ldflags="${LDFLAGS}")
mkdir -p "${GOCACHE}" "${GOMODCACHE}"
build_abi() {
local abi="$1"
local goarch="$2"
local goarm="$3"
local triple="$4"
local api_level="$5"
local cc="${TOOLCHAIN}/bin/${triple}${api_level}-clang"
local cxx="${TOOLCHAIN}/bin/${triple}${api_level}-clang++"
local output="${OUT_DIR}/${abi}/libtorrserver.so"
if [[ ! -x "${cc}" ]]; then
echo "Compiler not found: ${cc}" >&2
exit 1
fi
mkdir -p "$(dirname "${output}")"
echo "Building ${abi} -> ${output}"
local env_vars=(
GOOS=android
GOARCH="${goarch}"
CGO_ENABLED=1
CC="${cc}"
CXX="${cxx}"
)
if [[ -n "${goarm}" ]]; then
env_vars+=(GOARM="${goarm}")
fi
(
cd "${TORRSERVER_DIR}"
env "${env_vars[@]}" "${GO_BIN}" build "${BUILD_FLAGS[@]}" -o "${output}" ./cmd
)
chmod 755 "${output}"
if [[ "${USE_UPX:-0}" == "1" ]] && command -v "${UPX_BIN}" >/dev/null 2>&1; then
"${UPX_BIN}" -q "${output}" || echo "UPX compression failed for ${output}; leaving uncompressed" >&2
fi
}
build_abi "arm64-v8a" "arm64" "" "aarch64-linux-android" "21"
build_abi "armeabi-v7a" "arm" "7" "armv7a-linux-androideabi" "21"
build_abi "x86" "386" "" "i686-linux-android" "21"
build_abi "x86_64" "amd64" "" "x86_64-linux-android" "21"
echo "TorrServer Android binaries updated in ${OUT_DIR}"