Отладка R8 FullMode, вызывающая переход XXX, не является допустимым переходом платформы или переходом AndroidX

С android.enableR8.fullMode = истина и minifyEnabled true в сборках Отлаживать мы видим следующую ошибку времени выполнения (несколько устройств и эмулятор):

Fatal Exception: java.lang.IllegalArgumentException: Transition Slide@b15f5f5: dur(400) for fragment MyFragment is not a valid framework Transition or AndroidX Transition

В сборке Выпускать этого не происходит (с включенным полным режимом R8)

Если я отключу R8 FullMode, мы не увидим ошибку в сборке отладки.

import androidx.transition.TransitionInflater

abstract class MyBaseFragment : Fragment() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enterTransition = TransitionInflater.from(requireContext()).inflateTransition(R.transition.slide_right)
  }
}

слайд_право.xml:

<slide xmlns:android = "http://schemas.android.com/apk/res/android"
  android:duration = "@android:integer/config_mediumAnimTime"
  android:slideEdge = "right" />

proguard-rules.pro (фрагмент):

-keep class **.R
-keep class **.R$* {
   <fields>;
}
-keepclassmembers class **.R$* {
   public static <fields>;
}

Кто-нибудь знает, почему R8 FullMode делает это в отладочных сборках? Существуют ли какие-либо дополнительные правила proguard, которые могут потребоваться в этом случае?

Это похоже на проблему, о которой следует сообщить на трекере R8 iussue. Вы можете использовать issuetracker.google.com/issues/new?component=326788. Если возможно, прикрепите репродукцию к сообщению об ошибке.

sgjesse 04.08.2022 09:32
1
1
986
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это была ошибка в R8. https://issuetracker.google.com/u/3/issues/241478253

Обходной путь для этой проблемы — добавить правило proguard для:

- keep class androidx.transition.FragmentTransitionSupport

Другие вопросы по теме