Skip to main content

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.

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.
1

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.
Using FVM (Flutter Version Management) is strongly recommended. With FVM installed, simply run fvm install inside the cloned repo to activate the exact Flutter version specified in .fvmrc, then prefix all Flutter commands with fvm flutter (e.g., fvm flutter pub get).
Verify your installation:
flutter --version
# Flutter 3.44.4 • channel stable
2

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.
dart --version
# Dart SDK version: 3.x.x (stable)
Dart versions below 3.12.2 will cause flutter pub get to fail with a dependency resolution error. Always use the Flutter version pinned in .fvmrc.
3

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_ROOT pointing to it
  • Java 17 — the project’s build.gradle.kts sets JavaVersion.VERSION_17 for both sourceCompatibility and targetCompatibility, and the Kotlin compiler targets JVM_17
The 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.
flutter doctor --android-licenses  # Accept any pending SDK licenses
flutter doctor                     # Confirm Android toolchain is green
4

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.
5

Install Xcode (iOS builds only)

To build and run Musynth on iOS you need:
  • Xcode 15 or later (available on the Mac App Store)
  • Xcode Command Line Tools: xcode-select --install
  • CocoaPods: sudo gem install cocoapods — required for pod install to link native iOS dependencies
xcode-select --install
sudo gem install cocoapods
pod --version
iOS builds are macOS-only. If you are working on Linux or Windows, you can still build and test the Android target.
6

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:
PermissionWhen used
READ_EXTERNAL_STORAGEReading audio files on Android 12 and below
WRITE_EXTERNAL_STORAGELegacy write access on Android 12 and below
READ_MEDIA_AUDIOReading audio files on Android 13+
READ_MEDIA_IMAGESReading album artwork images on Android 13+
READ_MEDIA_VIDEOReading video files on Android 13+
MANAGE_EXTERNAL_STORAGEBroad storage access for tag editing and the legacy song-delete path
RECORD_AUDIOVoice search via speech_to_text
INTERNETRequired by certain Flutter/plugin internals
PermissionWhen used
FOREGROUND_SERVICERunning the audio_service playback service in the background
FOREGROUND_SERVICE_MEDIA_PLAYBACKDeclaring the foreground service type as media playback (Android 14+)
POST_NOTIFICATIONSShowing the persistent media playback notification (Android 13+) — requested programmatically at startup via permission_handler
WAKE_LOCKKeeping 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 doctor shows no errors for the target platform
  • Flutter version satisfies >=3.7.11 (ideally 3.44.4 via 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

Build docs developers (and LLMs) love