Я использую AndroidX viewpager, на котором есть несколько интерактивных представлений. Все отлично работает при отладке application, когда proguard не включен, но когда я включаю minifyEnabled true для выпуска application, представление Viewpager не меняется. Ищете правила proguard для сохранения позиции viewpager?

Как будто у меня есть кнопка и анимация, всякий раз, когда я нажимаю кнопку, анимация должна воспроизводиться.

    private fun getCurrentView(viewPager: ViewPager): View? {
    try {
        val currentItem = viewPager.currentItem
        for (i in 0 until viewPager.childCount) {
            val child = viewPager.getChildAt(i)
            val layoutParams = child.layoutParams as ViewPager.LayoutParams
            val f: Field =
                layoutParams.javaClass.getDeclaredField("position") //NoSuchFieldException
            f.isAccessible = true
            val position = f.get(layoutParams) as Int //IllegalAccessException
            if (!layoutParams.isDecor && currentItem == position) {
                return child
            }
        }
    } catch (e: NoSuchFieldException) {
        Log.e("TAG", e.toString())
    } catch (e: IllegalArgumentException) {
        Log.e("TAG", e.toString())
    } catch (e: IllegalAccessException) {
        Log.e("TAG", e.toString())
    }
    return null
}
1
Syed Rafaqat Hussain 10 Янв 2022 в 15:14

1 ответ

Лучший ответ

Решение для этого заключается в том, что вам необходимо защитить ViewPager.LayoutParams#position от обфускации и сжать с помощью следующих правил ProGuard, если вы включите ProGuard, иначе R8 сохранит вашу позицию.

-keep class androidx.viewpager.widget.ViewPager$LayoutParams { int position; }

Удачного кодирования

1
Tariq Hussain 10 Янв 2022 в 15:19
1
Вы экономите мое время, я потратил 2 дня на эту проблему, спасибо, это решает мою проблему.
 – 
Syed Rafaqat Hussain
10 Янв 2022 в 15:43