Содержание
- Когда и почему это происходит
- Быстрое решение: форсим minSdk через Gradle
- Проверяем minSdk в готовом AAB/APK
- Как найти библиотеку, которая поднимает minSdk
- Как «закрепить» minSdk в конфигурации и CI
- Типичные ошибки и предупреждения
- FAQ
Когда и почему это происходит
- Одна из зависимостей (AAR/плагин) требует более высокий
minSdkв своём манифесте илиbuild.gradle. - Во время manifest merge берётся максимальное из всех требований.
- Часть шаблонов/скриптов Flutter опирается на свойство
flutter.minSdkVersion; если оно не задано, поведение зависит от плагинов.
Быстрое решение: форсим minSdk через Gradle
Передайте свойство в Gradle напрямую — оно имеет высокий приоритет:# AAB flutter build appbundle --release -Pflutter.minSdkVersion=21 flutter build apk --split-per-abi -Pflutter.minSdkVersion=21
Совет: В CI можно использовать переменную окружения: export ORG_GRADLE_PROJECT_flutter.minSdkVersion=21 flutter build appbundle --release
Приоритет: -P (CLI) → gradle.properties → значения по умолчанию в плагинах.
Проверяем minSdk в готовом AAB/APK
Проверяйте то, что пойдёт в сто́р: распакуйте универсальный APK из AAB и проанализируйте манифест.# из корня Flutter-проекта AAB="build/app/outputs/bundle/release/app-release.aab" [ -f "" ] || ./android/gradlew -p android :app:bundleRelease bundletool build-apks \ --bundle="" \ --output=/tmp/app.apks \ --mode=universal \ --overwrite unzip -p /tmp/app.apks universal.apk > /tmp/universal.apk apkanalyzer manifest min-sdk /tmp/universal.apk apkanalyzer manifest target-sdk /tmp/universal.apk Где взять утилиты: apkanalyzer — в Android SDK (cmdline-tools), bundletool — отдельный JAR (можно установить через пакетный менеджер или скачать с релизов).
Как найти библиотеку, которая поднимает minSdk
- Соберите merged manifest и blame-репорт:
./android/gradlew -p android :app:processReleaseMainManifest \ -Pandroid.manifestMergerReport=BLAME --rerun-tasks grep -n "<uses-sdk" \ build/app/intermediates/merged_manifest/release/processReleaseMainManifest/AndroidManifest.xml find build/app -iname "*manifest-merger*report*.txt" -o -iname "*blame*report*.txt" - Поиск по AAR-манифестам: иногда полезно просканировать зависимости на предмет явного
<uses-sdk minSdkVersion="...">. Для отладки можно временно добавить gradle-таску и запустить её локально.
Важно: Если библиотека действительно требует API 24+, понизить minSdk «вопреки» невозможно — выбирайте альтернативу или условно исключайте функциональность для низких API.
Как «закрепить» minSdk в конфигурации и CI
- В
android/gradle.propertiesдобавьте:flutter.minSdkVersion=21 - В модуле
android/app/build.gradleдержите явный DSL (для читаемости):android { defaultConfig { minSdkVersion 21 // или minSdk 21 в новом DSL } } - В CI экспортируйте переменную:
export ORG_GRADLE_PROJECT_flutter.minSdkVersion=21 - Для разовых сборок — используйте CLI-флаг
-Pflutter.minSdkVersion=21(имеет приоритет).
Типичные ошибки и предупреждения
- Unknown property ‘android’ for root project — код с
android { ... }попал в корневойandroid/build.gradle. Перенесите вandroid/app/build.gradle. - File ‘/tmp/app.apks’ already exists — добавьте
--overwriteк командеbundletool build-apks. - Supplied proguard configuration does not exist — создайте пустой
proguard-rules.proили отключитеminifyEnabled. - Warning: package=… в манифестах плагинов — безвредное предупреждение новых AGP; оно просит убрать
packageиз библиотечных манифестов (исправляется обновлением плагинов). - Kotlin KGP скоро не поддерживается — обновите Kotlin до ≥ 2.1.0 или используйте флаг Flutter
--android-skip-build-dependency-validationкак временную меру.





