Почему я не могу получить доступ к приватному полю через рефлексию? - PullRequest
2 голосов

Я пытаюсь получить экземпляры "Animator", которые хранятся в закрытом классе "AnimatedVectorDrawableState", который находится в классе "AnimatedVectorDrawable", с помощью отражения.

Если бы все свойства были общедоступными, «Аниматоры» могли бы получить по такой строке:

AnimatedVectorDrawable().mAnimatedVectorState.mAnimators

Для получения Аниматоров я использую следующий метод:

private fun AnimatedVectorDrawable.getAnimators() {
    val field = javaClass.getDeclaredField("mAnimatedVectorState")
    field.isAccessible = true

    val animatedVectorDrawableState = field.get(this)

    val animatorsField = animatedVectorDrawableState.javaClass.getDeclaredField("mAnimators")
    animatorsField.isAccessible = true

    Log.d("custom", animatorsField.toString())
}

Но программа потерпела крах, когда я попытался получить "mAnimators" с сообщением: "Нет полевых маниматоров в классе Landroid / графика / рисование / AnimatedVectorDrawable $ AnimatedVectorDrawableState;"

Несмотря на то, что я могу видеть свойство "mAnimators" через отладчик Android.

Как я могу получить данные "mAnimators" из "AnimatedVectorDrawable"?

Вот скриншот отладочных данных: debug_data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...