Доступ к Android Q-интерфейсам без SDK - Landroid / widget / AbsListView; -> mSelectorPosition: I (greylist-max-p, отражение, запрещено) - PullRequest
0 голосов
/ 27 сентября 2019

нужна одна помощь, чтобы мы могли использовать старый API в Android Q.

Я сталкиваюсь с этой проблемой в https://github.com/diegocarloslima/FloatingGroupExpandableListView

Все работает нормально до Android P

Как я могу включить доступ к интерфейсам не-SDK?

https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces

2019-09-27 18:36:25.024 13800-13800/com.app.readyb W/com.app.readyb: Accessing hidden field Landroid/widget/AbsListView;->mSelectorPosition:I (greylist-max-p, reflection, denied)
2019-09-27 18:36:25.029 13800-13800/com.app.readyb W/com.app.readyb.diegocarloslima.fgelv.lib.ReflectionUtils: java.lang.NoSuchFieldException: No field mSelectorPosition in class Landroid/widget/AbsListView; (declaration of 'android.widget.AbsListView' appears in /system/framework/framework.jar!classes3.dex)
        at java.lang.Class.getDeclaredField(Native Method)
        at com.app.readyb.diegocarloslima.fgelv.lib.ReflectionUtils.getFieldValue(ReflectionUtils.java:15)
        at com.app.readyb.diegocarloslima.fgelv.lib.FloatingGroupExpandableListView.dispatchDraw(FloatingGroupExpandableListView.java:195)
        at android.view.View.draw(View.java:21439)
        at android.widget.AbsListView.draw(AbsListView.java:4388)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21439)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1765)
        at android.view.View.draw(View.java:21439)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1765)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1256)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at androidx.drawerlayout.widget.DrawerLayout.drawChild(DrawerLayout.java:1426)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21439)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21439)
        at com.android.internal.policy.DecorView.draw(DecorView.java:806)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:575)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:581)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:654)
        at android.view.V
2019-09-27 18:36:25.030 13800-13800/com.app.readyb D/AndroidRuntime: Shutting down VM


    --------- beginning of crash
2019-09-27 18:36:25.046 13800-13800/com.app.readyb E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.readyb, PID: 13800
    java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
        at com.app.readyb.diegocarloslima.fgelv.lib.FloatingGroupExpandableListView.dispatchDraw(FloatingGroupExpandableListView.java:195)
        at android.view.View.draw(View.java:21439)
        at android.widget.AbsListView.draw(AbsListView.java:4388)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21439)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1765)
        at android.view.View.draw(View.java:21439)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1765)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1256)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at androidx.drawerlayout.widget.DrawerLayout.drawChild(DrawerLayout.java:1426)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21439)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20304)
        at android.view.View.draw(View.java:21168)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21439)
        at com.android.internal.policy.DecorView.draw(DecorView.java:806)
        at android.view.View.updateDisplayListIfDirty(View.java:20313)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:575)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:581)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:654)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3610)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3418)
2019-09-27 18:36:25.046 13800-13800/com.app.readyb E/AndroidRuntime:     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2755)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
        at android.view.Choreographer.doCallbacks(Choreographer.java:790)
        at android.view.Choreographer.doFrame(Choreographer.java:725)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Как я могу разрешить доступ к интерфейсам не-SDK?

Это невозможно.

Исправьте библиотеку, чтобы она не пыталась использовать это скрытое поле.Поскольку библиотека не обновлялась в течение пяти лет, маловероятно, что первоначальный разработчик решит проблему.

Или найдите заменяющую библиотеку и используйте ее.

Или создайте свою собственнуюзамена интерфейса.

0 голосов
/ 29 сентября 2019

В вашем коде нет ничего плохого, но вы используете библиотеку , не обновленную для Android 10 с Target SDK KitKat (API 19), поэтому она действительно устарела.Вам нужно заменить эту библиотеку чем-то более обновленным и основанным на RecyclerView.

...