我有以下基类:
abstract class BaseFragment<T : BaseViewModel> : Fragment(), JobHolder {
protected lateinit var viewModel: T
private set
protected fun provideViewModel(type: Class<T>) {
viewModel = ViewModelProviders.of(this).get(type)
}
}
和以下类别:
class SubjectEditor : BaseFragment<SubjectEditorViewModel>() {
override fun onAttach(context: Context?) {
super.onAttach(context)
provideViewModel(SubjectEditorViewModel::class.java)
}
}
但是ProGuard抱怨:
Warning: cz.x.ui.subjects.SubjectEditor: can't find referenced method 'void setViewModel(cz.x.ui.BaseViewModel)' in program class cz.x.ui.subjects.SubjectEditor
我为ProGuard尝试了一些-keep
规则,但没有任何效果。什么是正确的解决方案?
答案 0 :(得分:0)
我想您希望它不会被混淆,因此在这种情况下,您应该将方法保留在抽象类中:
-keep public class {path to your class}.BaseFragment{
private <methods>;
}
this link中有一个非常有用的ProguardGuide 阅读后,您应该对应该使用哪些规则更有信心。
希望它能对您有所帮助,否则请告诉我!