仅在 Android Studio 中出现编译错误,但在 Gradle 构建中则不然:抽象基类成员 getLifecycle() 未实现

use*_*624 12 android-lifecycle android-gradle-plugin

在我的 AndroidStudio 中的 Android 项目中,一个扩展 LifecycleService 的类(下面名为 MyService)标记有以下错误消息:

类“MyService”不是抽象的,并且没有实现抽象基类成员public abstract fun getLifecycle(): Lifecycle 在 androidx.lifecycle.LifecycleService 中定义

但是使用 Gradle 构建很好,当我导航到 LifecycleService 类时,它既不是抽象的,也没有缺少 getLifecycle 方法,因为定义如下:

override val lifecycle: Lifecycle
    get() = dispatcher.lifecycle
Run Code Online (Sandbox Code Playgroud)

它应该实现 LifeCycleOwner 的接口方法 getLifecycle。

看来 AndroidStudio 正在使用 Gradle 之外的其他库。但是当我在 AndroidStudio 中导航时,似乎使用了 gradle 库。有什么解释吗,这是怎么回事,我该如何解决?

Мих*_*нов 12

传递库依赖的问题

解释

AppCompatActivityFragment其他AndroidX库在其依赖项中具有过时的库版本lifecycle-common。显然,您在其中一个模块中使用了新版本的生命周期依赖项,但在其他模块中您根本没有使用它,并且会自动选择旧版本。新版本的生命周期改变了描述androidx.lifecycle.LifecycleOwner,因此Android Studio认为它们不同

生命周期版本 2.6.1

public interface LifecycleOwner {

    public val lifecycle: Lifecycle
}
Run Code Online (Sandbox Code Playgroud)

生命周期版本 2.5.1

public interface LifecycleOwner {

    @NonNull
    Lifecycle getLifecycle();
}
Run Code Online (Sandbox Code Playgroud)

解决方案一:

您需要lifecycle-common在其他模块中显式指定依赖项的新版本(不一定在所有模块中,但仅在那些lifecycle可传递使用的模块中)

implementation 'androidx.lifecycle:lifecycle-common:2.6.1'
Run Code Online (Sandbox Code Playgroud)

解决方案2:

您可以将生命周期库的版本回滚到2.5.1,该版本用于当前最新版本的库“androidx.appcompat:appcompat:1.6.1

implementation 'androidx.lifecycle:lifecycle-common:2.5.1'
Run Code Online (Sandbox Code Playgroud)