【问题标题】:Android Architecture Components - ViewModel Observable & ProguardAndroid 架构组件 - ViewModel Observable & Proguard
【发布时间】:2017-06-27 00:23:32
【问题描述】:

我无法让 ViewModel 组件与 Proguard 一起使用。我已经必须添加以下内容以防止由于 NoSuchMethodException 导致的崩溃:init()

-keep class com....SlideshowViewModel {*;}

但是,我在活动中的观察者没有收到任何数据。这工作正常,直到我启用 Proguard,所以我知道 Proguard 是原因,我只是不知道为什么(这里是新手 Proguardian)。我需要添加什么规则才能使 observables 工作?

我的 ViewModel (Kotlin) 中有以下内容

val currentItem = MediatorLiveData<MediaItem>()

....稍后...

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

和活动(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 中什么都没有触发。

【问题讨论】:

    标签: android proguard viewmodel


    【解决方案1】:

    找到它: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 *;
    }
    

    【讨论】:

    • 在较新的版本中,忽略注释似乎就足够了,例如:-dontnote android.arch.lifecycle.**
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多