首页 > 解决方案 > 您将如何解决仅在 Android 的发布模式下出现的依赖错误?

问题描述

语境

我们在 Kotlin 中构建了一个 Android 应用程序,并且我们将算法层拆分为一个单独的 Android 项目。我们使用 Gradle 使用以下代码将其作为依赖项导入:

build.gradle

dependencies {
    ...
    implementation project(':algos-android')
}

这个algos-android项目有自己的依赖——komaalgos-android项目的build.gradle文件中定义如下:

dependencies {
    ...
    implementation group: "com.kyonifer", name:"koma-core-ejml", version: "0.12"
}

问题

debug在模式下运行应用程序时,这完全可以正常工作(在buildTypes中定义build.gradle)。但是,在release模式下运行时,当我们的算法层使用其子依赖项时,我们会在运行时看到错误 - koma

控制台中显示以下错误:

java.lang.IllegalStateException: No double matrix factories available. (Did you forget to import a koma-core implementation?)

我的团队假设 Gradle 为我们处理子依赖项。有没有人遇到过这样的问题?有什么好的调试方法吗?

我们尝试过的事情

环境

标签: androidandroid-studiokotlindependencies

解决方案


我们终于能够找到问题并通过在proguard-rules.pro文件中添加以下内容来解决此问题:

-keep class koma.** { *; }

我们能够发现,由于 Matrix 工厂类在 koma 源中使用反射进行了膨胀,proguard 将它们视为未使用并从发布版本中简单地删除它们。

注意:如果您看到并进行了此修复,请不要忘记在运行之前清理项目。


推荐阅读