Котлин абстрактный универсальный с ProGuard - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующий базовый класс:

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

Я попробовал некоторые -keep правила для ProGuard, но ничего не получалось. Какое правильное решение?

1 Ответ

0 голосов
/ 18 сентября 2018

Полагаю, вы хотите, чтобы он не был запутан, поэтому в этом случае вы должны оставить методы в абстрактном классе:

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

В по этой ссылке есть действительно полезный ProguardGuideПрочитав его, вы должны быть более уверены в том, какие правила следует использовать.

Надеюсь, это поможет, в противном случае дайте мне знать!

...