package Ġcom . did ich ux ing . d ora emon kit . kit . gps mock Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . I Interface Ċ import Ġcom . did ich ux ing . d ora emon kit . util . Log Helper Ċ import Ġcom . did ich ux ing . d ora emon kit . util . Reflect Utils Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . lang . reflect . Method Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġw ang lik un Ġon Ġ 2 0 1 9 / 4 / 2 Ċ Ġ*/ Ċ abstract Ġclass ĠBase Service Hook er Ġ: ĠInvocation Handler Ġ{ ĊĊĊĠĠĠ Ġvar ĠTAG Ġ= Ġthis . java Class . simple Name ĊĊĠĠĠ Ġvar Ġm Hook Methods : ĠMap < String , ĠMethod Handler > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Hook Methods Ġ= Ġregister Method Handlers () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľ¬åľ° Binder å¯¹è±¡ ( åĲĮ è¿Ľç¨ĭ ) æĪĸ è¿ľç¨ĭ Binder çļĦ ä»£çĲĨ å¯¹è±¡ ( è·¨ è¿Ľç¨ĭ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Binder Stub Proxy : ĠI Interface ? Ġ= Ġnull ĊĊĠĠĠ Ġabstract Ġfun ĠserviceName (): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ¨æĿ¥ åĪĿå§ĭåĮĸ m Binder Stub Proxy ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġstub Name (): ĠString ĊĊĠĠĠ Ġabstract Ġfun Ġregister Method Handlers (): ĠMap < String , ĠMethod Handler > ĊĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠNoSuch Field Exception :: class , ĊĠĠĠĠĠĠĠ ĠIllegal AccessException :: class , ĊĠĠĠĠĠĠĠ ĠClass NotFoundException :: class , ĊĠĠĠĠĠĠĠ ĠNoSuch Method Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvocation TargetException :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġabstract Ġfun Ġreplace Binder Proxy ( context : ĠContext , Ġproxy : ĠI Binder ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġproxy Ġ Ġ å°±æĺ¯ ä»£çĲĨ å¯¹è±¡ ï¼Į new Proxy Instance æĸ¹æ³ķ çļĦ è¿ĶåĽŀ å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod Ġ æĮĩ ä»£ çļĦæĺ¯ æĪĳä»¬ æīĢ è¦ģ è°ĥçĶ¨ çľŁ å®ŀ å¯¹è±¡çļĦ æŁĲä¸ª æĸ¹æ³ķ çļĦ Method å¯¹è±¡ ĊĠĠĠĠ Ġ* Ġ@ param Ġargs ĠĠ Ġ æĮĩ ä»£ çļĦæĺ¯ è°ĥçĶ¨ çľŁ å®ŀ å¯¹è±¡ æŁĲä¸ª æĸ¹æ³ķ æĹ¶ æİ¥åıĹ çļĦåıĤæķ° ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvocation TargetException ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegal AccessException ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch Field Exception ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch Method Exception ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠInvocation TargetException :: class , ĊĠĠĠĠĠĠĠ ĠIllegal AccessException :: class , ĊĠĠĠĠĠĠĠ ĠNoSuch Field Exception :: class , ĊĠĠĠĠĠĠĠ ĠNoSuch Method Exception :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny , Ġmethod : ĠMethod , Ġargs : ĠArray < Any >? ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Binder Stub Proxy Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ è¦ģ æĭ ¦ æĪª çļĦæĸ¹æ³ķ æĺ¯åĲ¦ å®ŀçİ° å·² æ³¨åĨĮ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Hook Methods . containsKey ( method . name ) Ġ&& Ġm Hook Methods [ method . name ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Hook Methods [ method . name ]?. on Invoke ( m Binder Stub Proxy !! , Ġmethod , Ġargs ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( m Binder Stub Proxy , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( m Binder Stub Proxy , Ġ* args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èİ·å¾Ĺ Ġnative ĠB inder Ġ Ġproxy ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbinder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġas Interface ( binder : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// I Interface Ġ åĮħåĲ« äºĨ IB inder çļĦ proxy Ġ å¹¶ å®ŀçİ° çĽ¸åºĶ çļĦ æİ¥åı£ èĥ½åĬĽ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binder Stub Proxy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflect Utils . reflect ( stub Name ()). method (" as Interface ", Ġbinder ). get < I Interface >() ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }