diff --git a/ftc-new-project b/ftc-new-project index 8c3b7ab..6723ad4 100755 --- a/ftc-new-project +++ b/ftc-new-project @@ -211,6 +211,9 @@ fi cd "$(dirname "$PROJECT_DIR")" echo "" +# Setup Android SDK (needed for deployment) +setup_android_sdk + # Create project echo ">>> Creating project..." create_project_structure "$PROJECT_DIR" diff --git a/linux/lib.sh b/linux/lib.sh index fe4f84e..717f535 100755 --- a/linux/lib.sh +++ b/linux/lib.sh @@ -161,42 +161,63 @@ cd "$SDK_DIR" || exit 1 # Check for Android SDK configuration if [ ! -f "local.properties" ] && [ -z "$ANDROID_HOME" ]; then echo "" - echo "════════════════════════════════════════════════════════════════" - echo " Error: Android SDK Not Configured" - echo "════════════════════════════════════════════════════════════════" - echo "" - echo "The FTC SDK needs the Android SDK to build APKs." - echo "" - echo "FIX OPTION 1: Set ANDROID_HOME (recommended)" - echo " export ANDROID_HOME=/path/to/android/sdk" - echo " echo 'export ANDROID_HOME=/path/to/android/sdk' >> ~/.bashrc" - echo "" - echo "FIX OPTION 2: Create local.properties" - echo " echo 'sdk.dir=/path/to/android/sdk' > ~/ftc-sdk/local.properties" - echo "" - echo "════════════════════════════════════════════════════════════════" - echo " How to Install Android SDK" - echo "════════════════════════════════════════════════════════════════" - echo "" - echo "1. Download Android Studio:" - echo " https://developer.android.com/studio" - echo "" - echo "2. Install and open Android Studio" - echo "" - echo "3. Go to: Tools → SDK Manager" - echo "" - echo "4. Note the 'Android SDK Location' path shown" - echo "" - echo "5. Use that path in FIX OPTION 1 or 2 above" - echo "" - echo "Typical Android SDK locations:" - echo " • Linux: ~/Android/Sdk" - echo " • macOS: ~/Library/Android/sdk" - echo " • Windows: C:\\Users\\YourName\\AppData\\Local\\Android\\Sdk" - echo "" - echo "════════════════════════════════════════════════════════════════" - echo "" - exit 1 + echo "Android SDK not found. Attempting auto-setup..." + + # Try to find common Android SDK locations + FOUND_SDK="" + for loc in "$HOME/Android/Sdk" "$HOME/.android-sdk" "$HOME/Library/Android/sdk"; do + if [ -d "$loc" ] && [ -d "$loc/platforms" ]; then + FOUND_SDK="$loc" + break + fi + done + + if [ -n "$FOUND_SDK" ]; then + echo "✓ Found Android SDK at $FOUND_SDK" + echo "sdk.dir=$FOUND_SDK" > local.properties + export ANDROID_HOME="$FOUND_SDK" + else + echo "" + echo "════════════════════════════════════════════════════════════════" + echo " Error: Android SDK Not Configured" + echo "════════════════════════════════════════════════════════════════" + echo "" + echo "The FTC SDK needs the Android SDK to build APKs." + echo "" + echo "FIX OPTION 1: Run setup automatically" + echo " Create a new project with ftc-new-project (it will set up Android SDK)" + echo "" + echo "FIX OPTION 2: Set ANDROID_HOME manually" + echo " export ANDROID_HOME=/path/to/android/sdk" + echo " echo 'export ANDROID_HOME=/path/to/android/sdk' >> ~/.bashrc" + echo "" + echo "FIX OPTION 3: Create local.properties" + echo " echo 'sdk.dir=/path/to/android/sdk' > ~/ftc-sdk/local.properties" + echo "" + echo "════════════════════════════════════════════════════════════════" + echo " How to Install Android SDK" + echo "════════════════════════════════════════════════════════════════" + echo "" + echo "1. Download Android Studio:" + echo " https://developer.android.com/studio" + echo "" + echo "2. Install and open Android Studio" + echo "" + echo "3. Go to: Tools → SDK Manager" + echo "" + echo "4. Note the 'Android SDK Location' path shown" + echo "" + echo "5. Use that path in FIX OPTION 2 or 3 above" + echo "" + echo "Typical Android SDK locations:" + echo " • Linux: ~/Android/Sdk" + echo " • macOS: ~/Library/Android/sdk" + echo " • Windows: C:\\Users\\YourName\\AppData\\Local\\Android\\Sdk" + echo "" + echo "════════════════════════════════════════════════════════════════" + echo "" + exit 1 + fi fi if ! ./gradlew build; then @@ -492,4 +513,111 @@ check_prerequisites() { echo "✓ All prerequisites satisfied" return 0 +} + +# Setup Android SDK automatically +setup_android_sdk() { + local android_sdk_dir="${ANDROID_SDK_DIR:-$HOME/.android-sdk}" + + # Check if already configured + if [ -n "$ANDROID_HOME" ] && [ -d "$ANDROID_HOME" ]; then + echo "✓ Android SDK already configured at $ANDROID_HOME" + return 0 + fi + + if [ -d "$android_sdk_dir" ] && [ -f "$android_sdk_dir/cmdline-tools/latest/bin/sdkmanager" ]; then + echo "✓ Android SDK found at $android_sdk_dir" + export ANDROID_HOME="$android_sdk_dir" + return 0 + fi + + echo "" + echo ">>> Setting up Android SDK..." + echo "This is needed to build APKs for the Control Hub." + echo "Download size: ~150MB" + echo "" + + # Detect OS + local os_type="" + case "$(uname -s)" in + Linux*) os_type="linux" ;; + Darwin*) os_type="mac" ;; + *) + echo "Unsupported OS for auto-setup" + return 1 + ;; + esac + + # Download command-line tools + local tools_url="" + if [ "$os_type" = "linux" ]; then + tools_url="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip" + else + tools_url="https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip" + fi + + echo "Downloading Android SDK command-line tools..." + local temp_zip=$(mktemp -d)/cmdline-tools.zip + + if command -v curl &> /dev/null; then + curl -L "$tools_url" -o "$temp_zip" 2>/dev/null || { + echo "Error: Failed to download Android SDK tools" + return 1 + } + elif command -v wget &> /dev/null; then + wget -q "$tools_url" -O "$temp_zip" || { + echo "Error: Failed to download Android SDK tools" + return 1 + } + else + echo "Error: Need curl or wget to download" + return 1 + fi + + # Extract + echo "Installing to $android_sdk_dir..." + mkdir -p "$android_sdk_dir/cmdline-tools" + + if ! command -v unzip &> /dev/null; then + echo "Error: unzip not found. Install with: sudo apt install unzip" + return 1 + fi + + unzip -q "$temp_zip" -d "$android_sdk_dir/cmdline-tools" + mv "$android_sdk_dir/cmdline-tools/cmdline-tools" "$android_sdk_dir/cmdline-tools/latest" + rm -rf "$(dirname "$temp_zip")" + + export ANDROID_HOME="$android_sdk_dir" + export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin" + + # Accept licenses and install essentials + echo "Installing Android SDK components..." + yes | sdkmanager --licenses > /dev/null 2>&1 || true + sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" > /dev/null 2>&1 + + # Add to shell RC files for persistence + local shell_rc="" + if [ -n "$BASH_VERSION" ]; then + shell_rc="$HOME/.bashrc" + elif [ -n "$ZSH_VERSION" ]; then + shell_rc="$HOME/.zshrc" + fi + + if [ -n "$shell_rc" ] && [ -f "$shell_rc" ]; then + if ! grep -q "ANDROID_HOME.*android-sdk" "$shell_rc"; then + echo "" >> "$shell_rc" + echo "# Android SDK (added by FTC Project Generator)" >> "$shell_rc" + echo "export ANDROID_HOME=\"$android_sdk_dir\"" >> "$shell_rc" + echo "export PATH=\"\$PATH:\$ANDROID_HOME/cmdline-tools/latest/bin:\$ANDROID_HOME/platform-tools\"" >> "$shell_rc" + echo "Note: Added ANDROID_HOME to $shell_rc" + fi + fi + + # Create local.properties in FTC SDK + if [ -n "$FTC_SDK_DIR" ] && [ -d "$FTC_SDK_DIR" ]; then + echo "sdk.dir=$android_sdk_dir" > "$FTC_SDK_DIR/local.properties" + fi + + echo "✓ Android SDK configured at $android_sdk_dir" + echo "" } \ No newline at end of file