# Alfred Mobile - Build Instructions ## Quick Start ### Environment Variables Before building, set these environment variables: ```bash export JAVA_HOME=~/android-dev/jdk-17.0.2 export ANDROID_HOME=~/android-dev/android-sdk export PATH=$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH ``` ### Build Commands ```bash # Navigate to project cd ~/.openclaw/workspace/alfred-mobile # List available tasks ./gradlew tasks # Build debug APK ./gradlew assembleDebug # Build release APK (requires signing config) ./gradlew assembleRelease # Run unit tests ./gradlew test # Clean build ./gradlew clean # Check project dependencies ./gradlew dependencies ``` ### Build Output Debug APK will be located at: ``` app/build/outputs/apk/debug/app-debug.apk ``` Release APK will be located at: ``` app/build/outputs/apk/release/app-release-unsigned.apk ``` ## Installing on Device ### Via ADB (Android Debug Bridge) ```bash # List connected devices adb devices # Install debug APK adb install app/build/outputs/apk/debug/app-debug.apk # Or use Gradle ./gradlew installDebug # Uninstall adb uninstall com.openclaw.alfred ``` ## Development on Windows If you prefer to use Android Studio on Windows: 1. **Install Android Studio** from https://developer.android.com/studio 2. **Clone the repository** (in Windows, not WSL): ```cmd cd C:\Development git clone https://repo.anhonesthost.net/jknapp/alfred-mobile.git ``` 3. **Open in Android Studio**: - File → Open → Select alfred-mobile folder - Wait for Gradle sync to complete - Click Run button or press Shift+F10 4. **Configure emulator** (if needed): - Tools → Device Manager - Create Virtual Device - Select a device definition (e.g., Pixel 6) - Download system image (API 34 recommended) - Launch emulator ## Troubleshooting ### Gradle Daemon Issues ```bash # Stop all Gradle daemons ./gradlew --stop # Clean and rebuild ./gradlew clean build ``` ### SDK License Issues ```bash export ANDROID_HOME=~/android-dev/android-sdk yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses ``` ### Java Version Issues ```bash # Verify Java version (should be 17) java -version # If wrong version, ensure JAVA_HOME is set correctly export JAVA_HOME=~/android-dev/jdk-17.0.2 ``` ### Missing Dependencies ```bash # Update SDK components sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" ``` ## IDE Configuration ### Android Studio Preferences **Gradle JDK**: Set to Java 17 - File → Settings → Build → Build Tools → Gradle - Gradle JDK: Select Java 17 **Kotlin Plugin**: Ensure version 1.9.20 or compatible **Code Style**: Kotlin official style guide ## Testing ### Running Tests ```bash # Run all tests ./gradlew test # Run specific test class ./gradlew test --tests com.openclaw.alfred.ExampleTest # Run tests with coverage ./gradlew testDebugUnitTestCoverage ``` ### UI Tests (Android Instrumentation) ```bash # Ensure device/emulator is running adb devices # Run instrumentation tests ./gradlew connectedAndroidTest ``` ## Signing Configuration (Production) For release builds, create `keystore.properties` in the project root: ```properties storeFile=/path/to/keystore.jks storePassword=your_store_password keyAlias=your_key_alias keyPassword=your_key_password ``` Then update `app/build.gradle.kts` to load signing config. ## Continuous Integration ### GitHub Actions / GitLab CI Example ```yaml build: image: openjdk:17-jdk before_script: - wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip - unzip -q commandlinetools-linux-9477386_latest.zip - yes | cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --licenses - cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME "platform-tools" "platforms;android-34" "build-tools;34.0.0" script: - ./gradlew assembleDebug - ./gradlew test artifacts: paths: - app/build/outputs/apk/debug/app-debug.apk ``` ## Performance Optimization ### Build Performance Add to `gradle.properties`: ```properties org.gradle.daemon=true org.gradle.parallel=true org.gradle.caching=true org.gradle.configureondemand=true kotlin.incremental=true ``` ### APK Size Reduction - Enable ProGuard/R8 in release builds (already configured) - Use APK Analyzer: `Build → Analyze APK...` in Android Studio - Enable resource shrinking in `app/build.gradle.kts` ## Additional Resources - **Android Documentation**: https://developer.android.com/docs - **Jetpack Compose**: https://developer.android.com/jetpack/compose - **Kotlin**: https://kotlinlang.org/docs/home.html - **Hilt**: https://dagger.dev/hilt/ - **Material 3**: https://m3.material.io/ --- **Note**: This project is currently in Phase 1 (scaffold complete). Phase 2 will add OpenClaw integration.