package Ġcn . bine a . plugin framework demo . binder _ hook Ċ Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . util . Log Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Method Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġb ine a Ġon Ġ 3 / 1 0 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠB inder Hook Handler Kt ( base : ĠI Binder , Ġstub Class : ĠClass < Any >) Ġ: ĠInvocation Handler Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠB inder Hook Handler Kt :: class . java . canonical Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġobj Ġ= ĠAny () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġas Interface Method : ĠMethod Ġ= Ġstub Class . getDeclared Method (" as Interface ", ĠI Binder :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ= Ġas Interface Method . invoke ( null , Ġbase ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" hook ed Ġfailed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny ?, Ġmethod : ĠMethod ?, Ġargs : ĠArray < out ĠAny >? ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(" get Primary Clip " Ġ== Ġmethod !!. name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" hook Ġget Primary Clip ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClip Data . new Plain Text ( null , Ġ" you Ġhave Ġbeen Ġhook ed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(" has Primary Clip " Ġ== Ġmethod . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmethod . invoke ( obj , Ġargs ) ĊĠĠĠ Ġ} Ċ }