Vig*_*han 6 android proguard android-livedata android-10.0
我正在使用LiveData数据绑定。我minifyEnabled=true在发布配置中使用了标准混淆器规则。在 Android 9 及更低版本中一切正常,但在 Android 10(Q) 中,实时数据不会调用观察者。
我根据在互联网上找到的答案尝试了所有不同的规则,但没有解决问题。
# Android data binding
-dontwarn androidx.databinding.**
-keep class androidx.databinding.** { *; }
# Android data binding
-dontwarn com.xxxx.xx.databinding.**
-keep class com.xxxx.xx.databinding.** { *; }
-keepclassmembers class com.xxxx.xx.databinding.** { *; }
-keep class com.xxxx.xx.BindingHelpers.** { *; }
-keepclassmembers class com.xxxx.xx.BindingHelpers.** { *; }
-keep class com.xxxx.xx.DataBinderMapperImpl { *; }
#AndroidX View Model
-keep class * extends androidx.lifecycle.ViewModel { *; }
-keepclassmembers class * extends androidx.lifecycle.ViewModel { *; }
#AndroidX AttributeSet
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#AndroidX Annotation
-keepattributes *Annotation*
#AndroidX Lifecycle
-keepclassmembers enum androidx.lifecycle.Lifecycle$Event {
<fields>;
}
-keep !interface * implements androidx.lifecycle.LifecycleObserver {
}
-keep class * implements androidx.lifecycle.GeneratedAdapter {
<init>(...);
}
-keepclassmembers class ** {
@androidx.lifecycle.OnLifecycleEvent *;
}
#AndroidX Arch
-keepclassmembers class android.arch.** { *; }
-keep class android.arch.** { *; }
-dontwarn android.arch.**
# ServiceLoader support(coroutines)
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepnames class kotlinx.coroutines.android.AndroidExceptionPreHandler {}
-keepnames class kotlinx.coroutines.android.AndroidDispatcherFactory {}
# Most of volatile fields are updated with AFU and should not be mangled
-keepclassmembernames class kotlinx.** {
volatile <fields>;
}
Run Code Online (Sandbox Code Playgroud)
当我查看Android 示例时,minifyEnabled=false是在 build.gradle 文件中设置的。
这解决了我的问题。
我想检查其他人是否有类似的问题并通过启用 minify 修复它?
删除缩小可以吗?(我知道缩小可以通过删除未使用的代码来减少 APK 大小,删除它还缺少其他什么吗?)。
总而言之:
我通过保留所有生命周期类和成员来修复。就像数据绑定规则一样。
-keep class androidx.lifecycle.** { *; }
Run Code Online (Sandbox Code Playgroud)
加长版;
我在调试模式下启用了 minify 并逐步浏览了 Android 源代码,发现LiveData和 都LifecycleBoundObserver被缩小了。因此,检查生命周期观察器是否处于活动状态总是返回 false。
我不需要保留所有文件来解决我面临的问题,但我怀疑缩小这些文件可能会导致未来出现一些问题。
请建议是否有更好的方法来解决这个问题。
| 归档时间: |
|
| 查看次数: |
2417 次 |
| 最近记录: |