Running your Flutter app on a real mobile device gives you the most accurate picture of performance, touch behavior, and hardware interactions. In this guide, you'll learn exactly how to get your Flutter app running on an Android or iOS phone — from enabling developer options to launching your first build.
1. Prerequisites
Before you start, make sure the following are in place:
- Flutter SDK installed (
flutter --versionto verify) - Android Studio or Xcode installed
- A USB cable (for initial setup)
- Both your PC and phone on the same Wi-Fi network (for wireless debugging)
Run the Flutter doctor command to confirm your environment is ready:
flutter doctor
Fix any issues flagged before proceeding.
Android Setup
1. Enable Developer Options
- Open
Settings→About Phone - Tap
Build Number7 times until you see "You are now a developer!" - Go back to
Settings→System→Developer Options - Toggle Developer Options ON
Note: On MIUI (Xiaomi) devices, tap
MIUI Versioninstead ofBuild Number. On Samsung, it's underSoftware Information.
2. Enable USB Debugging
Inside Developer Options:
- Turn on USB Debugging
- (Optional for Android 11+) Turn on Wireless Debugging
- (Optional) Turn on Install via USB
3. Connect via USB
Plug your phone into your PC via USB. When prompted on your phone, tap "Allow USB Debugging" and check "Always allow from this computer".
Then verify the connection:
adb devices
Expected output:
List of devices attached
ABC123XYZ device
Now run your Flutter app:
flutter run
If you have multiple devices, specify the device ID:
flutter run -d <DEVICE_ID>
To get a list of connected devices and their IDs:
flutter devices
4. Connect Wirelessly (Android 11+)
Once your device is connected via USB, you can switch to wireless mode so you no longer need the cable.
# Switch ADB to TCP/IP mode on port 5555
adb tcpip 5555
# Find your phone's IP address
adb shell ip route
# Connect wirelessly
adb connect <PHONE_IP_ADDRESS>:5555
# Example:
adb connect 192.168.1.105:5555
# Verify
adb devices
You can now unplug the USB cable and run:
flutter run -d <PHONE_IP_ADDRESS>:5555
Android 11+ Wireless Debugging (Built-in Method)
- Go to
Developer Options→Wireless Debugging→ Turn it ON - Tap "Pair device with pairing code"
- Note the IP address, pairing port, and 6-digit pairing code
# Pair first
adb pair <IP_ADDRESS>:<PAIRING_PORT>
# Example: adb pair 192.168.1.105:43127
# Enter the 6-digit code when prompted
# Then connect
adb connect <IP_ADDRESS>:<DEBUG_PORT>
iOS Setup
1. Requirements
- A Mac running macOS
- Xcode installed from the App Store
- An Apple ID (free account works for testing)
- Physical iPhone or iPad with iOS 12+
2. Trust Your Mac
- Open Xcode
- Connect your iPhone via USB
- On your phone, tap "Trust This Computer" and enter your passcode
3. Register Your Device
In Xcode, open Window → Devices and Simulators. Your device should appear. If prompted, click "Add Account" to sign in with your Apple ID.
4. Open the iOS Project
cd ios
open Runner.xcworkspace
In Xcode:
- Select your device from the top device dropdown
- Go to
Signing & Capabilities - Select your Team (your Apple ID)
- Ensure Bundle Identifier is unique (e.g.,
com.yourname.myapp)
5. Run from Terminal
flutter run
Or select your iPhone in Xcode and hit the ** Run** button.
Note: Free Apple accounts can only sideload apps that are valid for 7 days. You'll need to reinstall after that.
Hot Reload & Hot Restart
One of Flutter's best features is instant code updates without restarting the app.
| Shortcut | Action |
|----------|--------|
| r | Hot reload — applies code changes instantly |
| R | Hot restart — restarts the app, preserving state |
| q | Quit the running app |
These keyboard shortcuts work directly in the terminal while flutter run is active.
Build Modes
Flutter supports three build modes, each serving a different purpose:
# Debug mode (default) — hot reload enabled, slower performance
flutter run
# Profile mode — for performance analysis
flutter run --profile
# Release mode — optimized, no debug tools
flutter run --release
Always test your final app in release mode before publishing to make sure performance is representative.
Troubleshooting
Pro Tips
-
Save your device ID in a shell alias to avoid retyping it every session:
codealias frun="flutter run -d 192.168.1.105:5555" -
Use
flutter logsin a separate terminal window to stream device logs in real time. -
Enable "Stay Awake" in Developer Options so your phone screen doesn't lock while developing.
-
Set a static IP on your router for your phone so the wireless ADB address never changes.
-
Run
flutter analyzebefore testing to catch any code issues early.
Quick Reference
# Check Flutter environment
flutter doctor
# List connected devices
flutter devices
# Run on connected device (auto-selects if only one)
flutter run
# Run on a specific device
flutter run -d <DEVICE_ID>
# Run in release mode
flutter run --release
# Stream device logs
flutter logs
# Build APK for Android
flutter build apk
# Build IPA for iOS
flutter build ipa
# Disconnect ADB wireless
adb disconnect <IP>:5555
Conclusion
Running Flutter on a real device is essential for catching real-world performance issues and hardware-specific bugs that emulators miss. Whether you're on Android or iOS, the process is straightforward once Developer Options and trust settings are configured. Use hot reload to iterate quickly, profile mode to spot bottlenecks, and release mode to validate final performance before shipping.
Related Topics:
- Flutter Android Phone Setup Guide
- Flutter Performance Optimization Tips
- Deploying Flutter Apps to the Play Store
External Resources:
- Flutter Official Documentation — Complete Flutter SDK reference
- Android Developer Options Guide — Official Android debugging guide
- Apple Developer — Running Your App on a Device — Official iOS device setup
- ADB Documentation — Full ADB command reference

