package Ġcom . fe els cha otic . sdk hot fix . sdk . patch Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Base 6 4 Ċ import Ġcom . alibaba . fastjson . JSON Ċ import Ġcom . me it uan . rob ust . Patch Ċ import Ġcom . me it uan . rob ust . Patch Manip ulate Ċ import Ġcom . fe els cha otic . crypto . crypto . AES Util Ċ import Ġcom . fe els cha otic . crypto . crypto . Encrypt Manager Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . Hot fix Manager Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . const . Const Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . entity . Check Version Resp Data Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . service . Respond Listener Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . service . Service Manager Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . statistics . Statistics Constants Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . statistics . Statistics Manager Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . utils . Byte Util Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . utils . Log Utils Ċ import Ġcom . fe els cha otic . sdk hot fix . sdk . utils . PP Share Preference Helper Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ /** Ċ Ġ* Ġ è¡¥ ä¸ ģ ç®¡çĲĨ ç±» Ċ Ġ* Ċ Ġ* Ġ ç»§æī¿ Patch Manip ulate å®ŀçİ° è¡¥ ä¸ ģ åĬłè½½ çŃĸçķ¥ Ċ Ġ* Ġåľ¨ è¿Ļä¸ª ç±» ä¸Ń è´Ł è´£ è¡¥ ä¸ ģ çļĦ ä¸ĭè½½ ãĢģ æł¡éªĮ åĴĮ ä½¿çĶ¨ çŃĸçķ¥ çŃī Ċ Ġ* Ġ@ author Ġfeels cha otic Ċ Ġ* Ġ@ create Ġ 2 0 1 9 / 6 / 4 . Ċ Ġ*/ Ċ Ċ class ĠPatch Manip ulate Imp ( private Ġval Ġm Patch Info : ĠCheck Version Resp Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Local Type : ĠInt ) Ġ: ĠPatch Manip ulate () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ ONLY _ LOAD _ LOCAL Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ FROM _ SERVER Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠIMP L _ CLASS _ FULL _ NAME Ġ= Ġ" com . fe els cha otic . sdk hot fix . sdk . Patch Manip ulate Imp . Pat ches Info Impl " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" sdk - patch " ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠP ATCH _ LOCAL _ PATH : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠP ATCH _ CACHE _ PATH : ĠString ĊĠĠĠ Ġprivate Ġval ĠP ATCH _ NAME Ġ= Ġ" patch . jar " ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ä½¿çĶ¨ ç§ģ æľī çĽ®å½ķ æĹł éľĢ æĿĥéĻĲ ĊĠĠĠĠĠĠĠ ĠP ATCH _ LOCAL _ PATH Ġ= Ġcontext . files Dir . absolute Path Ġ+ ĠFile . separator Ġ+ ĠHot fix Manager . config . packageName Ġ+ ĠFile . separator Ġ+ ĠHot fix Manager . config . app Version ĊĠĠĠĠĠĠĠ ĠP ATCH _ CACHE _ PATH Ġ= Ġcontext . cacheDir . absolute Path Ġ+ ĠFile . separator Ġ+ ĠHot fix Manager . config . packageName Ġ+ ĠFile . separator Ġ+ ĠHot fix Manager . config . app Version ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľįåĬ¡åĻ¨ åºĶè¯¥ è¿ĶåĽŀ çļĦæķ°æį® åĮħæĭ¬ è¡¥ ä¸ ģ æĸĩä»¶çļĦ ä¸ĭè½½ éĵ¾æİ¥ ãĢģ è¡¥ ä¸ ģ çļĦ md 5 ãĢģ è¡¥ ä¸ ģ çļĦ ç¼ĸåı· çŃī ä¿¡æģ¯ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġ èģĶ ç½ĳ èİ·åıĸ è¡¥ ä¸ ģ åĪĹè¡¨ ï¼Į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfetch Patch List ( context : ĠContext ): ĠList < Patch >? Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġpatches : ĠMutable List < Patch > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Only From Local ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Patch ToList ( m Patch Info . patch Path , Ġpatches ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpatches ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġload From Server ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸ĭè½½ æľįåĬ¡ ç«¯ çļĦ è¡¥ ä¸ ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload From Server ( context : ĠContext ): ĠList < Patch > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpatches Ġ= Ġmutable ListOf < Patch >() ĊĠĠĠĠĠĠĠ Ġ// Ġ çĶ±äºİ æĺ¯ å¼ĤæŃ¥ çļĦ ç½ĳç»ľ ä¸ĭè½½ è¡¥ ä¸ ģ ï¼Į æīĢä»¥ ä½¿çĶ¨ Count DownLatch è¿Ľè¡Į åĲĮæŃ¥ ĊĠĠĠĠĠĠĠ Ġval Ġm Count DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ ĠService Manager . download Patch ( m Patch Info . patch File , ĠP ATCH _ LOCAL _ PATH , ĠP ATCH _ NAME , Ġobject Ġ: ĠRespond Listener < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Manager . track ( Statistics Constants . Event Code . CODE _ DOWNLOAD _ SUCCESS , Ġm Patch Info . bundle url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" ä¸ĭè½½ è¡¥ ä¸ ģ æĪĲåĬŁ ï¼Į response :$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Patch Info . patch Path Ġ= Ġresponse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHot fix Manager . getApplication ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPP Share Preference Helper . putString ( it , ĠConst . SP _ KEY _ PATCH _ INFO , ĠJSON . toJSON String ( m Patch Info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHot fix Manager . notify Patch Updated () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Patch Info . patch Can Load ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Patch ToList ( m Patch Info . patch Path , Ġpatches ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Count DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Manager . track ( Statistics Constants . Event Code . CODE _ DOWNLOAD _ ERROR , Ġm Patch Info . bundle url , Ġnull , Ġe . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" ä¸ĭè½½ è¡¥ ä¸ ģ å¤±è´¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . print Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Count DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĺ» å¡ŀ çŃīå¾ħ ç½ĳç»ľ è¯·æ±Ĥ ç»ĵæĿŁ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Count DownLatch . await () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . print Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpatches ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Only From Local (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Local Type Ġ== ĠTYPE _ ONLY _ LOAD _ LOCAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĬ Ĭ è¡¥ ä¸ ģ ä¿¡æģ¯ å¡« åħħ åĪ° åĪĹè¡¨ ä¸Ń ĊĠĠĠĠ Ġ* Ġ@ param Ġpatch Path ĊĠĠĠĠ Ġ* Ġ@ param Ġpatches ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Patch ToList ( patch Path : ĠString , Ġpatches : ĠMutable List < Patch >) Ġ{ ĊĠĠĠĠĠĠĠ ĠStatistics Manager . track ( Statistics Constants . Event Code . CODE _ DECODE , Ġnull , Ġnull , Ġm Patch Info . p Key ) ĊĠĠĠĠĠĠĠ Ġ// è§£ å¯Ĩ ä¸ĭ åıĳ çļĦ åĬłå¯Ĩ è¡¥ ä¸ ģ ĊĠĠĠĠĠĠĠ Ġval Ġp Key Ġ= Ġm Patch Info . p Key ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Key Ġ= ĠEncrypt Manager . getInstance (). decrypt By R sa PrivateKey ( Base 6 4 . decode ( p Key , ĠBase 6 4 . NO _ WRAP )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Bytes Ġ= ĠByte Util . file ToBytes ( patch Path ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Bytes Ġ= ĠAES Util . decrypt By Aes ( file Bytes , Ġdecrypt Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByte Util . bytes ToFile ( decrypt Bytes , ĠP ATCH _ CACHE _ PATH , Ġ" patch _ temp . jar ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" ãĢĲ èŃ¦ åĳĬ ãĢĳ è§£ å¯Ĩ å¤±è´¥ ï¼ģï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . print Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Manager . track ( Statistics Constants . Event Code . CODE _ DECODE _ ERROR , Ġnull , Ġnull , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġpatch File Ġ= ĠFile ( patch Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( patch File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Manager . track ( Statistics Constants . Event Code . CODE _ DECODE _ SUCCESS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpatch Ġ= ĠPatch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch . name Ġ= Ġreplace Jar Suffix ( patch File . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġlocal Path è®¾ç½® è¡¥ ä¸ ģ çļĦ åİŁå§ĭ è·¯å¾Ħ ï¼Į è¿Ļä¸ª è·¯å¾Ħ åŃĺåĤ¨ çļĦ è¡¥ ä¸ ģ æĺ¯ åĬłå¯Ĩ è¿ĩ çļĦ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġtemp Path åŃĺåĤ¨ è§£ å¯Ĩ ä¹ĭåĲİ çļĦ è¡¥ ä¸ ģ ï¼Į æĺ¯ åı¯ä»¥ æī§è¡Į çļĦ jar æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġtemp Path ä¸ĭçļĦ è¡¥ ä¸ ģ åĬłè½½ å®Į ç«ĭ åį³ åĪłéĻ¤ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch . local Path Ġ= Ġreplace Jar Suffix ( patch File . path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch . temp Path Ġ= ĠP ATCH _ CACHE _ PATH Ġ+ ĠFile . separator Ġ+ Ġreplace Jar Suffix ( PATCH _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" è§£ å¯Ĩ åĲİ è¡¥ ä¸ ģ ï¼ļ" Ġ+ Ġpatch . temp Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch . patches Info Impl Class FullName Ġ= ĠIMP L _ CLASS _ FULL _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatches . add ( patch ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Manager . track ( Statistics Constants . Event Code . CODE _ BEGIN _ PATCH , Ġm Patch Info . bundle version . toString (), Ġpatch Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" è¡¥ ä¸ ģ åŃĺåľ¨ ï¼ļ $ patch Path ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" è¡¥ ä¸ ģ ä¸įåŃĺåľ¨ ï¼ļ $ patch Path ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreplace Jar Suffix ( str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstr . replace (". jar ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify Patch ( context : ĠContext , Ġpatch : ĠPatch ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġensure Patch Exist ( patch : ĠPatch ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ