Compare commits
4 Commits
fd9c573131
...
26c1441acb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26c1441acb | ||
|
|
7684db62ab | ||
|
|
f69870b87f | ||
|
|
9bd16f3dd0 |
@@ -211,6 +211,9 @@ fi
|
|||||||
cd "$(dirname "$PROJECT_DIR")"
|
cd "$(dirname "$PROJECT_DIR")"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
# Setup Android SDK (needed for deployment)
|
||||||
|
setup_android_sdk
|
||||||
|
|
||||||
# Create project
|
# Create project
|
||||||
echo ">>> Creating project..."
|
echo ">>> Creating project..."
|
||||||
create_project_structure "$PROJECT_DIR"
|
create_project_structure "$PROJECT_DIR"
|
||||||
|
|||||||
439
linux/lib.sh
439
linux/lib.sh
@@ -90,25 +90,331 @@ CONTROL_HUB_PORT="5555"
|
|||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
-h|--help) echo "Deploy to Control Hub"; echo "Usage: $0 [--usb|--wifi] [-i IP]"; exit 0 ;;
|
-h|--help)
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " Deploy FTC Project to Control Hub"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "Usage: $0 [options]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo " --usb Force USB connection"
|
||||||
|
echo " --wifi Force WiFi Direct connection"
|
||||||
|
echo " -i, --ip <ip> Custom Control Hub IP"
|
||||||
|
echo " -h, --help Show this help"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " $0 # Auto-detect connection"
|
||||||
|
echo " $0 --usb # Use USB only"
|
||||||
|
echo " $0 --wifi # Use WiFi Direct"
|
||||||
|
echo " $0 -i 192.168.1.5 # Custom IP"
|
||||||
|
echo ""
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
-i|--ip) CONTROL_HUB_IP="$2"; shift 2 ;;
|
-i|--ip) CONTROL_HUB_IP="$2"; shift 2 ;;
|
||||||
|
--usb) FORCE_USB=true; shift ;;
|
||||||
|
--wifi) FORCE_WIFI=true; shift ;;
|
||||||
*) shift ;;
|
*) shift ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Deploying to SDK..."
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
./gradlew deployToSDK || exit 1
|
echo " FTC Project Deployment"
|
||||||
echo "Building APK..."
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
cd "${HOME}/ftc-sdk" && ./gradlew build || exit 1
|
echo ""
|
||||||
APK_PATH="${HOME}/ftc-sdk/FtcRobotController/build/outputs/apk/debug/FtcRobotController-debug.apk"
|
|
||||||
[ -f "$APK_PATH" ] || { echo "APK not found"; exit 1; }
|
# Step 1: Deploy code to SDK
|
||||||
echo "Installing..."
|
echo "Step 1: Deploying code to SDK TeamCode..."
|
||||||
if adb devices | grep -q device; then
|
if ! ./gradlew deployToSDK; then
|
||||||
adb install -r "$APK_PATH" && echo "✓ Deployed!" || exit 1
|
echo ""
|
||||||
else
|
echo "Error: Failed to deploy code"
|
||||||
adb connect "$CONTROL_HUB_IP:$CONTROL_HUB_PORT" && sleep 2
|
echo "Make sure you're in the project directory"
|
||||||
adb install -r "$APK_PATH" && echo "✓ Deployed!" || exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
echo "✓ Code deployed"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 2: Build APK
|
||||||
|
echo "Step 2: Building APK..."
|
||||||
|
SDK_DIR="${HOME}/ftc-sdk"
|
||||||
|
|
||||||
|
if [ ! -d "$SDK_DIR" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " Error: FTC SDK Not Found"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "The FTC SDK should be at: $SDK_DIR"
|
||||||
|
echo ""
|
||||||
|
echo "This should have been set up when you created the project."
|
||||||
|
echo ""
|
||||||
|
echo "To fix:"
|
||||||
|
echo " git clone --depth 1 --branch v10.1.1 \\"
|
||||||
|
echo " https://github.com/FIRST-Tech-Challenge/FtcRobotController.git \\"
|
||||||
|
echo " ~/ftc-sdk"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$SDK_DIR" || exit 1
|
||||||
|
|
||||||
|
# Check for Android SDK configuration
|
||||||
|
if [ ! -f "local.properties" ] && [ -z "$ANDROID_HOME" ]; then
|
||||||
|
echo ""
|
||||||
|
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
|
||||||
|
|
||||||
|
# Build the APK (assembleDebug creates the actual APK file)
|
||||||
|
# Suppress Java version warnings by setting gradle.properties
|
||||||
|
if [ ! -f "gradle.properties" ] || ! grep -q "android.javaCompile.suppressSourceTargetDeprecationWarning" gradle.properties 2>/dev/null; then
|
||||||
|
echo "" >> gradle.properties
|
||||||
|
echo "# Suppress Java version deprecation warnings" >> gradle.properties
|
||||||
|
echo "android.javaCompile.suppressSourceTargetDeprecationWarning=true" >> gradle.properties
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! ./gradlew assembleDebug; then
|
||||||
|
echo ""
|
||||||
|
echo "Error: APK build failed"
|
||||||
|
echo "Check the error messages above for details"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find the APK - path varies by FTC SDK version
|
||||||
|
APK_PATH=""
|
||||||
|
for possible_path in \
|
||||||
|
"$SDK_DIR/TeamCode/build/outputs/apk/debug/TeamCode-debug.apk" \
|
||||||
|
"$SDK_DIR/FtcRobotController/build/outputs/apk/debug/FtcRobotController-debug.apk" \
|
||||||
|
"$SDK_DIR/build/outputs/apk/debug/FtcRobotController-debug.apk" \
|
||||||
|
"$SDK_DIR/FtcRobotController/build/outputs/apk/FtcRobotController-debug.apk"; do
|
||||||
|
if [ -f "$possible_path" ]; then
|
||||||
|
APK_PATH="$possible_path"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# If still not found, search for it
|
||||||
|
if [ -z "$APK_PATH" ]; then
|
||||||
|
APK_PATH=$(find "$SDK_DIR" -name "*-debug.apk" -type f 2>/dev/null | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$APK_PATH" ] || [ ! -f "$APK_PATH" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Error: APK not found after build"
|
||||||
|
echo ""
|
||||||
|
echo "Build succeeded but APK location is unexpected."
|
||||||
|
echo "Searched in:"
|
||||||
|
echo " • $SDK_DIR/TeamCode/build/outputs/apk/debug/"
|
||||||
|
echo " • $SDK_DIR/FtcRobotController/build/outputs/apk/debug/"
|
||||||
|
echo ""
|
||||||
|
echo "To find it manually:"
|
||||||
|
echo " find ~/ftc-sdk -name '*.apk' -type f"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ APK built at: $(basename "$APK_PATH")"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 3: Install to Control Hub
|
||||||
|
echo "Step 3: Installing to Control Hub..."
|
||||||
|
|
||||||
|
if ! command -v adb &> /dev/null; then
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " Error: adb Command Not Found"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "The 'adb' tool is needed to install APKs to the Control Hub."
|
||||||
|
echo ""
|
||||||
|
echo "Install:"
|
||||||
|
echo " • Ubuntu/Debian: sudo apt install android-tools-adb"
|
||||||
|
echo " • Arch Linux: sudo pacman -S android-tools"
|
||||||
|
echo " • macOS: brew install android-platform-tools"
|
||||||
|
echo ""
|
||||||
|
echo "Or download Android Platform Tools:"
|
||||||
|
echo " https://developer.android.com/studio/releases/platform-tools"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Checking for Control Hub connection..."
|
||||||
|
INSTALLED=false
|
||||||
|
|
||||||
|
# Try USB first
|
||||||
|
if [ "$FORCE_WIFI" != "true" ]; then
|
||||||
|
USB_COUNT=$(adb devices 2>/dev/null | grep -v "List" | grep -E "device$|unauthorized$" | wc -l)
|
||||||
|
if [ "$USB_COUNT" -gt 0 ]; then
|
||||||
|
# Check if authorized
|
||||||
|
if adb devices 2>/dev/null | grep -q "unauthorized"; then
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " USB Device Found but Unauthorized"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "A Control Hub is connected via USB but not authorized."
|
||||||
|
echo ""
|
||||||
|
echo "To fix:"
|
||||||
|
echo " 1. Check the Control Hub screen"
|
||||||
|
echo " 2. Allow USB debugging when prompted"
|
||||||
|
echo " 3. Run this script again"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ Control Hub connected via USB"
|
||||||
|
if adb install -r "$APK_PATH" 2>&1; then
|
||||||
|
INSTALLED=true
|
||||||
|
fi
|
||||||
|
elif [ "$FORCE_USB" = "true" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " No USB Device Found"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "No Control Hub detected via USB (--usb specified)."
|
||||||
|
echo ""
|
||||||
|
echo "Make sure:"
|
||||||
|
echo " • Control Hub is powered on"
|
||||||
|
echo " • USB cable is connected"
|
||||||
|
echo " • USB debugging is enabled"
|
||||||
|
echo ""
|
||||||
|
echo "Check connection: adb devices"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Try WiFi if USB didn't work
|
||||||
|
if [ "$INSTALLED" = "false" ] && [ "$FORCE_USB" != "true" ]; then
|
||||||
|
echo "No USB connection. Trying WiFi at $CONTROL_HUB_IP:$CONTROL_HUB_PORT..."
|
||||||
|
|
||||||
|
# Try to connect with timeout
|
||||||
|
adb connect "$CONTROL_HUB_IP:$CONTROL_HUB_PORT" &>/dev/null &
|
||||||
|
ADB_CONNECT_PID=$!
|
||||||
|
|
||||||
|
# Wait up to 5 seconds for connection
|
||||||
|
for i in {1..10}; do
|
||||||
|
if ! kill -0 $ADB_CONNECT_PID 2>/dev/null; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 0.5
|
||||||
|
done
|
||||||
|
|
||||||
|
# Kill if still running
|
||||||
|
kill $ADB_CONNECT_PID 2>/dev/null || true
|
||||||
|
|
||||||
|
# Check if connected
|
||||||
|
if adb devices 2>/dev/null | grep -q "$CONTROL_HUB_IP"; then
|
||||||
|
echo "✓ Connected via WiFi"
|
||||||
|
if adb install -r "$APK_PATH" 2>&1; then
|
||||||
|
INSTALLED=true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "✗ Could not connect to Control Hub"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$INSTALLED" = "false" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " No Control Hub Found"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "Could not detect a Control Hub via USB or WiFi."
|
||||||
|
echo ""
|
||||||
|
echo "APK was built successfully at:"
|
||||||
|
echo " $APK_PATH"
|
||||||
|
echo ""
|
||||||
|
echo "To install later:"
|
||||||
|
echo ""
|
||||||
|
echo "Option 1: USB Connection"
|
||||||
|
echo " 1. Connect Control Hub via USB"
|
||||||
|
echo " 2. Run: adb install -r \"$APK_PATH\""
|
||||||
|
echo ""
|
||||||
|
echo "Option 2: WiFi Connection"
|
||||||
|
echo " 1. Connect to Control Hub WiFi network"
|
||||||
|
echo " 2. Run: adb connect 192.168.43.1:5555"
|
||||||
|
echo " 3. Run: adb install -r \"$APK_PATH\""
|
||||||
|
echo ""
|
||||||
|
echo "Option 3: Run this script again when connected"
|
||||||
|
echo " ./deploy-to-robot.sh"
|
||||||
|
echo ""
|
||||||
|
echo "Option 4: Custom IP"
|
||||||
|
echo " ./deploy-to-robot.sh -i YOUR_IP"
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo " ✓ Deployment Complete!"
|
||||||
|
echo "════════════════════════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo "On Driver Station:"
|
||||||
|
echo " 1. Go to OpModes menu"
|
||||||
|
echo " 2. Select TeleOp → 'Main TeleOp'"
|
||||||
|
echo " 3. Press INIT, then START"
|
||||||
|
echo ""
|
||||||
|
echo "Your code is now running on the robot! 🤖"
|
||||||
|
echo ""
|
||||||
ENDSCRIPT
|
ENDSCRIPT
|
||||||
chmod +x "$project_dir/deploy-to-robot.sh"
|
chmod +x "$project_dir/deploy-to-robot.sh"
|
||||||
}
|
}
|
||||||
@@ -288,3 +594,110 @@ check_prerequisites() {
|
|||||||
echo "✓ All prerequisites satisfied"
|
echo "✓ All prerequisites satisfied"
|
||||||
return 0
|
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 ""
|
||||||
|
}
|
||||||
@@ -11,12 +11,14 @@ PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
# Test results
|
# Test results
|
||||||
TESTS_RUN=0
|
TESTS_RUN=0
|
||||||
TESTS_PASSED=0
|
TESTS_PASSED=0
|
||||||
TESTS_FAILED=0
|
TESTS_FAILED=0
|
||||||
|
FAILED_TESTS=()
|
||||||
|
|
||||||
# Helper functions
|
# Helper functions
|
||||||
pass() {
|
pass() {
|
||||||
@@ -27,6 +29,7 @@ pass() {
|
|||||||
|
|
||||||
fail() {
|
fail() {
|
||||||
echo -e "${RED}✗${NC} $1"
|
echo -e "${RED}✗${NC} $1"
|
||||||
|
FAILED_TESTS+=("$1")
|
||||||
((TESTS_FAILED++))
|
((TESTS_FAILED++))
|
||||||
((TESTS_RUN++))
|
((TESTS_RUN++))
|
||||||
}
|
}
|
||||||
@@ -35,6 +38,12 @@ info() {
|
|||||||
echo -e "${YELLOW}ℹ${NC} $1"
|
echo -e "${YELLOW}ℹ${NC} $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
section() {
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}▶${NC} $1"
|
||||||
|
echo "────────────────────────────────────────────────────────────────"
|
||||||
|
}
|
||||||
|
|
||||||
# Test suite selection
|
# Test suite selection
|
||||||
RUN_UNIT=true
|
RUN_UNIT=true
|
||||||
RUN_SYSTEM=true
|
RUN_SYSTEM=true
|
||||||
@@ -257,6 +266,15 @@ echo ""
|
|||||||
echo "Total: $TESTS_RUN"
|
echo "Total: $TESTS_RUN"
|
||||||
echo -e "${GREEN}Passed: $TESTS_PASSED${NC}"
|
echo -e "${GREEN}Passed: $TESTS_PASSED${NC}"
|
||||||
echo -e "${RED}Failed: $TESTS_FAILED${NC}"
|
echo -e "${RED}Failed: $TESTS_FAILED${NC}"
|
||||||
|
|
||||||
|
if [ $TESTS_FAILED -gt 0 ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Failed tests:"
|
||||||
|
for test in "${FAILED_TESTS[@]}"; do
|
||||||
|
echo -e " ${RED}✗${NC} $test"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
if [ $TESTS_FAILED -eq 0 ]; then
|
if [ $TESTS_FAILED -eq 0 ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user