为什么我不能通过反射访问私有字段?

时间:2019-06-18 17:16:43

标签: android animation kotlin reflection

我正在尝试通过反射获取存储在私有类“ AnimatedVectorDrawableState”中的“ Animator”实例,该私有类位于“ 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 / graphics / drawable / AnimatedVectorDrawable $ AnimatedVectorDrawableState中没有字段mAnimator;”

尽管我能够通过Android调试器看到“ mAnimators”属性。

如何从“ AnimatedVectorDrawable”获取“ mAnimators”数据?

这是调试数据的屏幕截图: debug_data

0 个答案:

没有答案