在我的 flutter 应用程序中,我有一个 kotlin 库依赖项。在 android 文件夹的主要 Activity 中,我正在调用库的函数之一,其中有一个 lambda。
例如:a.b.c.Util.someFunction$1
我正在从 MainActivity 调用“someFunction”,但它崩溃了,因为它说它找不到“$1”类。我知道 kotlin 为每个 lambda 创建了一个类并将其命名为这样(带有 $ 符号)。
有趣的是,该应用程序在我的 android 7 设备上运行,但它在 android 4 和 5 设备上崩溃。
我最好的猜测是我正在为 kotlin 编译器使用版本 8 的源代码兼容性,它生成 java 8 兼容的字节码,因此较低的设备不支持它,但即使将它降级到版本 6 也没有解决问题
我已经为 build.gradle 添加了 multidex 支持并扩展了 FlutterApplication 并在我的 Application 类中调用了 Multidex.install(this) 并替换了 list 中的 Application 类
最佳答案
我找到了问题的根源。我在 kotlin 代码中使用了一些 jdk8 函数,但旧设备不支持它,因为它们是 jvm 6 或 7。
例如Collection.removeIf或Map.forEach函数在jdk8中定义
我设法通过将 intellij idea 的语言级别降低到 6 来查找和替换所有 jdk8 函数调用来解决这个问题。但它只会强制你只使用 6 以下的语言特性而不是函数。我想现在我必须找到heystack 中的所有 jdk8 函数!
关于android - 具有 kotlin 库依赖性的 Flutter 应用程序中的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59542358/