Неправильная версия androidx.fragment:используется фрагмент

У меня проблема с выполнением обновления библиотек в моем проекте. Я наткнулся на все, и в основном кажется, что все в порядке. Однако проблема связана с lib androidx.fragment:fragment. Согласно дереву зависимостей он должен быть разрешен до 1.5.4. Проблема в том, что в дереве MyActivity -> AppCompatActivity -> FragmentActivity оказывается, что для AppCompatActivity используется androidx.appcompat:appcompat:1.5.1, а для FragmentActivity androidx.fragment:fragment:1.0.0 . При проверке другого проекта, созданного с тем же стеком и той же версией библиотек, выясняется, что FragmentActivity разрешается как версия 1.1.0.

Gradle верхнего уровня:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext {
        kotlinVersion = '1.7.22'
        rxJavaVersion = '2.2.21'
        rxKotlinVersion = '2.4.0'
        rxAndroidVersion = '2.1.1'
        bindingLibraryVersion = '4.0.0'
        koinVersion = '3.1.5'
        retrofitVersion = '2.9.0'
        navComponents = "2.5.3"
        corutinesVersion = '1.6.4'
        androidLifecycleVersion = '2.5.1'
        roomVersion = '2.4.3'
        appCenterSdkVersion = '3.3.0'
        playServicesVersion = '21.0.1'
        workVersion = '2.7.1'
        firebaseBOM = '31.1.0'
        cameraxVersion = "1.1.0"
        moshiVersion = "1.13.0"
        stetho = '1.6.0'
        ZxingVersion = "3.4.1"
    }

    repositories {
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.1'
        classpath 'com.google.gms:google-services:4.3.14'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navComponents"
    }
}

plugins {
    id "org.jetbrains.kotlin.jvm" version "$kotlinVersion"
}

allprojects {
    ext {
        androidVersionCode = getVersionCode()
        androidVersionName = getVersionName()
        storePassword = getStorePassword()
        minSdkVersion = 26
        targetSdkVersion = 31
        compileSdkVersion = 33
    }

    repositories {
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
        jcenter()   //left due to shipbook. Cannot find proper repository for it
    }
}

градация основного модуля:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs.kotlin"

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation project(':data')

    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$androidLifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-process:$androidLifecycleVersion"

    implementation "androidx.navigation:navigation-fragment-ktx:$navComponents"
    implementation "androidx.navigation:navigation-ui-ktx:$navComponents"

    implementation 'com.google.android.material:material:1.7.0'

    implementation "me.tatarka.bindingcollectionadapter2:bindingcollectionadapter:$bindingLibraryVersion"
    implementation "me.tatarka.bindingcollectionadapter2:bindingcollectionadapter-recyclerview:$bindingLibraryVersion"

    implementation "io.insert-koin:koin-android:$koinVersion"
    implementation("io.insert-koin:koin-core:$koinVersion", {
        exclude group: 'androidx.lifecycle', module: 'lifecycle-extensions'
    })

    implementation "com.facebook.stetho:stetho:$stetho"
    implementation "com.facebook.stetho:stetho-okhttp3:$stetho"


    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$corutinesVersion"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:${corutinesVersion}"

    // Import the BoM for the Firebase platform
    implementation platform("com.google.firebase:firebase-bom:$firebaseBOM")

    implementation "com.google.firebase:firebase-analytics-ktx"
    implementation 'com.google.firebase:firebase-dynamic-links-ktx'
    implementation 'com.google.firebase:firebase-crashlytics'
    implementation 'com.google.firebase:firebase-messaging'
    implementation 'com.google.firebase:firebase-perf-ktx'
    implementation 'com.google.firebase:firebase-config-ktx'

    implementation 'com.google.android.gms:play-services-mlkit-barcode-scanning:18.1.0'
    implementation 'com.google.android.gms:play-services-mlkit-text-recognition:18.0.2'
    implementation "androidx.camera:camera-core:$cameraxVersion"
    implementation "androidx.camera:camera-camera2:$cameraxVersion"
    implementation "androidx.camera:camera-lifecycle:$cameraxVersion"
    implementation "androidx.camera:camera-view:$cameraxVersion"  //no newer version can applied for now due to issues with compatibility

    implementation "androidx.security:security-crypto:1.0.0"

    implementation "com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}"
    implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}"

    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
    kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshiVersion"

    implementation 'com.caverock:androidsvg-aar:1.4'
    implementation "com.google.zxing:core:$ZxingVersion"

    implementation ('io.shipbook.shipbooksdk:shipbooksdk:1.6.0', {
        exclude group: 'androidx.fragment', module: 'fragment'
    })

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
}

Я пытался очистить проект, удалив файлы библиотеки каталогов gradle для версии 1.0.0, но он продолжает возвращаться. Я понятия не имею, что искать. Я проверил дерево зависимостей, разрешенное gradle, но в версии 1.0.0 или 1.1.0 нет ничего о фрагменте.

Мне нужна последняя версия FragmentActivity, чтобы использовать требуемую мной версию ComponentActivity для некоторого своего нового кода.

РЕДАКТИРОВАТЬ Добавление

implementation 'androidx.fragment:fragment-ktx:1.5.4'

тоже ничего не меняй. Удаление подозрительных исключений для шипбука тоже ничего не дает.

Обновлено еще раз: это FragmentActivity, которого я не хочу:

и это то, что мне нужно:

Почему вы делаете эту «группу исключения:« androidx.fragment », модуль:« фрагмент »»?

Muaz 30.11.2022 10:30

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

masztalski 30.11.2022 11:04

Я даже удалил это утверждение, и эффект остался прежним.

masztalski 30.11.2022 11:18

Вы уверены, что правильно читаете дерево зависимостей? Текущий выпуск appcompat зависит от версии 1.3.6 библиотеки фрагментов, маловероятно, что он даже будет работать, если вместо этого вы можете заставить Gradle разрешить его до 1.0.0 (Gradle разрешает конфликты версий, используя самую высокую запрошенную версию). Если вы хотите 1.5.4, явно добавьте зависимость, и вот что вы получите! FragmentContainerView получил getFragment() метод в 1.4.0 - посмотрите, есть ли у вас доступ к этому

cactustictacs 30.11.2022 15:48

Я точно уверен. Поскольку речь идет не о чтении дерева зависимостей, поскольку исходная студия Android показывает мне версию, отображаемую в заголовке окна. Я ищу правильную версию FragmentActivity, которая импортирует Component Activity из пакета действий, чтобы содержать backpresseddispatcher

masztalski 30.11.2022 19:55

@cactustictacs Я добавил скриншоты с информацией, которую я имею в виду. Из этих загруженных источников я знаю, что FragmentActivity в версии 1.0.0 импортирует другой пакет ComponentActivity, чем в версии 1.1.0.

masztalski 01.12.2022 09:40

Я не знаю, какие источники вы просматриваете, но вы можете запустить задачу dependencies Gradle (вкладка Gradle сбоку окна, значок слона для запуска задачи), чтобы увидеть дерево зависимостей и то, как оно разрешено. например для проекта, который я открыл, в зависимости appcompat он имеет зависимость androidx.fragment:fragment:1.3.6 -> 1.5.4, что означает, что appcompat использовал версию 1.3.6, но на самом деле используется версия 1.5.4 (поскольку другая зависимость указывает более высокую версию, в данном случае потому, что это было добавлено явно в build.gradle). Вот что строится

cactustictacs 01.12.2022 18:40

Подробнее здесь docs.gradle.org/current/userguide/…

cactustictacs 01.12.2022 18:40

Да, я занимался этим. Эти источники явно указывают, что было решено. Да, по зависимостям gradle разрешается до 1.5.4, но почему-то используется 1.0.0. Источники наиболее явные, так как я просто открываю суперкласс в AndroidStudio и на панели инструментов вижу версию. Я также вижу импорт, который мне не нужен (неправильный пакет для импорта ComponentActivity)

masztalski 02.12.2022 08:02

Также, если я удалю из кеша Gradle 1.0.0 пакет фрагмента, когда я создам этот проект, он снова появится

masztalski 02.12.2022 08:08
0
10
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выявленная проблема заключалась в зависимостях от пакета спецификации Firebase и расположения сервисов Play, определенных на уровне данных (чистая архитектура -> уровень, отвечающий только за обработку соединений с базой данных и API). Решение заключалось в том, чтобы исключить зависимость фрагментов от их импорта.

 implementation("com.google.android.gms:play-services-location:$playServicesLocationVersion", {
        exclude group: 'androidx.fragment'
    })

    // Import the BoM for the Firebase platform
    implementation platform("com.google.firebase:firebase-bom:$firebaseBOMVersion")
    implementation('com.google.firebase:firebase-messaging', {
        exclude group: 'androidx.fragment'
    })

Другие вопросы по теме