Android 当代码被 R8 缩小时,生命周期观察器不会触发
Android lifecycle observers don't trigger when code is minified by R8
当我使用 minifyEnabled=true
构建代码时,生命周期观察器不会触发任何事件。
lifecycle.addObserver(object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
@Keep
fun anyEvent(source: LifecycleOwner, event: Lifecycle.Event) {
// Never triggers
Timber.i("Source=%s, event=%s", source, event)
}
})
androidx.lifecycle:lifecycle
版本 2.2.0-rc01
(以前的版本也可能受到影响)。
compileSdkVersion
是 28
,我正在 Android 10 (API29) 模拟器上进行测试。
大约 4 小时后我可以自己回答这个问题,我希望这不会让其他人失望。
R8 删除了一些必要的回调。我煞费苦心地检查了所有内容并将其缩小到这些缺失:
20745,20751d20744
< androidx.lifecycle.ReportFragment
< public void onActivityPostCreated(android.app.Activity,android.os.Bundle)
< public void onActivityPostStarted(android.app.Activity)
< public void onActivityPostResumed(android.app.Activity)
< public void onActivityPrePaused(android.app.Activity)
< public void onActivityPreStopped(android.app.Activity)
< public void onActivityPreDestroyed(android.app.Activity)
27034,27037d27026
< androidx.lifecycle.ReportFragment$ActivityInitializationListener
< public abstract void onCreate()
< public abstract void onStart()
< public abstract void onResume()
仅当您针对 API 28 进行编译时才会出现此问题,但 运行 您的代码针对 API 29。
这里有一个未解决的工单:
https://issuetracker.google.com/issues/142778206
要解决此问题,您可以使用 compileSdkVersion 29
或包含以下混淆器规则:
-keepclassmembers class * extends androidx.lifecycle.EmptyActivityLifecycleCallbacks { *; }
-keepclassmembers class androidx.lifecycle.ReportFragment$** { *; }
此问题已在修订生命周期版本 2.2.0-rc02 中修复
更多详情:-
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.2.0-rc02
当我使用 minifyEnabled=true
构建代码时,生命周期观察器不会触发任何事件。
lifecycle.addObserver(object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
@Keep
fun anyEvent(source: LifecycleOwner, event: Lifecycle.Event) {
// Never triggers
Timber.i("Source=%s, event=%s", source, event)
}
})
androidx.lifecycle:lifecycle
版本 2.2.0-rc01
(以前的版本也可能受到影响)。
compileSdkVersion
是 28
,我正在 Android 10 (API29) 模拟器上进行测试。
大约 4 小时后我可以自己回答这个问题,我希望这不会让其他人失望。
R8 删除了一些必要的回调。我煞费苦心地检查了所有内容并将其缩小到这些缺失:
20745,20751d20744
< androidx.lifecycle.ReportFragment
< public void onActivityPostCreated(android.app.Activity,android.os.Bundle)
< public void onActivityPostStarted(android.app.Activity)
< public void onActivityPostResumed(android.app.Activity)
< public void onActivityPrePaused(android.app.Activity)
< public void onActivityPreStopped(android.app.Activity)
< public void onActivityPreDestroyed(android.app.Activity)
27034,27037d27026
< androidx.lifecycle.ReportFragment$ActivityInitializationListener
< public abstract void onCreate()
< public abstract void onStart()
< public abstract void onResume()
仅当您针对 API 28 进行编译时才会出现此问题,但 运行 您的代码针对 API 29。
这里有一个未解决的工单: https://issuetracker.google.com/issues/142778206
要解决此问题,您可以使用 compileSdkVersion 29
或包含以下混淆器规则:
-keepclassmembers class * extends androidx.lifecycle.EmptyActivityLifecycleCallbacks { *; }
-keepclassmembers class androidx.lifecycle.ReportFragment$** { *; }
此问题已在修订生命周期版本 2.2.0-rc02 中修复
更多详情:- https://developer.android.com/jetpack/androidx/releases/lifecycle#2.2.0-rc02