When I try to use Custom Keyboard got an exception on Android P Beta, everything is working fine until Android Oreo but recently got a crash. Just try to figure out which class might be responsible for the exception. Currently unable to access complete custom keyboard code so not posting the code.
java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
at android.graphics.Canvas.checkValidClipOp(Canvas.java:779)
at android.graphics.Canvas.clipRect(Canvas.java:826)
at android.inputmethodservice.KeyboardView.onBufferDraw(KeyboardView.java:666)
at android.inputmethodservice.KeyboardView.onDraw(KeyboardView.java:647)
at android.view.View.draw(View.java:20205)
at android.view.View.updateDisplayListIfDirty(View.java:19080)
at android.view.View.draw(View.java:19933)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20208)
at android.view.View.updateDisplayListIfDirty(View.java:19080)
at android.view.View.draw(View.java:19933)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.updateDisplayListIfDirty(View.java:19071)
at android.view.View.draw(View.java:19933)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.updateDisplayListIfDirty(View.java:19071)
at android.view.View.draw(View.java:19933)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.updateDisplayListIfDirty(View.java:19071)
at android.view.View.draw(View.java:19933)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.updateDisplayListIfDirty(View.java:19071)
at android.view.View.draw(View.java:19933)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20208)
at com.android.internal.policy.DecorView.draw(DecorView.java:784)
at android.view.View.updateDisplayListIfDirty(View.java:19080)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:685)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:691)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:799)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3259)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3075)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2455)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1443)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7125)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:935)
at android.view.Choreographer.doCallbacks(Choreographer.java:747)
at android.view.Choreographer.doFrame(Choreographer.java:682)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:921)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6649)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)
It actually tells you the reason:
The reason is written here:
So you either have to use lower targetSdk version (which you shouldn't, because Google will force you to use at least 26 it by the end of the year), or you fix it by using your clipping via the canvas in a different way.
I've asked a question about it here, of what's the alternative.