Browse Source
- Document complete process for running Android app without Android Studio - Include step-by-step commands and troubleshooting - Cover emulator startup, app building, installation, and launching - Add performance optimization tips and alternative methods - Provide copy-paste ready command sequences - Include expected results and success indicators This enables development and testing without Android Studio IDE.master
1 changed files with 365 additions and 0 deletions
@ -0,0 +1,365 @@ |
|||||
|
# Running Android App in Standalone Emulator (Without Android Studio) |
||||
|
|
||||
|
**Author**: Matthew Raymer |
||||
|
**Last Updated**: 2025-10-12 06:50:00 UTC |
||||
|
**Version**: 1.0.0 |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
This guide demonstrates how to run the DailyNotification plugin test app in a standalone Android emulator without using Android Studio. This method is useful for development, CI/CD pipelines, and resource-constrained environments. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
### Required Software |
||||
|
- **Android SDK** with command line tools |
||||
|
- **Android Emulator** (`emulator` command) |
||||
|
- **ADB** (Android Debug Bridge) |
||||
|
- **Gradle** (via Gradle Wrapper) |
||||
|
- **Node.js** and **npm** (for TypeScript compilation) |
||||
|
|
||||
|
### System Requirements |
||||
|
- **RAM**: 4GB minimum, 8GB recommended |
||||
|
- **Storage**: 2GB free space for emulator |
||||
|
- **OS**: Linux, macOS, or Windows with WSL |
||||
|
|
||||
|
## Step-by-Step Process |
||||
|
|
||||
|
### 1. Check Available Emulators |
||||
|
|
||||
|
```bash |
||||
|
# List available Android Virtual Devices (AVDs) |
||||
|
emulator -list-avds |
||||
|
|
||||
|
# Example output: |
||||
|
# Pixel8_API34 |
||||
|
``` |
||||
|
|
||||
|
### 2. Start the Emulator |
||||
|
|
||||
|
```bash |
||||
|
# Start emulator in background (recommended) |
||||
|
emulator -avd Pixel8_API34 -no-snapshot-load & |
||||
|
|
||||
|
# Alternative: Start in foreground |
||||
|
emulator -avd Pixel8_API34 |
||||
|
``` |
||||
|
|
||||
|
**Flags Explained:** |
||||
|
- `-avd Pixel8_API34` - Specifies the AVD to use |
||||
|
- `-no-snapshot-load` - Forces fresh boot (recommended for testing) |
||||
|
- `&` - Runs in background (optional) |
||||
|
|
||||
|
### 3. Wait for Emulator to Boot |
||||
|
|
||||
|
```bash |
||||
|
# Wait for emulator to be ready |
||||
|
adb wait-for-device |
||||
|
|
||||
|
# Verify emulator is running |
||||
|
adb devices |
||||
|
|
||||
|
# Example output: |
||||
|
# List of devices attached |
||||
|
# emulator-5554 device |
||||
|
``` |
||||
|
|
||||
|
### 4. Build the Plugin and Test App |
||||
|
|
||||
|
```bash |
||||
|
# Navigate to project directory |
||||
|
cd /path/to/daily-notification-plugin |
||||
|
|
||||
|
# Build TypeScript and native code |
||||
|
./scripts/build-native.sh --platform android |
||||
|
``` |
||||
|
|
||||
|
**What this does:** |
||||
|
- Compiles TypeScript to JavaScript |
||||
|
- Builds Android native code |
||||
|
- Creates plugin AAR files |
||||
|
- Builds test app APK |
||||
|
|
||||
|
### 5. Build Debug APK (Required for Installation) |
||||
|
|
||||
|
```bash |
||||
|
# Navigate to Android directory |
||||
|
cd android |
||||
|
|
||||
|
# Build debug version (includes debug signing) |
||||
|
./gradlew :app:assembleDebug |
||||
|
``` |
||||
|
|
||||
|
**Why Debug APK:** |
||||
|
- **Debug signing** - Automatically signed for installation |
||||
|
- **No certificates needed** - Uses default debug keystore |
||||
|
- **Faster builds** - No optimization, faster compilation |
||||
|
|
||||
|
### 6. Install APK on Emulator |
||||
|
|
||||
|
```bash |
||||
|
# Install the debug APK |
||||
|
adb install app/build/outputs/apk/debug/app-debug.apk |
||||
|
|
||||
|
# Alternative: Install with replacement |
||||
|
adb install -r app/build/outputs/apk/debug/app-debug.apk |
||||
|
``` |
||||
|
|
||||
|
**Installation Options:** |
||||
|
- `adb install` - Install new app |
||||
|
- `adb install -r` - Replace existing app |
||||
|
- `adb install -t` - Allow test APKs |
||||
|
|
||||
|
### 7. Launch the App |
||||
|
|
||||
|
```bash |
||||
|
# Launch the app |
||||
|
adb shell am start -n com.timesafari.dailynotification/.MainActivity |
||||
|
|
||||
|
# Alternative: Launch with specific intent |
||||
|
adb shell am start -a android.intent.action.MAIN -n com.timesafari.dailynotification/.MainActivity |
||||
|
``` |
||||
|
|
||||
|
### 8. Monitor App Logs |
||||
|
|
||||
|
```bash |
||||
|
# View all logs |
||||
|
adb logcat |
||||
|
|
||||
|
# Filter for specific tags |
||||
|
adb logcat -s "Capacitor" "DailyNotification" "Console" |
||||
|
|
||||
|
# View logs for specific process |
||||
|
adb logcat --pid=<PID> |
||||
|
|
||||
|
# Clear logs and view new ones |
||||
|
adb logcat -c && adb logcat |
||||
|
``` |
||||
|
|
||||
|
## Complete Command Sequence |
||||
|
|
||||
|
### Quick Start (Copy-Paste Ready) |
||||
|
|
||||
|
```bash |
||||
|
# 1. Start emulator |
||||
|
emulator -avd Pixel8_API34 -no-snapshot-load & |
||||
|
|
||||
|
# 2. Wait for emulator |
||||
|
adb wait-for-device |
||||
|
|
||||
|
# 3. Build everything |
||||
|
./scripts/build-native.sh --platform android |
||||
|
|
||||
|
# 4. Build debug APK |
||||
|
cd android && ./gradlew :app:assembleDebug |
||||
|
|
||||
|
# 5. Install APK |
||||
|
adb install app/build/outputs/apk/debug/app-debug.apk |
||||
|
|
||||
|
# 6. Launch app |
||||
|
adb shell am start -n com.timesafari.dailynotification/.MainActivity |
||||
|
|
||||
|
# 7. Monitor logs |
||||
|
adb logcat -s "Capacitor" "DailyNotification" "Console" |
||||
|
``` |
||||
|
|
||||
|
## Alternative Methods |
||||
|
|
||||
|
### Method 1: Using Capacitor CLI |
||||
|
|
||||
|
```bash |
||||
|
# Build and run in one command |
||||
|
npx cap run android |
||||
|
|
||||
|
# This will: |
||||
|
# - Build the plugin |
||||
|
# - Sync web assets |
||||
|
# - Build and install APK |
||||
|
# - Launch the app |
||||
|
``` |
||||
|
|
||||
|
### Method 2: Direct Gradle Commands |
||||
|
|
||||
|
```bash |
||||
|
# Build and install directly |
||||
|
cd android |
||||
|
./gradlew :app:assembleDebug |
||||
|
adb install app/build/outputs/apk/debug/app-debug.apk |
||||
|
adb shell am start -n com.timesafari.dailynotification/.MainActivity |
||||
|
``` |
||||
|
|
||||
|
### Method 3: Using Monkey (Alternative Launch) |
||||
|
|
||||
|
```bash |
||||
|
# Install and launch with Monkey |
||||
|
adb install app/build/outputs/apk/debug/app-debug.apk |
||||
|
adb shell monkey -p com.timesafari.dailynotification -c android.intent.category.LAUNCHER 1 |
||||
|
``` |
||||
|
|
||||
|
## Troubleshooting |
||||
|
|
||||
|
### Common Issues |
||||
|
|
||||
|
#### Emulator Won't Start |
||||
|
```bash |
||||
|
# Check available AVDs |
||||
|
emulator -list-avds |
||||
|
|
||||
|
# Check emulator process |
||||
|
ps aux | grep emulator |
||||
|
|
||||
|
# Kill existing emulator |
||||
|
pkill -f emulator |
||||
|
|
||||
|
# Start with verbose logging |
||||
|
emulator -avd Pixel8_API34 -verbose |
||||
|
``` |
||||
|
|
||||
|
#### ADB Connection Issues |
||||
|
```bash |
||||
|
# Check ADB connection |
||||
|
adb devices |
||||
|
|
||||
|
# Restart ADB server |
||||
|
adb kill-server |
||||
|
adb start-server |
||||
|
|
||||
|
# Check ADB version |
||||
|
adb version |
||||
|
``` |
||||
|
|
||||
|
#### APK Installation Fails |
||||
|
```bash |
||||
|
# Check if app is already installed |
||||
|
adb shell pm list packages | grep timesafari |
||||
|
|
||||
|
# Uninstall existing app |
||||
|
adb uninstall com.timesafari.dailynotification |
||||
|
|
||||
|
# Install with force |
||||
|
adb install -r -t app/build/outputs/apk/debug/app-debug.apk |
||||
|
``` |
||||
|
|
||||
|
#### Build Failures |
||||
|
```bash |
||||
|
# Clean build |
||||
|
cd android && ./gradlew clean |
||||
|
|
||||
|
# Rebuild |
||||
|
./gradlew :app:assembleDebug |
||||
|
|
||||
|
# Check Gradle daemon |
||||
|
./gradlew --status |
||||
|
``` |
||||
|
|
||||
|
### Performance Optimization |
||||
|
|
||||
|
#### Emulator Performance |
||||
|
```bash |
||||
|
# Start with hardware acceleration |
||||
|
emulator -avd Pixel8_API34 -accel on |
||||
|
|
||||
|
# Start with specific RAM allocation |
||||
|
emulator -avd Pixel8_API34 -memory 2048 |
||||
|
|
||||
|
# Start with GPU acceleration |
||||
|
emulator -avd Pixel8_API34 -gpu host |
||||
|
``` |
||||
|
|
||||
|
#### Build Performance |
||||
|
```bash |
||||
|
# Enable Gradle daemon |
||||
|
echo "org.gradle.daemon=true" >> ~/.gradle/gradle.properties |
||||
|
|
||||
|
# Increase memory |
||||
|
echo "org.gradle.jvmargs=-Xmx4g" >> ~/.gradle/gradle.properties |
||||
|
|
||||
|
# Enable parallel builds |
||||
|
echo "org.gradle.parallel=true" >> ~/.gradle/gradle.properties |
||||
|
``` |
||||
|
|
||||
|
## Expected Results |
||||
|
|
||||
|
### Successful App Launch |
||||
|
When the app launches successfully, you should see: |
||||
|
|
||||
|
```bash |
||||
|
# ADB output |
||||
|
Starting: Intent { cmp=com.timesafari.dailynotification/.MainActivity } |
||||
|
|
||||
|
# Logcat output |
||||
|
D Capacitor: Starting BridgeActivity |
||||
|
D Capacitor: Registering plugin instance: CapacitorCookies |
||||
|
D Capacitor: Registering plugin instance: WebView |
||||
|
D Capacitor: Registering plugin instance: CapacitorHttp |
||||
|
D Capacitor: Loading app at https://localhost |
||||
|
D Capacitor: App started |
||||
|
D Capacitor: App resumed |
||||
|
I Capacitor/Console: Script loading... |
||||
|
I Capacitor/Console: Creating mock DailyNotification plugin... |
||||
|
I Capacitor/Console: Functions attached to window: [object Object] |
||||
|
``` |
||||
|
|
||||
|
### App Interface |
||||
|
The app should display: |
||||
|
- **Title**: "🔔 DailyNotification Plugin Test" |
||||
|
- **Three buttons**: "Test Plugin", "Configure Plugin", "Check Status" |
||||
|
- **Status area**: Shows test results and plugin status |
||||
|
|
||||
|
## Benefits of Standalone Approach |
||||
|
|
||||
|
### Advantages |
||||
|
- ✅ **No Android Studio** - Pure command line workflow |
||||
|
- ✅ **Faster startup** - No IDE overhead |
||||
|
- ✅ **CI/CD friendly** - Works in automated environments |
||||
|
- ✅ **Resource efficient** - Lower memory usage |
||||
|
- ✅ **Scriptable** - Can be automated |
||||
|
- ✅ **Remote development** - Works over SSH |
||||
|
|
||||
|
### Use Cases |
||||
|
- **Development** - Quick testing and iteration |
||||
|
- **CI/CD pipelines** - Automated testing |
||||
|
- **Remote development** - SSH-based development |
||||
|
- **Resource-constrained environments** - Low-spec machines |
||||
|
- **Team environments** - Shared development servers |
||||
|
|
||||
|
## Integration with Development Workflow |
||||
|
|
||||
|
### Daily Development |
||||
|
```bash |
||||
|
# Quick test cycle |
||||
|
./scripts/build-native.sh --platform android |
||||
|
cd android && ./gradlew :app:assembleDebug |
||||
|
adb install -r app/build/outputs/apk/debug/app-debug.apk |
||||
|
adb shell am start -n com.timesafari.dailynotification/.MainActivity |
||||
|
``` |
||||
|
|
||||
|
### Automated Testing |
||||
|
```bash |
||||
|
# CI/CD pipeline |
||||
|
emulator -avd Pixel8_API34 -no-snapshot-load & |
||||
|
adb wait-for-device |
||||
|
./scripts/build-native.sh --platform android |
||||
|
cd android && ./gradlew :app:assembleDebug |
||||
|
adb install app/build/outputs/apk/debug/app-debug.apk |
||||
|
adb shell am start -n com.timesafari.dailynotification/.MainActivity |
||||
|
# Run tests... |
||||
|
``` |
||||
|
|
||||
|
## Next Steps |
||||
|
|
||||
|
### Testing the App |
||||
|
1. **Click "Test Plugin"** - Tests the mock plugin implementation |
||||
|
2. **Click "Configure Plugin"** - Tests plugin configuration |
||||
|
3. **Click "Check Status"** - Tests plugin status retrieval |
||||
|
4. **Monitor logs** - Check for any errors or issues |
||||
|
|
||||
|
### Development Workflow |
||||
|
1. **Make changes** - Edit plugin code or test app |
||||
|
2. **Rebuild** - Run the build commands |
||||
|
3. **Reinstall** - Install updated APK |
||||
|
4. **Test** - Launch and test functionality |
||||
|
5. **Iterate** - Repeat as needed |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
**This method provides a complete standalone Android development environment without requiring Android Studio!** 🎉 |
Loading…
Reference in new issue