我有一个带有默认方法(
ITest
)的java接口和在2个不同的库(Test
)中定义的java实现(aar
)。在 app
模块中,我创建 Test
的实例并调用 Test.test()
。 AbstractMethodError
此时发生。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 默认方法?
我们也面临同样的问题。 然而,我们使用的lib包含默认方法是我们的本地子模块,但没有作为Aar导入。
您也遇到过类似的问题吗?