android - 您将如何解决仅在 Android 的发布模式下出现的依赖错误?
问题描述
语境
我们在 Kotlin 中构建了一个 Android 应用程序,并且我们将算法层拆分为一个单独的 Android 项目。我们使用 Gradle 使用以下代码将其作为依赖项导入:
在build.gradle
:
dependencies {
...
implementation project(':algos-android')
}
这个algos-android
项目有自己的依赖——koma
在algos-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 为我们处理子依赖项。有没有人遇到过这样的问题?有什么好的调试方法吗?
我们尝试过的事情
- 将我们
algos-android
项目中的所有文件直接移动到主项目中,并直接导入koma
主项目的gradle.build
文件中。
环境
- 安卓工作室 4.0.1
- Kotlin 版本 1.3.72
- Gradle 版本 6.3
- 子依赖回购: https ://github.com/kyonifer/koma
解决方案
我们终于能够找到问题并通过在proguard-rules.pro
文件中添加以下内容来解决此问题:
-keep class koma.** { *; }
我们能够发现,由于 Matrix 工厂类在 koma 源中使用反射进行了膨胀,proguard 将它们视为未使用并从发布版本中简单地删除它们。
注意:如果您看到并进行了此修复,请不要忘记在运行之前清理项目。
推荐阅读
- python - 正则表达式中的 sqlite3 绑定
- excel - 在 excel vba 中管理库存项目
- r - R:使用命令将数字保存在缩放窗口中?
- c# - 如何在更大的字节数组中找到 DEFLATE 流的结尾?
- python - 如何在python上并行处理这个嵌套循环
- react-native - 如何使用 React Native 在 web 和 android 中将数据导出为 pdf(xlxs、docx 或 ppt 等)?
- r - R列data.frame从数字到excel格式ccurrency
- javascript - Angular 没有将项目名称识别为属性
- laravel - 与 laravel/socialite 移动 tp laravel 7 冲突
- html - 在高度有限的两列上显示内容