| Tool | Version | Notes |
|---|---|---|
| Flutter SDK | 3.24+ | flutter --version |
| Dart SDK | 3.10+ | Bundled with Flutter |
| Android Studio | Latest | Android SDK + emulator |
| Android SDK | API 26–35 | via SDK Manager |
| NDK | 25.1.8937393 | Required for FFmpeg Kit |
# macOS (via Homebrew)
brew install --cask flutter
# Verify
flutter doctor
git clone <repo-url>
cd audiopeel
flutter pub get
Open Android Studio → SDK Manager → ensure these are installed:
# List available devices
flutter devices
# Run in debug mode
flutter run
# Run on specific device
flutter run -d <device-id>
Test ad units are pre-configured in lib/constants/app_constants.dart:
static const String testBannerAdUnitId = 'ca-app-pub-3940256099942544/6300978111';
static const String testInterstitialAdUnitId = 'ca-app-pub-3940256099942544/1033173712';
For production, replace with your real AdMob ad unit IDs and update AndroidManifest.xml:
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="YOUR_REAL_APP_ID" />
The product ID remove_ads must be created in the Google Play Console:
remove_adsFor testing, use a license test account.
# Generate a keystore
keytool -genkey -v -keystore ~/audiopeel-release.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias audiopeel
# Create android/key.properties (gitignored)
echo "storePassword=<password>
keyPassword=<password>
keyAlias=audiopeel
storeFile=/Users/<you>/audiopeel-release.jks" > android/key.properties
| Issue | Solution |
|---|---|
| NDK not found | Install NDK 25.1.8937393 via SDK Manager |
| FFmpeg build fails | Ensure minSdk 26 in build.gradle.kts |
| AdMob crash on startup | Verify APPLICATION_ID in AndroidManifest.xml |
Tests fail with MissingPluginException |
Run flutter clean && flutter pub get |