Наблюдатели жизненного цикла Android не запускаются, когда код минимизирован R8 - PullRequest
2 голосов
/ 02 ноября 2019

Когда я создаю свой код с помощью 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).

1 Ответ

2 голосов
/ 02 ноября 2019

Примерно через 4 часа я могу ответить на этот вопрос сам и надеюсь, что это удержит кого-то от отчаяния.

R8 удаляет некоторые необходимые обратные вызовы. Я тщательно продумал все и сузил до этих пропущенных:

20745,20751d20744
< androidx.lifecycle.ReportFragment$1
<     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 или включить следующие правила Proguard:

-keepclassmembers class * extends androidx.lifecycle.EmptyActivityLifecycleCallbacks { *; }
-keepclassmembers class androidx.lifecycle.ReportFragment$** { *; }
...