leakcanary icon indicating copy to clipboard operation
leakcanary copied to clipboard

Crash in object-watcher with Android TV

Open drubio-izzi opened this issue 4 months ago • 0 comments

Description

We've detected thousands of instances of a crash in production code that seems to come from object-watcher (which according to the documentation should be safe to include in releases).

Stack trace:

Fatal Exception: java.lang.SecurityException: Permission Denial: android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from __REDACTED__ (pid=23464, uid=10020) requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS.
       at android.os.Parcel.createExceptionOrNull(Parcel.java:2448)
       at android.os.Parcel.createException(Parcel.java:2432)
       at android.os.Parcel.readException(Parcel.java:2415)
       at android.os.Parcel.readException(Parcel.java:2357)
       at android.app.IActivityManager$Stub$Proxy.closeSystemDialogs(IActivityManager.java:7617)
       at java.lang.reflect.Method.invoke(Method.java)
       at leakcanary.ServiceWatcher$install$4$2.invoke(ServiceWatcher.kt:93)
       at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
       at $Proxy3.closeSystemDialogs()
       at com.android.internal.policy.PhoneWindow.sendCloseSystemWindows(PhoneWindow.java:3791)
       at com.android.internal.policy.PhoneFallbackEventHandler.sendCloseSystemWindows(PhoneFallbackEventHandler.java:323)
       at com.android.internal.policy.PhoneFallbackEventHandler.onKeyDown(PhoneFallbackEventHandler.java:181)
       at com.android.internal.policy.PhoneFallbackEventHandler.dispatchKeyEvent(PhoneFallbackEventHandler.java:74)
       at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6320)
       at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6144)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5626)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
       at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5814)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
       at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5871)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
       at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5847)
       at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6005)
       at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3263)
       at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2827)
       at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2818)
       at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3240)
       at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:335)
       at android.os.Looper.loopOnce(Looper.java:161)
       at android.os.Looper.loop(Looper.java:288)
       at android.app.ActivityThread.main(ActivityThread.java:7839)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

Caused by android.os.RemoteException: Remote stack trace:
	at com.android.server.wm.ActivityTaskManagerService.checkCanCloseSystemDialogs(ActivityTaskManagerService.java:2965)
	at com.android.server.wm.ActivityTaskManagerService.access$900(ActivityTaskManagerService.java:295)
	at com.android.server.wm.ActivityTaskManagerService$LocalService.checkCanCloseSystemDialogs(ActivityTaskManagerService.java:5320)
	at com.android.server.wm.ActivityTaskManagerService$LocalService.closeSystemDialogs(ActivityTaskManagerService.java:5794)
	at com.android.server.am.ActivityManagerService.closeSystemDialogs(ActivityManagerService.java:3847)

Steps to Reproduce

No repro steps yet.

Expected behavior: No crashes

Version Information

  • LeakCanary version: 2.14
  • Android OS version: Android 12 (Android TV)
  • Gradle version: 8.13

Additional Information

The app is an AndroidTV launcher with system privileges (Operator Tier). The crash has been reported from two different certified devices.

drubio-izzi avatar Sep 05 '25 11:09 drubio-izzi