【问题标题】:RoomProcessor compilation or a circular dependencyRoomProcessor 编译或循环依赖
【发布时间】:2019-10-28 06:04:25
【问题描述】:

我已经为 Android Room 组件苦苦挣扎了好几天。

我所做的只是将我的 Android 工作室从 3.3 升级到 3.4.1,这伴随着对 gradle 等的更改。 我什至尝试过回到 3.3,但没有任何效果。 我已经使用Run with --info or --debug option 尝试查看更多详细信息,但没有给我更多信息。请帮忙

e: /.../app/build/tmp/kapt3/stubs/debug/com/.../model/HotspotEntity.java:7: error: [RoomProcessor:MiscError] androidx.room.RoomProcessor was unable to process this class because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public final class HotspotEntity implements android.os.Parcelable {
             ^
e: /.../app/build/tmp/kapt3/stubs/debug/com/.../ConditionEntity.java:7: error: [RoomProcessor:MiscError] androidx.room.RoomProcessor "same as above".
public final class ConditionEntity implements android.os.Parcelable {
             ^
e: /.../app/build/tmp/kapt3/stubs/debug/com/.../model/AdLimits.java:6: error: [RoomProcessor:MiscError] androidx.room.RoomProcessor "same as above"
public final class AdLimits {
             ^
e: /.../app/build/tmp/kapt3/stubs/debug/com/.../model/AdTarget.java:6: error: [RoomProcessor:MiscError] androidx.room.RoomProcessor "same as above"
public final class AdTarget {
             ^
e: /.../app/build/tmp/kapt3/stubs/debug/com/.../model/AdUrl.java:6: error: [RoomProcessor:MiscError] androidx.room.RoomProcessor "same as above"
public final class AdUrl {
             ^

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> Compilation error. See log for more details

版本

Android Gradle:
3.4.1
Gradle version:
5.4.1
Android Room:
def room_version = "2.1.0-alpha06"
implementation 'androidx.room:room-runtime:' + room_version
kapt 'androidx.room:room-compiler:' + room_version
testImplementation 'androidx.room:room-testing:' + room_version

----更新----

下面是用2.1.0-rc01"房间试过的,把它改成了同样的问题,但换了一个不同的班级:

AppDatabase.java:8: error: [RoomProcessor:MiscError] androidx.room.RoomProcessor was unable to process this class because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public abstract class AppDatabase extends androidx.room.RoomDatabase {

成绩文件

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

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.cfl.surfstoked"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 19
        versionName "1.0.4"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        debug {
            debuggable true
        }

        release {
            debuggable false
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    repositories {
        mavenCentral()
    }

    lintOptions {
        checkReleaseBuilds false
    }

    configurations {
        cleanedAnnotations
        compile.exclude group: 'org.jetbrains', module: 'annotations'
    }
}

dependencies {
    kapt 'com.google.dagger:dagger-android-processor:2.23.1'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.0.2'

    def lifecycleVersion = "2.1.0-alpha02"
    implementation 'androidx.lifecycle:lifecycle-extensions:' + lifecycleVersion
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:' + lifecycleVersion
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-alpha01'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0'
    kapt 'androidx.lifecycle:lifecycle-compiler:' + lifecycleVersion

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'

    //DI
    def koinVersion = "1.0.2"
    implementation 'org.koin:koin-android:' + koinVersion
    implementation 'org.koin:koin-androidx-scope:' + koinVersion
    implementation 'org.koin:koin-androidx-viewmodel:' + koinVersion

    //Navigation
//    def navigationVersion = "1.0.0-beta02"
//    implementation 'android.arch.navigation:navigation-fragment-ktx:' + navigationVersion
//    implementation 'android.arch.navigation:navigation-ui-ktx:' + navigationVersion

    def navigationVersion = "2.1.0-alpha01"
    implementation 'androidx.navigation:navigation-fragment-ktx:' + navigationVersion
    implementation 'androidx.navigation:navigation-ui-ktx:' + navigationVersion

    implementation 'org.greenrobot:eventbus:3.1.1'

    //Coroutines
    def corutinesVersion = "1.1.1"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:' + corutinesVersion
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:' + corutinesVersion

    //Database
    def room_version = "2.1.0-rc01"
    implementation 'androidx.room:room-runtime:' + room_version
    kapt 'androidx.room:room-compiler:' + room_version
//    implementation 'androidx.room:room-coroutines:' + room_version
    testImplementation 'androidx.room:room-testing:' + room_version

}

apply plugin: 'com.google.gms.google-services'

应用依赖

debugCompileClasspath - Compile classpath for compilation 'debug' (target  (androidJvm)).
+--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:{strictly 1.3.30} -> 1.3.30 (c)
+--- org.jetbrains.kotlin:kotlin-stdlib:{strictly 1.3.30} -> 1.3.30 (c)
+--- org.jetbrains.kotlin:kotlin-stdlib-common:{strictly 1.3.30} -> 1.3.30 (c)
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:{strictly 1.3.30} -> 1.3.30 (c)
+--- androidx.core:core-ktx:{strictly 1.0.2} -> 1.0.2 (c)
+--- androidx.annotation:annotation:{strictly 1.1.0-rc01} -> 1.1.0-rc01 (c)
+--- androidx.core:core:{strictly 1.1.0-alpha05} -> 1.1.0-alpha05 (c)
+--- com.google.guava:listenablefuture:{strictly 9999.0-empty-to-avoid-conflict-with-guava} -> 9999.0-empty-to-avoid-conflict-with-guava (c)
+--- androidx.lifecycle:lifecycle-runtime:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.lifecycle:lifecycle-common:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.arch.core:core-common:{strictly 2.1.0-beta01} -> 2.1.0-beta01 (c)
+--- androidx.versionedparcelable:versionedparcelable:{strictly 1.1.0-alpha02} -> 1.1.0-alpha02 (c)
+--- androidx.collection:collection:{strictly 1.1.0-alpha03} -> 1.1.0-alpha03 (c)
+--- androidx.concurrent:concurrent-futures:{strictly 1.0.0-alpha02} -> 1.0.0-alpha02 (c)
+--- androidx.lifecycle:lifecycle-extensions:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.arch.core:core-runtime:{strictly 2.1.0-beta01} -> 2.1.0-beta01 (c)
+--- androidx.fragment:fragment:{strictly 1.1.0-alpha05} -> 1.1.0-alpha05 (c)
+--- androidx.viewpager:viewpager:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.customview:customview:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.loader:loader:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.lifecycle:lifecycle-livedata:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.lifecycle:lifecycle-livedata-core:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.lifecycle:lifecycle-viewmodel:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.activity:activity:{strictly 1.0.0-alpha05} -> 1.0.0-alpha05 (c)
+--- androidx.savedstate:savedstate:{strictly 1.0.0-alpha02} -> 1.0.0-alpha02 (c)
+--- androidx.lifecycle:lifecycle-process:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.lifecycle:lifecycle-service:{strictly 2.2.0-alpha01} -> 2.2.0-alpha01 (c)
+--- androidx.lifecycle:lifecycle-viewmodel-ktx:{strictly 2.1.0-alpha02} -> 2.1.0-alpha02 (c)
+--- org.jetbrains.kotlinx:kotlinx-coroutines-android:{strictly 1.1.1} -> 1.1.1 (c)
+--- org.jetbrains.kotlinx:kotlinx-coroutines-core:{strictly 1.1.1} -> 1.1.1 (c)
+--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:{strictly 1.1.1} -> 1.1.1 (c)
+--- androidx.appcompat:appcompat:{strictly 1.0.2} -> 1.0.2 (c)
+--- androidx.cursoradapter:cursoradapter:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.legacy:legacy-support-core-utils:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.documentfile:documentfile:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.localbroadcastmanager:localbroadcastmanager:{strictly 1.0.0} -> 1.0.0 (c)
+--- androidx.print:print:{strictly 1.0.0} -> 1.0.0 (c)
...
+--- androidx.room:room-runtime:{strictly 2.1.0-rc01} -> 2.1.0-rc01 (c)
+--- androidx.room:room-common:{strictly 2.1.0-rc01} -> 2.1.0-rc01 (c)
+--- androidx.sqlite:sqlite-framework:{strictly 2.0.1} -> 2.0.1 (c)
+--- androidx.sqlite:sqlite:{strictly 2.0.1} -> 2.0.1 (c)
+--- com.jakewharton.timber:timber:{strictly 4.7.1} -> 4.7.1 (c)
+--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.30
|    \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.30
|         \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.30
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.30
...
+--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1 (*)
+--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1 (*)
+--- androidx.room:room-runtime:2.1.0-rc01
|    +--- androidx.room:room-common:2.1.0-rc01
|    |    \--- androidx.annotation:annotation:1.1.0-rc01
|    +--- androidx.sqlite:sqlite-framework:2.0.1
|    |    +--- androidx.annotation:annotation:1.0.2 -> 1.1.0-rc01
|    |    \--- androidx.sqlite:sqlite:2.0.1
|    |         \--- androidx.annotation:annotation:1.0.2 -> 1.1.0-rc01
|    +--- androidx.sqlite:sqlite:2.0.1 (*)
|    +--- androidx.arch.core:core-runtime:2.0.1 -> 2.1.0-beta01 (*)
|    +--- androidx.core:core:1.0.0 -> 1.1.0-alpha05 (*)
|    \--- androidx.collection:collection:1.0.0 -> 1.1.0-alpha03 (*)

【问题讨论】:

  • 试试这个,删除build.gradle .idea文件夹。不建项目,点击无效缓存重启。
  • @ManoharReddy 谢谢,但这没有帮助,仍然是同样的问题。
  • @cfl 你能分享你的 gradle 文件吗?另外,您是否尝试运行:./gradlew app:dependencies 来检查依赖关系树。你能分享一下这个的输出吗?
  • @raxerz 谢谢,我已经对问题进行了更改。它超过了字符限制,因此不得不删除一些代码,试图只删除似乎不相关的内容。如果以上没有帮助将添加更多。
  • 当您使用 Android Studio 打开有问题的类时,您是否看到任何错误。无论如何,它也可能与 KAPT 的全局缓存有关。它可以在某些 CI 上使用完全干净的构建吗?

标签: android kotlin android-room


【解决方案1】:

从最初的查找来看,您的一些依赖项是旧的。请尝试以下由我运行和测试的设置。

Android Studio : 3.4.1

build.gradle(项目)

dependencies {
    classpath 'com.android.tools.build:gradle:3.4.1'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.31"
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0-alpha05"
    classpath 'com.google.gms:google-services:4.2.0'
}

build.gradle(应用程序)

android {
    compileSdkVersion 29
    defaultConfig {
        targetSdkVersion 29
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    kapt 'com.google.dagger:dagger-android-processor:2.23.1'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.31"
    implementation 'androidx.core:core-ktx:1.0.2'

    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-alpha01'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha01'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-alpha01'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0'
    kapt 'androidx.lifecycle:lifecycle-compiler:2.2.0-alpha01'

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'

    //DI
    implementation 'org.koin:koin-android:1.0.2'
    implementation 'org.koin:koin-androidx-scope:1.0.2'
    implementation 'org.koin:koin-androidx-viewmodel:1.0.2'

    implementation 'org.greenrobot:eventbus:3.1.1'

    //Coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'

    //Database
    implementation 'androidx.room:room-runtime:2.1.0'
    kapt 'androidx.room:room-compiler:2.1.0'
    testImplementation 'androidx.room:room-testing:2.1.0'
}

【讨论】:

  • 更改了导航 gradle 安全参数、生命周期视图模型和房间版本。其他人都一样。可悲的是仍然有同样的问题,我清理了等等。不过谢谢。这个版本适合你吗?
  • 这太糟糕了。不过欣赏。我将继续尝试围绕此设置进行其他更改。希望一切顺利。
  • 您能否尝试下载新的 Android Studio 并从头开始设置所有内容?同时删除 .android & .gradle 文件夹。
  • 您的建议。我试过了,还是一样的问题。
  • @cfl 做最后一件事,请将项目上传到 github,不要使用任何 .xml 和 .java/.kt 文件。我想在我的系统中运行完全相同的项目。
【解决方案2】:

我也遇到了同样的问题,比较了我的 OP 的 gradle 文件,发现两者都包含

configurations {
    cleanedAnnotations
    compile.exclude group: 'org.jetbrains', module: 'annotations'
}

删除它后,Room 的注释处理开始工作了。

【讨论】:

  • 不幸的是没有解决我的问题。不过还是谢谢你。希望对其他人有所帮助
  • 我实际上以为我已经删除了它,但它在另一个项目的窗口中。谢谢,这对我有帮助。我还删除了我所有的房间依赖项并一个接一个地添加它们,结果我不再需要它们的一半了。提示:如果您需要 room-ktx 来处理协程,那么它的大部分其他内容都是传递依赖。我的房间部分现在只有 2 行:room-ktx 和 kapt 行。
【解决方案3】:

您注释掉了 room-coroutines 依赖项,但我假设您没有更改您的实际实现。这个依赖没有被移除,而是重命名为room-ktx。所以只需添加它以启用对 RoomCoroutine 支持。

implementation 'androidx.room:room-ktx:' + room_version

【讨论】:

  • 谢谢@tynn,我们没有使用它,但将来可能会使用它。但是很有用,知道谢谢
【解决方案4】:

让我们考虑尝试以下方法:

删除所有与房间相关的依赖项,这些依赖项是最新的:The Room Documentation

implementation 'androidx.room:room-common:2.1.0'
implementation 'androidx.room:room-compiler:2.1.0'
implementation 'androidx.room:room-runtime:2.1.0'

要考虑的第二件事是您正在使用不同版本复制依赖项,当构建系统尝试执行其依赖项解析并导致误导性错误时,您可能会遇到问题,例如:

   implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha01'
   implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0'

一个就够了,最好是稳定的。

如果您需要有关依赖项的信息并将一些信息迁移到 androidx 以及 here is the migrating to androidx guide

【讨论】:

  • 感谢您的帮助。不幸的是,它对我不起作用,但我可能会遗漏一些东西。不过我已经放弃了这个问题,浪费了数周的生命。
【解决方案5】:

对于所有无法在这里编译的人来说,这是一个小(希望是临时的)解决方法。

如果您将 gradle 版本切换回 3.3.2 android studio 应该会正常编译,您可以保留所有其他依赖项原样或更新它们。

该设置适合我:

    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.0'
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.9.0"
        classpath 'io.fabric.tools:gradle:1.+'
    }

【讨论】:

    【解决方案6】:

    我遇到了同样的问题,我可以通过更新数据库版本来解决它:

    @Database(
        entities = [...],
        version = 4, exportSchema = true
    )
    

    问题是因为自动生成的架构,另一种解决方案可能是删除项目中 schemas 文件夹中的旧架构,但如果您的应用正在生产中,可能会造成一些麻烦。

    【讨论】:

    • 很遗憾没有解决我的问题。不过还是谢谢
    【解决方案7】:

    您必须包含库:

    implementation org.jetbrains:annotations-java5:19.0.0
    

    因为通过kapt插件从注解生成的代码,使用org.jetbrains.annotations.NotNull注解。

    如果你复制粘贴生成的 java 类是你的类路径,你会看到编译错误。

    干杯

    【讨论】:

      【解决方案8】:

      尝试将房间版本更新为“2.1.0-rc01”。

      def room_version = "2.1.0-rc01"
      

      【讨论】:

      • 感谢您的建议,我尝试更新它似乎已经消除了上述一些问题但不是全部,“AppDatabase.java:8: error: 'same as above'”仍然存在。
      • @cfl - 更新后您是否尝试过使缓存无效并在 android studio 中重新启动?
      • 是的,谢谢。艾真的在这个问题上浪费了很多时间,感谢您迄今为止的意见。如果您有任何其他建议,请告诉我
      • @cfl - 删除应用插件:'kotlin-kapt' 并清理和同步项目。
      • 谢谢你,我删除了它 - 但同样的问题正在发生。我做了所有的清理等。出于兴趣,是什么导致你建议删除它?我认为它是必要的
      【解决方案9】:

      在依赖项下遇到了同样的问题和以下注释排除(不知道为什么了)

      configurations {
          compile.exclude group: 'org.jetbrains', module: 'annotations'
      }
      

      删除它并且它工作。也许这对你有帮助?

      【讨论】:

        【解决方案10】:

        有同样的问题。 在我从 github 获取项目后发生。
        依赖项/版本更改无效。
        我所做的是删除了 GitHub 上除主分支之外的所有分支,并从剩余分支创建了新项目。
        问题开箱即用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-22
          • 1970-01-01
          • 2020-05-01
          • 2018-05-07
          • 1970-01-01
          • 2010-09-12
          相关资源
          最近更新 更多