Proguard 警告:在 Observable 上找不到引用的 class
Proguard Warning: can't find referenced class on Observable
当我使用 Proguard 构建时,我在 Observable 上收到“无法在 Observable 上找到引用的 class”警告。
但是我在很多地方都使用了 Observable,但是警告只指向下面的代码。
viewModel.data.observe(this, Observer<Boolean> {
// Warning: can't find referenced class
Single.fromCallable {
updateSomething()
}
.delay(2, TimeUnit.SECONDS)
.subscribe({}, {
it.printStackTrace()
})
})
可能跟ViewModel观察有关?如果我注释掉 'Single.fromCallable...' 块,我可以在没有任何警告的情况下构建。
我该如何解决这个问题?
[编辑]我现在的proguard-rules.pro
############################################################
## Retrofit2
############################################################
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-dontwarn javax.annotation.**
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
############################################################
## okhttp3
############################################################
-dontwarn okhttp3.**
-dontwarn okio.**
############################################################
## For picasso
############################################################
-dontwarn com.squareup.okhttp.**
############################################################
## For com.caverock:androidsvg
############################################################
-dontwarn com.caverock.androidsvg.**
############################################################
## For Gson
############################################################
-keep class com.google.** {*;}
-keep interface com.google.** {*;}
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
############################################################
## For NonSwipeableViewPager
############################################################
-keep class android.support.v4.view.ViewPager { *; }
############################################################
## For RxJava
############################################################
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
-dontnote rx.internal.util.PlatformDependent
错误信息,
Warning: com.test/view.list.PhotoListFragment$observeUpdates:
can't find referenced class
com.test/view.list.PhotoListFragment$observeUpdates Warning:
com.test/view.list.PhotoListFragment$observeUpdates: can't
find referenced class
com.test/view.list.PhotoListFragment$observeUpdates Warning:
com.test/view.list.PhotoListFragment$observeUpdates: can't
find referenced class
com.test/view.list.PhotoListFragment$observeUpdates Warning:
com.test/view.list.PhotoListFragment$observeUpdates: can't
find referenced class
com.test/view.list.PhotoListFragment$observeUpdates
observeUpdates() 方法包含上述代码。
您可以尝试在 Proguard 中保留这一行:
-keepnames class rx.Single
#rxjava
-keep class rx.schedulers.Schedulers {
public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
public <methods>;
}
-keep class rx.schedulers.TestScheduler {
public <methods>;
}
-keep class rx.schedulers.Schedulers {
public static ** test();
}
-keep class rx.internal.util.unsafe.** {
*;
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
long producerNode;
long consumerNode;
}
当我使用 Proguard 构建时,我在 Observable 上收到“无法在 Observable 上找到引用的 class”警告。
但是我在很多地方都使用了 Observable,但是警告只指向下面的代码。
viewModel.data.observe(this, Observer<Boolean> {
// Warning: can't find referenced class
Single.fromCallable {
updateSomething()
}
.delay(2, TimeUnit.SECONDS)
.subscribe({}, {
it.printStackTrace()
})
})
可能跟ViewModel观察有关?如果我注释掉 'Single.fromCallable...' 块,我可以在没有任何警告的情况下构建。
我该如何解决这个问题?
[编辑]我现在的proguard-rules.pro
############################################################
## Retrofit2
############################################################
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-dontwarn javax.annotation.**
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
############################################################
## okhttp3
############################################################
-dontwarn okhttp3.**
-dontwarn okio.**
############################################################
## For picasso
############################################################
-dontwarn com.squareup.okhttp.**
############################################################
## For com.caverock:androidsvg
############################################################
-dontwarn com.caverock.androidsvg.**
############################################################
## For Gson
############################################################
-keep class com.google.** {*;}
-keep interface com.google.** {*;}
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
############################################################
## For NonSwipeableViewPager
############################################################
-keep class android.support.v4.view.ViewPager { *; }
############################################################
## For RxJava
############################################################
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
-dontnote rx.internal.util.PlatformDependent
错误信息,
Warning: com.test/view.list.PhotoListFragment$observeUpdates: can't find referenced class com.test/view.list.PhotoListFragment$observeUpdates Warning: com.test/view.list.PhotoListFragment$observeUpdates: can't find referenced class com.test/view.list.PhotoListFragment$observeUpdates Warning: com.test/view.list.PhotoListFragment$observeUpdates: can't find referenced class com.test/view.list.PhotoListFragment$observeUpdates Warning: com.test/view.list.PhotoListFragment$observeUpdates: can't find referenced class com.test/view.list.PhotoListFragment$observeUpdates
observeUpdates() 方法包含上述代码。
您可以尝试在 Proguard 中保留这一行:
-keepnames class rx.Single
#rxjava
-keep class rx.schedulers.Schedulers {
public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
public <methods>;
}
-keep class rx.schedulers.TestScheduler {
public <methods>;
}
-keep class rx.schedulers.Schedulers {
public static ** test();
}
-keep class rx.internal.util.unsafe.** {
*;
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
long producerNode;
long consumerNode;
}