使用ProGuard的Kotlin抽象泛型

时间:2018-09-18 07:00:16

标签: android kotlin proguard

我有以下基类:

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规则,但没有任何效果。什么是正确的解决方案?

1 个答案:

答案 0 :(得分:0)

我想您希望它不会被混淆,因此在这种情况下,您应该将方法保留在抽象类中:

-keep public class {path to your class}.BaseFragment{
   private <methods>;
}

this link中有一个非常有用的ProguardGuide 阅读后,您应该对应该使用哪些规则更有信心。

希望它能对您有所帮助,否则请告诉我!