Android架构组件-ViewModel Observable和Proguard

7
我在使用Proguard时遇到了ViewModel组件无法正常工作的问题。为了防止NoSuchMethodException引起崩溃,我已经添加了以下内容:
-keep class com....SlideshowViewModel {*;}
然而,在活动中的观察者没有收到任何数据。在启用Proguard之前,这是正常工作的,因此我知道Proguard是原因,只是不知道为什么(我是一个初学者)。我需要添加什么规则才能使可观察对象正常工作?
我在我的ViewModel(Kotlin)中有以下内容:
val currentItem = MediatorLiveData<MediaItem>()

....later...

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

以及Activity(Java)

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

在日志中我收到了以下内容: D/SlideshowViewModel: 设置下一张图片:0/18 但是在onChanged Observable中没有任何触发。
1个回答

10

发现问题来源于:https://issuetracker.google.com/issues/62113696

不过这个问题应该很快就会被解决(目前alpha3版本还没有修复)

## 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 *;
}

1
在更新的版本中,似乎忽略注释就足够了,例如:-dontnote android.arch.lifecycle.** - schlenger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接