2017-06-27 12 views
5

Mam problem z uzyskaniem komponentu ViewModel do pracy z Proguard. I już musiał dodać następujące zapobiec awarii z powodu NoSuchMethodException: init()Komponenty architektury systemu Android - ViewModel Observable & Proguard

-Trzymaj klasa com .... SlideshowViewModel {*;}

Jednak moi obserwatorzy w tej czynności są nieotrzymania dowolne dane. Działa to dobrze, dopóki nie włączę Proguard, więc wiem, że Proguard jest przyczyną, po prostu nie wiem dlaczego (tutaj jest nowicjusz Proguardian). Jaką regułę muszę dodać, aby obserwatory działały?

Mam następujących w moim ViewModel (Kotlin)

val currentItem = MediatorLiveData<MediaItem>() 

.... później ...

 Timber.d("Setting next image: " + position + " out of " + mediaItemList.size) 
     currentItem.value = mediaItemList[position] 

i aktywność (Java)

viewModel.getCurrentItem().observe(this, new Observer<MediaItem>() { 
     @Override 
     public void onChanged(@Nullable final MediaItem mediaItem) { 
      Timber.d("Activity received new item"); 
     } 
    }); 

W dziennik, który otrzymuję: D/Pokaz slajdówViewModel: Ustawianie następnego zdjęcia: 0 z 18

Ale nic nie zostanie wyrzucone z obserwowanego obiektu OnChanged.

Odpowiedz

5

Znaleziono go na: https://issuetracker.google.com/issues/62113696

To powinna być ustalona wkrótce chociaż (nie wobec alfa3 jeszcze)

## Android architecture components: Lifecycle 
# LifecycleObserver's empty constructor is considered to be unused by proguard 
-keepclassmembers class * implements android.arch.lifecycle.LifecycleObserver { 
    <init>(...); 
} 
# ViewModel's empty constructor is considered to be unused by proguard 
-keepclassmembers class * extends android.arch.lifecycle.ViewModel { 
    <init>(...); 
} 
# keep Lifecycle State and Event enums values 
-keepclassmembers class android.arch.lifecycle.Lifecycle$State { *; } 
-keepclassmembers class android.arch.lifecycle.Lifecycle$Event { *; } 
# keep methods annotated with @OnLifecycleEvent even if they seem to be unused 
# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows) 
-keepclassmembers class * { 
    @android.arch.lifecycle.OnLifecycleEvent *; 
} 
Powiązane problemy