#!/usr/bin/env bash set -e ROOT=$(cd "$(dirname "$0")" && pwd) DIST_DIR="$ROOT/dist" TMP_DIR="$ROOT/.tmp_sdk_pkg" function lookup_version() { VERSION_FILE="$ROOT/../internal/const/const.go" if [ ! -f "$VERSION_FILE" ]; then echo "0.0.0" return fi VERSION=$(grep -E 'Version[[:space:]]*=' "$VERSION_FILE" | head -n 1 | sed -E 's/.*"([0-9.]+)".*/\1/') if [ -z "$VERSION" ]; then echo "0.0.0" else echo "$VERSION" fi } function ensure_cmd() { CMD=$1 if ! command -v "$CMD" >/dev/null 2>&1; then echo "missing command: $CMD" exit 1 fi } function zip_dir() { SRC_DIR=$1 ZIP_FILE=$2 ( cd "$SRC_DIR" || exit 1 zip -r -X -q "$ZIP_FILE" . ) } function build_android_sdk_package() { echo "[sdk] building android aar ..." ensure_cmd zip if [ ! -x "$ROOT/android/gradlew" ]; then echo "android gradlew not found: $ROOT/android/gradlew" exit 1 fi ( cd "$ROOT/android" || exit 1 ./gradlew :httpdns-sdk:clean :httpdns-sdk:assembleNormalRelease ) AAR_FILE=$(find "$ROOT/android/httpdns-sdk/build/outputs/aar" -type f -name "*normal-release*.aar" | head -n 1) if [ -z "$AAR_FILE" ]; then AAR_FILE=$(find "$ROOT/android/httpdns-sdk/build/outputs/aar" -type f -name "*release*.aar" | head -n 1) fi if [ -z "$AAR_FILE" ] || [ ! -f "$AAR_FILE" ]; then echo "android aar is not generated" exit 1 fi PKG_DIR="$TMP_DIR/android" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp "$AAR_FILE" "$PKG_DIR/alicloud-android-httpdns.aar" if [ -f "$ROOT/android/README.md" ]; then cp "$ROOT/android/README.md" "$PKG_DIR/README.md" fi if [ -f "$ROOT/android/httpdns-sdk/proguard-rules.pro" ]; then cp "$ROOT/android/httpdns-sdk/proguard-rules.pro" "$PKG_DIR/proguard-rules.pro" fi zip_dir "$PKG_DIR" "$DIST_DIR/httpdns-sdk-android.zip" } function build_ios_sdk_package() { echo "[sdk] packaging ios xcframework ..." ensure_cmd zip CANDIDATES=( "$ROOT/ios/dist/AlicloudHttpDNS.xcframework" "$ROOT/ios/AlicloudHttpDNS.xcframework" "$ROOT/ios/Build/AlicloudHttpDNS.xcframework" ) XCFRAMEWORK_DIR="" for path in "${CANDIDATES[@]}"; do if [ -d "$path" ]; then XCFRAMEWORK_DIR="$path" break fi done if [ -z "$XCFRAMEWORK_DIR" ]; then echo "ios xcframework not found." echo "please build it on macOS first, then place AlicloudHttpDNS.xcframework under EdgeHttpDNS/sdk/ios/dist/" exit 1 fi PKG_DIR="$TMP_DIR/ios" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp -R "$XCFRAMEWORK_DIR" "$PKG_DIR/" if [ -f "$ROOT/ios/AlicloudHTTPDNS.podspec" ]; then cp "$ROOT/ios/AlicloudHTTPDNS.podspec" "$PKG_DIR/" fi if [ -f "$ROOT/ios/README.md" ]; then cp "$ROOT/ios/README.md" "$PKG_DIR/README.md" fi zip_dir "$PKG_DIR" "$DIST_DIR/httpdns-sdk-ios.zip" } function build_flutter_sdk_package() { echo "[sdk] packaging flutter plugin ..." ensure_cmd zip PLUGIN_DIR="$ROOT/flutter/aliyun_httpdns" if [ ! -d "$PLUGIN_DIR" ]; then echo "flutter plugin directory not found: $PLUGIN_DIR" exit 1 fi PKG_DIR="$TMP_DIR/flutter" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp -R "$PLUGIN_DIR" "$PKG_DIR/" rm -rf "$PKG_DIR/aliyun_httpdns/example/.dart_tool" "$PKG_DIR/aliyun_httpdns/example/build" "$PKG_DIR/aliyun_httpdns/.dart_tool" "$PKG_DIR/aliyun_httpdns/build" zip_dir "$PKG_DIR" "$DIST_DIR/httpdns-sdk-flutter.zip" } function main() { VERSION=$(lookup_version) rm -rf "$TMP_DIR" mkdir -p "$TMP_DIR" "$DIST_DIR" build_android_sdk_package build_ios_sdk_package build_flutter_sdk_package cp "$DIST_DIR/httpdns-sdk-android.zip" "$DIST_DIR/httpdns-sdk-android-v${VERSION}.zip" cp "$DIST_DIR/httpdns-sdk-ios.zip" "$DIST_DIR/httpdns-sdk-ios-v${VERSION}.zip" cp "$DIST_DIR/httpdns-sdk-flutter.zip" "$DIST_DIR/httpdns-sdk-flutter-v${VERSION}.zip" rm -rf "$TMP_DIR" echo "[sdk] done. output: $DIST_DIR" } main "$@"