在不同的库中使用java 8默认接口方法和实现时出现AbstractMethodError

问题描述 投票:0回答:1

我有一个带有默认方法(

ITest
)的java接口和在2个不同的库(
Test
)中定义的java实现(
aar
)。在
app
模块中,我创建
Test
的实例并调用
Test.test()
AbstractMethodError
此时发生。
只有我在库中使用 Java(对于 Kotlin 都可以)并通过
Build - Generate Signed APK
构建 apk,才会发生这种情况。 如果应用程序使用
Run
菜单运行,则一切都会按预期工作。

lib1(带接口):

public interface ITest {
    default void test() {
    }
}

lib2(带实现):

public class Test implements ITest {
}

应用程序:

private fun runTest() {
    try {
        Test().test()
        Log.d(TAG, "call success")
    } catch (e: AbstractMethodError) {
        Log.d(TAG, "call fail e = $e")
    }
}

库和应用程序 build.config 支持 Java8:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = '1.8'
}

这是非常简单的演示项目

在我的例子中我必须如何使用 Java 默认方法?

java android android-studio aar
1个回答
0
投票

我们也面临同样的问题。 然而,我们使用的lib包含默认方法是我们的本地子模块,但没有作为Aar导入。

您也遇到过类似的问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.