java.lang.IllegalStateException:不应为错误类型创建 SimpleTypeImpl

java.lang.IllegalStateException: SimpleTypeImpl should not be created for error type

迁移到 AndroidX 后一直遇到此错误。

java.lang.IllegalStateException: SimpleTypeImpl should not be created for error type: ErrorScope{Error scope for class <ERROR CLASS> with arguments: org.jetbrains.kotlin.types.IndexedParametersSubstitution@14ac19e7}

这个link没有多大帮助

将您的 Kotlin 依赖项升级到 1.3.20,编译器将突出显示问题的根源。

我更新到Kotlin 1.3.20,但还是不行。然后我决定检查 Kotlin 源代码。我找到了这个 link

我有一个名为 DisplayItem<T> 的接口,我删除了它的类型参数。在此之后,我开始出现错误。实际上,在 logcat 错误的结尾,它说 DisplayItem

所以我检查了代码中的所有 DisplayItem 类型,我发现我忘记删除 LiveData 变量中的一个类型参数,如下所示:

MediatorLiveData<DataHolder<List<DisplayItem<MessageViewEntity>>>>

从变量中删除类型参数后开始编译。希望对您有所帮助。

注意:您可以使用git grep进行快速搜索。

迁移到 Android Studio 中的 AndroidX 选项没有多大帮助。我通过手动更改每个文件解决了这个错误,根据代码和 xml 中的 AndroidX 更改了包名称。如果任何文件保持不变,您将看到此错误。请确保您的 Kotlin 插件版本、gradle 插件版本、构建工具和 Android 工作室版本是最新的。

对我来说,错误是由于 import 语句无效而出现的。 Android Studio 没有显示任何与此相关的内容。我不得不去每个文件,然后工作室显示无效导入错误。修复它并且构建错误消失了。

我解决此问题的主要技巧是当您只是收到错误消息而不知道真正的错误在哪里时,请尝试 Android studio Analyze/Inspect 代码选项。深入研究此输出,我发现了触发问题的实际编译错误,然后可以轻松修复它们。

我的实际问题是将具有嵌套 class 的泛型 class 更改为抽象 class 并创建两个 sub-classes 来替换这是以前的用法。我仍然将我的代码引用到原始抽象基础 class,我应该用两个新的 sub-classes.

之一替换它们

我按照以下步骤解决了这个问题。

1-已将 android Studio 从 4.1.1 更新到 4.2.1

2-更新 gradle-warepper.properties 文件中的下一行

distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip

3- 像下面这样更新一些 kotlin 扩展

buildscript {
    ext.kotlin_version = '1.3.72'

buildscript {
    ext.kotlin_version = '1.4.32'

 dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'

dependencies {
        classpath 'com.android.tools.build:gradle:4.2.1'

gradle 同步等需要一些时间,但最终对我来说解决了一整天的问题。

我刚刚在根 build.gradle 中更新了我的 kotlin-gradle-plugin 版本,它解决了我的问题

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32"