Полное руководство: исправление ошибки сборки shared_preferences в Flutter
Узнайте, как устранить ошибку 'Не удалось разрешить все файлы для конфигурации' при добавлении shared_preferences в ваш Flutter-проект. Пошаговые решения для конфликтов зависимостей.
Сборка Flutter не удается после добавления пакета shared_preferences: как исправить ошибку “Could not resolve all files for configuration”?
Я столкнулся с ошибкой сборки в моем проекте Flutter после добавления пакета shared_preferences для хранения данных аутентификации пользователя. Ошибка возникает в процессе сборки и, похоже, связана с разрешением зависимостей.
Сообщение об ошибке:
* Что пошло не так:
Не удалось выполнить задачу ':shared_preferences_android:compileDebugKotlin'.
> Ошибка при оценке свойства 'friendPathsSet$kotlin_gradle_plugin_common' задачи ':shared_preferences_android:compileDebugKotlin'.
> Не удалось разрешить все файлы для конфигурации ':shared_preferences_android:debugCompileClasspath'.
> Не удалось преобразовать collection-ktx-1.1.0.jar (androidx.collection:collection-ktx:1.1.0) для соответствия атрибутам {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api}.
> Не удалось найти collection-ktx-1.1.0.jar (androidx.collection:collection-ktx:1.1.0).
Поиск производился в следующих местах:
https://dl.google.com/dl/android/maven2/androidx/collection/collection-ktx/1.1.0/collection-ktx-1.1.0.jar
Вывод Flutter Doctor:
[√] Flutter (Канал stable, 3.35.5, в Microsoft Windows [Версия 10.0.26100.6725], locale en-US)
[√] Версия Windows (11 Home 64-bit, 24H2, 2009)
[√] Android toolchain - разработка для Android устройств (версия Android SDK 36.1.0)
[√] Chrome - разработка для веб
[√] Visual Studio - разработка приложений Windows (Visual Studio Community 2022 17.14.8)
[√] Android Studio (версия 2025.1.4)
[√] VS Code (версия 1.96.4)
[√] Подключенное устройство (3 доступно)
[√] Сетевые ресурсы
• Проблем не обнаружено!
Мой pubspec.yaml:
version: 1.0.0+1
environment:
sdk: ^3.9.2
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8
provider: ^6.1.5+1
http: ^1.5.0
cached_network_image: ^3.4.1
flutter_native_splash: ^2.4.7
carousel_slider: ^5.1.1
photo_view: ^0.15.0
dots_indicator: ^4.0.1
heroicons: ^0.11.0
url_launcher: ^6.3.2
google_nav_bar: ^5.0.7
hugeicons: ^1.1.1
line_icons: ^2.0.3
flutter_rating: ^2.0.2
shimmer: ^3.0.0
animated_snack_bar: ^0.4.0
shared_preferences: ^2.3.4
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
Мой android/build.gradle.kts:
allprojects {
repositories {
google()
mavenCentral()
}
}
val newBuildDir: Directory =
rootProject.layout.buildDirectory
.dir("../../build")
.get()
rootProject.layout.buildDirectory.value(newBuildDir)
subprojects {
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
project.layout.buildDirectory.value(newSubprojectBuildDir)
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
И это android/app/build.gradle.kts:
plugins {
id("com.android.application")
id("kotlin-android")
// Плагин Flutter Gradle должен применяться после плагинов Android и Kotlin Gradle.
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "com.example.kojast"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
defaultConfig {
// TODO: Укажите свой уникальный идентификатор приложения (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.kojast"
// Вы можете обновить следующие значения в соответствии с потребностями вашего приложения.
// Для получения дополнительной информации см.: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
release {
// TODO: Добавьте свою собственную конфигурацию подписи для релизной сборки.
// Подпись отладочными ключами на данный момент, чтобы `flutter run --release` работал.
signingConfig = signingConfigs.getByName("debug")
}
}
}
flutter {
source = "../.."
}
Как можно исправить эту ошибку сборки и успешно использовать пакет shared_preferences в моем проекте Flutter?
Ошибка сборки, с которой вы столкнулись с пакетом shared_preferences, является распространенной проблемой разрешения зависимостей, которая обычно возникает при наличии конфликтов версий между зависимостями Android. На основе исследований и вашей конкретной настройки вот как решить эту проблему:
Содержание
- Понимание основной причины
- Решения, которые стоит попробовать в первую очередь
- Продвинутые техники разрешения зависимостей
- Профилактические меры
- Альтернативные решения для хранения данных
Понимание основной причины
Ошибка Could not find collection-ktx-1.1.0.jar указывает на конфликт версий в ваших зависимостях Android. Как показано в обсуждении на Stack Overflow, это обычно происходит, когда:
-
Несоответствие версий: Пакет shared_preferences зависит от конкретной версии
androidx.collection:collection-ktx, но в вашем проекте есть конфликтующее требование версии. -
Несовместимость Android Gradle Plugin: Исследования из проблемы на GitHub #169419 показывают, что более новые библиотеки Android часто требуют конкретных версий Android Gradle Plugin.
-
Настройка пользовательского каталога сборки: Ваша пользовательская настройка каталога сборки в
android/build.gradle.ktsможет мешать разрешению зависимостей.
Решения, которые стоит попробовать в первую очередь
1. Очистка зависимостей проекта
Начните с полной очистки и обновления зависимостей:
flutter clean
flutter pub get
cd android
./gradlew clean
./gradlew --refresh-dependencies
Эта команда решает проблему для многих пользователей, согласно рекомендациям Stack Overflow.
2. Принудительная установка версии collection-ktx
Обновите ваш pubspec.yaml, чтобы принудительно использовать совместимую версию collection-ktx:
dependencies:
shared_preferences: ^2.3.4
# Добавьте эту зависимость для принудительной установки версии collection-ktx
collection_ktx: ^1.4.0
3. Обновление Android Gradle Plugin
Проверьте версию Android Gradle Plugin в android/build.gradle.kts и убедитесь, что она совместима. На основе исследований из проблемы на GitHub #5909, более новые библиотеки Android часто требуют версию плагина 8.6.0 или выше.
Обновите ваш android/build.gradle.kts:
// Добавьте или обновите это вверху
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:8.6.0")
}
}
Продвинутые техники разрешения зависимостей
1. Добавление стратегии разрешения зависимостей
В вашем android/app/build.gradle.kts добавьте стратегии разрешения зависимостей:
subprojects {
afterEvaluate {
configurations {
all {
resolutionStrategy {
force("androidx.collection:collection-ktx:1.4.0")
force("androidx.core:core-ktx:1.12.0")
}
}
}
}
}
Этот подход, упомянутый в проблеме на GitHub #27254, помогает разрешать конфликты версий путем принудительного использования конкретных версий.
2. Обновление версии Kotlin
Убедитесь, что ваша версия Kotlin совместима. Согласно проблеме на GitHub #22614, совместимость версии Kotlin критически важна для shared_preferences:
// В android/app/build.gradle.kts
plugins {
id("com.android.application")
id("kotlin-android") {
version = "1.9.0" // Убедитесь, что эта версия совместима
}
id("dev.flutter.flutter-gradle-plugin")
}
3. Упрощение настройки каталога сборки
Ваша пользовательская настройка каталога сборки может вызывать проблемы. Упростите ее:
// В android/build.gradle.kts
subprojects {
project.evaluationDependsOn(":app")
}
// Удалите или упростите пользовательскую настройку каталога сборки
tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
Профилактические меры
1. Матрица совместимости версий
Всегда проверяйте совместимость пакетов перед добавлением зависимостей. Согласно журналу изменений shared_preferences, пакет требует Flutter SDK 1.12.13+hotfix.5 или выше.
2. Оптимизация свойств Gradle
Обновите ваш android/gradle.properties:
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx6g
org.gradle.parallel=true
3. Регулярное обновление зависимостей
Регулярно выполняйте:
flutter pub outdated flutter pub upgrade
Альтернативные решения для хранения данных
Если пакет shared_preferences продолжает вызывать проблемы, рассмотрите эти альтернативы:
- Hive: Легковесная и быстрая база данных ключ-значение
- Isar: Кроссплатформенная NoSQL база данных
- sqflite: SQLite база данных для Flutter
Пример с Hive:
dependencies:
hive: ^2.2.3
hive_flutter: ^1.1.0
// Использование
final box = await Hive.openBox('myBox');
await box.put('key', 'value');
final value = box.get('key');
Источники
- Flutter fail to build when shared preferences added - Stack Overflow
- Problem with shared preferences package after upgrading Flutter SDK - GitHub
- Shared preferences plugin failed Android build - GitHub
- Fix dependency resolution errors when adding new packages - Stack Overflow
- Unable to resolve dependency errors - GitHub
- Android Gradle Plugin compatibility - GitHub
- Shared preferences changelog - pub.dev
- Android dependency version conflicts - GitHub
- Android Gradle Plugin compatibility issues - FlutterFlow
Заключение
Ошибка сборки shared_preferences, с которой вы столкнулись, обычно вызвана конфликтами версий зависимостей между библиотеками Android. Следуя этим шагам в порядке:
- Очистите и обновите зависимости вашего проекта в первую очередь
- Принудительно используйте совместимые версии конфликтующих зависимостей
- Обновите Android Gradle Plugin до последней совместимой версии
- Упростите конфигурации сборки, которые могут мешать разрешению
- Рассмотрите альтернативные решения для хранения данных, если проблемы сохраняются
Помните, что всегда проверяйте совместимость пакетов перед добавлением новых зависимостей в ваш Flutter проект. Регулярное обслуживание дерева зависимостей предотвратит большинство таких проблем разрешения на начальном этапе.