错误:无法解析以下类的超类型。请确保类路径中有所需的依赖项。

65

我无法编译我的Android Kotlin项目。

我不知道这是什么意思...

Gradle日志:

错误:以下类的超类型无法解析。 请确保在类路径中具有所需的依赖项: class android.support.v7.app.AppCompatActivity,未解决的超类型:SupportParentable

build.gradle(应用程序)

buildscript {
    ext.android_plugin_version = "2.3.3"
    ext.kotlin_version = '1.1.2-5'

    repositories {
        maven { url 'https://maven.google.com' }
        maven { url "https://jitpack.io" }

        mavenCentral()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.google.com' }
        maven { url "https://jitpack.io" }

        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

def compat_version = '26.+'
def play_services_version = '11.0.1'
def firebase_version = '9.6.1'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "com.site.app"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["library" : "true"]
            }
        }
    }

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

    dexOptions {
        javaMaxHeapSize "4g"
    }

    dataBinding {
        enabled true
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

kapt {
    generateStubs = true
    correctErrorTypes = true
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    // android
    compile 'com.android.support:multidex:1.0.1'
    compile "com.android.support:appcompat-v7:${compat_version}"
    compile "com.android.support:design:${compat_version}"
    compile "com.android.support:cardview-v7:${compat_version}"
    compile "com.android.support:recyclerview-v7:${compat_version}"
    compile "com.android.support:gridlayout-v7:${compat_version}"
    compile "com.google.android.gms:play-services:${play_services_version}"
    compile "com.google.android.gms:play-services-ads:${play_services_version}"
    compile "com.google.android.gms:play-services-maps:${play_services_version}"
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.maps.android:android-maps-utils:0.4+'
    kapt "com.android.databinding:compiler:$android_plugin_version"

    // kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}
18个回答

64

在我的情况下,我有一个库模块,其中实现了Dagger的HasActivityInjector抽象应用程序类,以及一个依赖于该库的应用程序模块和其自己的(非抽象)应用程序类,该类扩展了基本应用程序类。

我的Gradle依赖关系是implementation,因此对于应用程序模块的应用程序类不可见(即使没有导入,否则问题将立即明显,因为您会收到“无法解析”的错误)。修复方法是将dagger implementation依赖项替换为api,使它们也可用于依赖模块。


1
我忘记在使用的模块中添加“Dagger”依赖项。只要显式地添加到该模块中,“implementation”就足够了。(顺便说一句,谢谢你提供的想法,你帮我省了几个小时的调试时间。) - andras
你的意思是如果我们通过“将其添加为模块”的方式使用库,那么我们需要在“应用程序”模块中编写在该库中定义的依赖项吗?为什么? - Malwinder Singh
在我的情况下,当尝试访问片段上的方法时会出现此错误。为了避免仅为此错误应用API配置,我只需创建一个接口并在片段上实现它即可。 - Rubén Viguera
1
@oblakr24 如果您不想使用 api,而想保留 implementation,问题在于使用抽象类进行继承。是否有其他解决方法可以避免将实现更改为 api? - portfoliobuilder
我在Dagger Hilt中遇到了类似的问题,在一个抽象类的模块中,我没有依赖Dagger(只有javax.inject:javax.inject:1依赖),在我在这个抽象类的模块中添加了Dagger依赖之后,问题得到了解决。 - konnovdev

15

通过改变插件调用的顺序,我解决了这个问题!

build.gradle

buildscript {
    ext.android_plugin_version = '2.3.3'
    ext.kotlin_version = '1.1.3-2'

    repositories {
        jcenter()
        mavenCentral()

        maven { url "https://maven.google.com" }
        maven { url 'https://maven.fabric.io/public' }
        maven { url "https://jitpack.io" }
    }

    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()

        maven { url "https://maven.google.com" }
        maven { url 'https://maven.fabric.io/public' }
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

应用程序/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'io.fabric'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "com.sample.app"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    buildTypes {
        debug {
            ext.alwaysUpdateBuildId = false
        }

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

    dexOptions {
        javaMaxHeapSize "4g"
    }

    dataBinding {
        enabled true
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    lintOptions {
        abortOnError false
        disable 'InvalidPackage'
    }
}

kapt {
    generateStubs = true
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    // kotlin
    kapt "com.android.databinding:compiler:$android_plugin_version"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

    // android
    compile 'com.android.support:multidex:1.0.1'
    compile "com.android.support:appcompat-v7:${compat_version}"
    compile "com.android.support:design:${compat_version}"
    compile "com.android.support:cardview-v7:${compat_version}"
    compile "com.android.support:recyclerview-v7:${compat_version}"
    compile "com.android.support:gridlayout-v7:${compat_version}"
    compile "com.android.support:support-vector-drawable:${compat_version}"
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile "com.google.android.gms:play-services-ads:${play_services_version}"
    compile "com.google.android.gms:play-services-maps:${play_services_version}"
    compile "com.google.android.gms:play-services-gcm:${play_services_version}"
    compile 'com.google.maps.android:android-maps-utils:0.4+'

    // fabric
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true;
    }

    // logger
    compile 'com.orhanobut:logger:2.1.1'

    // dexter
    compile 'com.karumi:dexter:4.1.0'

    // firebase
    compile "com.google.firebase:firebase-messaging:${firebase_version}"

    // persistence
    compile "android.arch.persistence.room:runtime:1.0.0-alpha3"
    annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha3"

    // facebook
    compile 'com.facebook.android:facebook-android-sdk:4.+'

    // retrofit
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'

    // gson
    compile 'com.google.code.gson:gson:2.8.1'

    // jobs
    compile 'com.evernote:android-job:1.1.11'

    // chart
    compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'

    // fresco
    compile 'com.facebook.fresco:fresco:1.3.0'

    // indicator
    compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
}

1
为什么顺序很重要?gradle.org有规定吗? - IgorGanapolsky

14
在尝试其他方法之前,请尝试以下操作: Android Studio -> 文件 -> 无效的缓存/重启
这对我有用。

4

对我来说问题是子模块未使用 AndroidX 活动。我猜测类名冲突了。

为解决此问题,添加了以下内容:

implementation 'androidx.legacy:legacy-support-v4:1.0.0'


3

我解决了我的问题,方法是删除与 dagger hilt 相关的文件,包括java(generated)目录下的文件,然后重新构建项目。


2

请确保在项目级别上添加与模块中添加的相同依赖项


1

(应用程序)-----依赖----(库)

在我的情况下,我没有改变任何依赖项配置,也没有改变顺序。 我不得不从库模块复制一个本地的pojo(model) jar文件到应用程序中。

应用程序是用Kotlin编写的 库是用Java编写的

这是一个错误,我不应该在应用程序和库中都有pojo.jar


这个解决方案可行。谢谢。我们能否不将库依赖项移动到应用程序模块中来完成它?你找到任何解决方案了吗? - Suneesh Ambatt

1

清理项目并重新构建,这对我很有效。


1
这并没有回答问题,应该被删除。如果你想评论一个帖子,你应该提供实际的答案来赚取发表评论所需的声望(这是50,参见特权)。 - finnmglas
@finnmglas 为什么你认为这不是一个答案? - broc.seib
@broc.seib 这似乎更像是一条评论而不是答案(尤其是因为Sangeetha的声望低于50)。其他答案解决了问题,表明问题比重建能够解决的要复杂得多 :D - finnmglas
@finnmglas 感谢您非常关心这个问题,我之前也遇到了同样的问题,只需重新构建我的项目即可解决。我认为这可能会对他有所帮助,希望我没有在论坛上添加不必要的内容。 - Sangeetha Sakthivel
@broc.seib 谢谢 - Sangeetha Sakthivel

1

我在这种情况下遇到了这个错误,通常发生在通过Android Studio执行时。

根本原因是我的Activity类扩展了另一个嵌套包中的一些接口:

包tv.activities

public class MainActivity implements MyListener {

} 

包 tv.activities.error

interface MyListener {

}

因此,通常在执行过程中发生,但在第二次运行后会自动解决,因此没有人会费心去解决它。有时Android Studio无法识别接口是否可访问,因此没有显示错误的意义:
Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
    class tv.activities.MainActivity, unresolved supertypes: MyListener

最终解决方案:

将接口公开可永久解决此问题。

public interface MyListener {
}

或者重构包的可访问性,以避免AS混淆。


Java 中的接口不都是公共的吗? - vplusplus

0
在添加Gradle依赖项后,我遇到了同样的错误。我使用了implementation(projects.someDependency),这导致在api模块中无法访问某些内容。将其更改为api(projects.someDependency)就可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接