277 lines
6.8 KiB
Markdown
277 lines
6.8 KiB
Markdown
# Development Guide - Plan B Logistics Flutter App
|
|
|
|
This guide covers building and running the Plan B Logistics Flutter app on Android devices (KM10) with local backend communication.
|
|
|
|
## Prerequisites
|
|
|
|
- Flutter SDK installed and configured
|
|
- Android SDK installed (with platform-tools for adb)
|
|
- Android device (KM10) connected via USB with USB debugging enabled
|
|
- Backend API running on localhost (Mac)
|
|
|
|
## Device Setup
|
|
|
|
### 1. Verify Device Connection
|
|
|
|
Check that your Android device is connected and recognized:
|
|
|
|
```bash
|
|
flutter devices
|
|
```
|
|
|
|
You should see output similar to:
|
|
```
|
|
KM10 (mobile) • 24117ad4 • android-arm64 • Android 13 (API 33)
|
|
```
|
|
|
|
Alternatively, use adb directly:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb devices -l
|
|
```
|
|
|
|
### 2. Configure ADB Reverse Proxy
|
|
|
|
The app needs to communicate with your local backend API running on `localhost:7182`. Since the Android device cannot access your Mac's localhost directly, you need to set up a reverse proxy using adb.
|
|
|
|
#### Get Device Serial Number
|
|
|
|
First, identify your device's serial number:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb devices
|
|
```
|
|
|
|
Example output:
|
|
```
|
|
24117ad4 device
|
|
```
|
|
|
|
#### Set Up Reverse Proxy
|
|
|
|
Forward the device's localhost:7182 to your Mac's localhost:7182:
|
|
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse tcp:7182 tcp:7182
|
|
```
|
|
|
|
Replace `24117ad4` with your actual device serial number.
|
|
|
|
#### Verify Reverse Proxy
|
|
|
|
Check that the reverse proxy is active:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse --list
|
|
```
|
|
|
|
Expected output:
|
|
```
|
|
tcp:7182 tcp:7182
|
|
```
|
|
|
|
#### Test Backend Connectivity (Optional)
|
|
|
|
From the device shell, test if the backend is accessible:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 shell "curl -k https://localhost:7182/api/query/simpleDeliveryRouteQueryItems -X POST -H 'Content-Type: application/json' -d '{}' -m 5 2>&1 | head -10"
|
|
```
|
|
|
|
## Building and Running
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
flutter pub get
|
|
```
|
|
|
|
### 2. Run on Connected Device
|
|
|
|
Run the app on the KM10 device in debug mode:
|
|
|
|
```bash
|
|
flutter run -d KM10
|
|
```
|
|
|
|
Or using the device serial number:
|
|
```bash
|
|
flutter run -d 24117ad4
|
|
```
|
|
|
|
### 3. Hot Reload and Restart
|
|
|
|
While the app is running:
|
|
- **Hot Reload** (r): Reload changed code without restarting
|
|
- **Hot Restart** (R): Restart the entire app
|
|
- **Quit** (q): Stop the app
|
|
|
|
### 4. Build Release APK
|
|
|
|
To build a release APK:
|
|
|
|
```bash
|
|
flutter build apk --release
|
|
```
|
|
|
|
The APK will be located at:
|
|
```
|
|
build/app/outputs/flutter-apk/app-release.apk
|
|
```
|
|
|
|
## Development Workflow
|
|
|
|
### Full Development Session
|
|
|
|
```bash
|
|
# 1. Check device connection
|
|
flutter devices
|
|
|
|
# 2. Set up ADB reverse proxy (do this once per device connection)
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse tcp:7182 tcp:7182
|
|
|
|
# 3. Verify reverse proxy
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse --list
|
|
|
|
# 4. Run the app
|
|
flutter run -d KM10
|
|
```
|
|
|
|
### If Backend Connection Fails
|
|
|
|
If the app cannot connect to the backend API:
|
|
|
|
1. Verify backend is running on Mac:
|
|
```bash
|
|
curl https://localhost:7182/api/query/simpleDeliveryRouteQueryItems \
|
|
-X POST \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{}'
|
|
```
|
|
|
|
2. Check ADB reverse proxy is active:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse --list
|
|
```
|
|
|
|
3. Re-establish reverse proxy if needed:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse --remove-all
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 reverse tcp:7182 tcp:7182
|
|
```
|
|
|
|
4. Check device logs for errors:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 logcat -s flutter:I -d -t 100
|
|
```
|
|
|
|
## API Configuration
|
|
|
|
The app is configured to use the following API endpoints:
|
|
|
|
- **Query Base URL**: `https://localhost:7182/api/query`
|
|
- **Command Base URL**: `https://localhost:7182/api/command`
|
|
|
|
These are configured in `lib/api/openapi_config.dart`.
|
|
|
|
## Common Commands Reference
|
|
|
|
### Device Management
|
|
|
|
```bash
|
|
# List all connected devices
|
|
flutter devices
|
|
|
|
# List devices with adb
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb devices -l
|
|
|
|
# Get device info
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 shell getprop
|
|
```
|
|
|
|
### ADB Reverse Proxy
|
|
|
|
```bash
|
|
# Set up reverse proxy for port 7182
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s <DEVICE_ID> reverse tcp:7182 tcp:7182
|
|
|
|
# List all reverse proxies
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s <DEVICE_ID> reverse --list
|
|
|
|
# Remove specific reverse proxy
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s <DEVICE_ID> reverse --remove tcp:7182
|
|
|
|
# Remove all reverse proxies
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s <DEVICE_ID> reverse --remove-all
|
|
```
|
|
|
|
### Logging
|
|
|
|
```bash
|
|
# View Flutter logs (last 100 lines)
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 logcat -s flutter:I -d -t 100
|
|
|
|
# View Flutter logs in real-time
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 logcat -s flutter:I -v time
|
|
|
|
# View all logs (last 300 lines)
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 logcat -d -t 300
|
|
```
|
|
|
|
### Build Commands
|
|
|
|
```bash
|
|
# Debug build (default)
|
|
flutter build apk --debug
|
|
|
|
# Release build
|
|
flutter build apk --release
|
|
|
|
# Profile build (for performance testing)
|
|
flutter build apk --profile
|
|
|
|
# Install APK directly
|
|
flutter install -d KM10
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Device Not Found
|
|
|
|
If `flutter devices` doesn't show your device:
|
|
|
|
1. Check USB debugging is enabled on the device
|
|
2. Check device is authorized (check device screen for prompt)
|
|
3. Restart adb server:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb kill-server
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb start-server
|
|
```
|
|
|
|
### App Crashes on Startup
|
|
|
|
1. Check logs:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 logcat -d | grep -i error
|
|
```
|
|
|
|
2. Clear app data:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 shell pm clear com.goutezplanb.planb_logistic
|
|
```
|
|
|
|
3. Uninstall and reinstall:
|
|
```bash
|
|
/Users/mathias/Library/Android/sdk/platform-tools/adb -s 24117ad4 uninstall com.goutezplanb.planb_logistic
|
|
flutter run -d KM10
|
|
```
|
|
|
|
### Backend Connection Issues
|
|
|
|
1. Verify reverse proxy is active
|
|
2. Check backend API is running
|
|
3. Check SSL certificate issues (app uses `https://localhost:7182`)
|
|
4. Review network logs in the Flutter output
|
|
|
|
## Additional Resources
|
|
|
|
- Flutter Documentation: https://docs.flutter.dev
|
|
- Android Debug Bridge (adb): https://developer.android.com/studio/command-line/adb
|
|
- Project-specific guidelines: See CLAUDE.md for code standards and architecture
|