Before you clone the Musynth repository and run your first build, you need a correctly configured development environment. This page walks through each prerequisite — Flutter SDK, Dart, Android SDK, iOS tooling, and device permissions — so you can avoid common setup issues before writing a single line of code.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CesarArellano/Music-Player-App/llms.txt
Use this file to discover all available pages before exploring further.
Install Flutter SDK (≥ 3.7.11)
Musynth was originally developed against Flutter 3.7.11 (noted in the README). The repository’s
.fvmrc file currently pins the version to 3.44.4.Install Flutter by following the official Flutter installation guide for your operating system, or use FVM (recommended) to manage multiple Flutter versions side-by-side.Verify your installation:Confirm Dart SDK Version
Musynth requires a Dart SDK version that satisfies
>=3.12.2 <4.0.0 (set in pubspec.yaml). The correct Dart SDK is bundled with Flutter — no separate installation is needed as long as your Flutter version is up to date.Set Up Android SDK and Tooling
For Android builds you will need:
- Android Studio (recommended) or the standalone Android SDK command-line tools
- Android SDK installed and
ANDROID_HOME/ANDROID_SDK_ROOTpointing to it - Java 17 — the project’s
build.gradle.ktssetsJavaVersion.VERSION_17for bothsourceCompatibilityandtargetCompatibility, and the Kotlin compiler targetsJVM_17
build.gradle.kts delegates SDK version resolution to Flutter’s Gradle plugin (flutter.compileSdkVersion, flutter.targetSdkVersion, flutter.minSdkVersion), so the exact compile and target SDK values match the Flutter SDK you have installed. The minimum Android API level is 21 (Android 5.0 Lollipop), taken from the min_sdk_android: 21 setting in pubspec.yaml.Prepare an Android Device or Emulator
You need at least one of the following to run and test the app:
- A physical Android device running Android 5.0 (API 21) or higher, with USB debugging enabled and the device authorized on your machine
- An Android Virtual Device (AVD) created in Android Studio’s AVD Manager, targeting API 21 or above
Testing background playback and media-button interactions is significantly more reliable on a physical device than in the emulator. The emulator also cannot scan real media files, so your library will be empty unless you sideload audio files into the virtual storage.
Install Xcode (iOS builds only)
To build and run Musynth on iOS you need:iOS builds are macOS-only. If you are working on Linux or Windows, you can still build and test the Android target.
- Xcode 15 or later (available on the Mac App Store)
- Xcode Command Line Tools:
xcode-select --install - CocoaPods:
sudo gem install cocoapods— required forpod installto link native iOS dependencies
Understand Required Android Permissions
Musynth declares the following permissions in
android/app/src/main/AndroidManifest.xml. Understanding them before first launch avoids confusion when permission dialogs appear:Media & Storage Access
Media & Storage Access
| Permission | When used |
|---|---|
READ_EXTERNAL_STORAGE | Reading audio files on Android 12 and below |
WRITE_EXTERNAL_STORAGE | Legacy write access on Android 12 and below |
READ_MEDIA_AUDIO | Reading audio files on Android 13+ |
READ_MEDIA_IMAGES | Reading album artwork images on Android 13+ |
READ_MEDIA_VIDEO | Reading video files on Android 13+ |
MANAGE_EXTERNAL_STORAGE | Broad storage access for tag editing and the legacy song-delete path |
RECORD_AUDIO | Voice search via speech_to_text |
INTERNET | Required by certain Flutter/plugin internals |
Playback & Notifications
Playback & Notifications
| Permission | When used |
|---|---|
FOREGROUND_SERVICE | Running the audio_service playback service in the background |
FOREGROUND_SERVICE_MEDIA_PLAYBACK | Declaring the foreground service type as media playback (Android 14+) |
POST_NOTIFICATIONS | Showing the persistent media playback notification (Android 13+) — requested programmatically at startup via permission_handler |
WAKE_LOCK | Keeping the CPU awake during background playback |
POST_NOTIFICATIONS is requested programmatically in main() via Permission.notification.request() before AudioService.init(). On Android 13+ devices, users will see the system permission dialog on first launch. Without this permission the media notification will not appear, even though playback continues.Quick Checklist
Before proceeding to Installation, confirm all of the following:-
flutter doctorshows no errors for the target platform - Flutter version satisfies
>=3.7.11(ideally3.44.4via FVM) - Dart SDK satisfies
>=3.12.2 <4.0.0 - Android SDK installed with accepted licenses (Android builds)
- Java 17 available on your
PATH(Android builds) - Xcode and CocoaPods installed (iOS builds on macOS)
- Physical device or emulator (API 21+) connected and visible to
flutter devices