Android 架构组件 - ViewModel Observable 和 Proguard
Android Architecture Components - ViewModel Observable & Proguard
我在让 ViewModel 组件与 Proguard 一起工作时遇到问题。我已经必须添加以下内容以防止由于 NoSuchMethodException 导致崩溃:init()
-保持 class com....SlideshowViewModel {*;}
但是,我在 activity 中的观察者没有收到任何数据。这在我启用 Proguard 之前工作正常,所以我知道 Proguard 是原因,我只是不知道为什么(这里是新手 Proguardian)。我需要添加什么规则才能使 observables 正常工作?
我的 ViewModel (Kotlin) 中有以下内容
val currentItem = MediatorLiveData<MediaItem>()
..稍后...
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:设置下一张图片:18 张中的 0 张
但是在 onChanged Observable 中没有触发任何东西。
发现于: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 *;
}
我在让 ViewModel 组件与 Proguard 一起工作时遇到问题。我已经必须添加以下内容以防止由于 NoSuchMethodException 导致崩溃:init()
-保持 class com....SlideshowViewModel {*;}
但是,我在 activity 中的观察者没有收到任何数据。这在我启用 Proguard 之前工作正常,所以我知道 Proguard 是原因,我只是不知道为什么(这里是新手 Proguardian)。我需要添加什么规则才能使 observables 正常工作?
我的 ViewModel (Kotlin) 中有以下内容
val currentItem = MediatorLiveData<MediaItem>()
..稍后...
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:设置下一张图片:18 张中的 0 张
但是在 onChanged Observable 中没有触发任何东西。
发现于: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 *;
}