Другое

Полное руководство: исправление ошибки сборки 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, это обычно происходит, когда:

  1. Несоответствие версий: Пакет shared_preferences зависит от конкретной версии androidx.collection:collection-ktx, но в вашем проекте есть конфликтующее требование версии.

  2. Несовместимость Android Gradle Plugin: Исследования из проблемы на GitHub #169419 показывают, что более новые библиотеки Android часто требуют конкретных версий Android Gradle Plugin.

  3. Настройка пользовательского каталога сборки: Ваша пользовательская настройка каталога сборки в android/build.gradle.kts может мешать разрешению зависимостей.

Решения, которые стоит попробовать в первую очередь

1. Очистка зависимостей проекта

Начните с полной очистки и обновления зависимостей:

bash
flutter clean
flutter pub get
cd android
./gradlew clean
./gradlew --refresh-dependencies

Эта команда решает проблему для многих пользователей, согласно рекомендациям Stack Overflow.

2. Принудительная установка версии collection-ktx

Обновите ваш pubspec.yaml, чтобы принудительно использовать совместимую версию collection-ktx:

yaml
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:

kotlin
// Добавьте или обновите это вверху
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:8.6.0")
    }
}

Продвинутые техники разрешения зависимостей

1. Добавление стратегии разрешения зависимостей

В вашем android/app/build.gradle.kts добавьте стратегии разрешения зависимостей:

kotlin
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:

kotlin
// В android/app/build.gradle.kts
plugins {
    id("com.android.application")
    id("kotlin-android") {
        version = "1.9.0" // Убедитесь, что эта версия совместима
    }
    id("dev.flutter.flutter-gradle-plugin")
}

3. Упрощение настройки каталога сборки

Ваша пользовательская настройка каталога сборки может вызывать проблемы. Упростите ее:

kotlin
// В 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:

properties
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx6g
org.gradle.parallel=true

3. Регулярное обновление зависимостей

Регулярно выполняйте:

bash
flutter pub outdated
flutter pub upgrade

Альтернативные решения для хранения данных

Если пакет shared_preferences продолжает вызывать проблемы, рассмотрите эти альтернативы:

  1. Hive: Легковесная и быстрая база данных ключ-значение
  2. Isar: Кроссплатформенная NoSQL база данных
  3. sqflite: SQLite база данных для Flutter

Пример с Hive:

yaml
dependencies:
  hive: ^2.2.3
  hive_flutter: ^1.1.0
dart
// Использование
final box = await Hive.openBox('myBox');
await box.put('key', 'value');
final value = box.get('key');

Источники

  1. Flutter fail to build when shared preferences added - Stack Overflow
  2. Problem with shared preferences package after upgrading Flutter SDK - GitHub
  3. Shared preferences plugin failed Android build - GitHub
  4. Fix dependency resolution errors when adding new packages - Stack Overflow
  5. Unable to resolve dependency errors - GitHub
  6. Android Gradle Plugin compatibility - GitHub
  7. Shared preferences changelog - pub.dev
  8. Android dependency version conflicts - GitHub
  9. Android Gradle Plugin compatibility issues - FlutterFlow

Заключение

Ошибка сборки shared_preferences, с которой вы столкнулись, обычно вызвана конфликтами версий зависимостей между библиотеками Android. Следуя этим шагам в порядке:

  1. Очистите и обновите зависимости вашего проекта в первую очередь
  2. Принудительно используйте совместимые версии конфликтующих зависимостей
  3. Обновите Android Gradle Plugin до последней совместимой версии
  4. Упростите конфигурации сборки, которые могут мешать разрешению
  5. Рассмотрите альтернативные решения для хранения данных, если проблемы сохраняются

Помните, что всегда проверяйте совместимость пакетов перед добавлением новых зависимостей в ваш Flutter проект. Регулярное обслуживание дерева зависимостей предотвратит большинство таких проблем разрешения на начальном этапе.

Авторы
Проверено модерацией
Модерация