android - Android Koin NoBeanDefFoundException 仅在应用程序的发布版本中
问题描述
在 Debug 版本中它工作正常,但在 Release 版本中失败。我想这与 Proguard 规则有关。
// Koin
implementation 'org.koin:koin-android:1.0.2'
implementation 'org.koin:koin-android-viewmodel:1.0.2'
模块:
val appModule = module {
viewModel<IntroVM>()
}
val dataModule = module {
single { NetworkManager(androidContext().applicationContext) }
single { LocalFileManager(androidContext().applicationContext) }
single { ApiModel(get()) }
类定义:
class ApiModel(val networkManager: NetworkManager){}
class LocalFileManager(private var appContext: Context) {}
class NetworkManager(private var appContext: Context) {}
class IntroVM(var apiModel: ApiModel) : CommonVM() {
Koin 初始化:
startKoin(this, listOf(appModule, dataModule))
保护规则:
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepclassmembernames class kotlinx.** {
volatile <fields>;
}
堆栈跟踪:
Error while resolving instance for class 'com...viewModels.auth.b' -
error: org.koin.error.BeanInstanceCreationException:
Can't create definition for 'Factory [name='b',class='com..viewModels.auth.b', binds~(androidx.lifecycle.r)]' due to error :'binds~(androidx.lifecycle.r)]
No constructor found for class 'class com...viewModels.auth.b'
解决方案
当您使用 androidX 时,请使用下面的 viewmodel 库 for koin
implementation 'org.koin:koin-androidx-viewmodel:1.0.2'
推荐阅读
- visual-studio-2019 - 我的本地 SQL Server Express 数据库文件在哪里?
- laravel - Laravel Livewire:组件还是控制器?
- r - 如何在 R 中加载多个文件?
- asp.net - 称呼的数据注释
- ios - 如何在 swift 4 中解析部分链接?
- python - 为什么我的总数没有被计算并处理成输出?
- javascript - 通过单击按钮删除其中一个后更新 li 的数量
- sql - LEFT JOIN 在表上并根据另一个列条件从 MIN(date) 的新表中选择列
- angular - 无法以角度更改 ag-grid 主题
- python - 更新 numpy 矩阵的并行化函数