package Ġcn . j ess ie . runtime . app Ċ Ċ import Ġandroid . content . pm . Package Info Ċ import Ġandroid . content . res . Resources Ċ import Ġcn . j ess ie . J ess ie Ċ import Ġcn . j ess ie . program . Android Package Components Ċ import Ġcn . j ess ie . program . Dex Info Ċ import Ġcn . j ess ie . runtime . program . Abstract Program Ċ Ċ internal Ġobject ĠMy Program Ġ: ĠAbstract Program () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdelegate Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Process Name Ġ= ĠJ ess ie . current Program Process Name ĊĠĠĠĠĠĠĠ Ġrequire ( current Process Name . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġval Ġcolon Index Ġ= Ġcurrent Process Name . indexOf (": ") ĊĠĠĠĠĠĠĠ Ġval Ġcurrent PackageName Ġ= Ġif Ġ( colon Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Process Name ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Process Name . substring ( 0 , Ġcolon Index ) ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠLog dog . warn (""" Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent PackageName Ġ= Ġ$ current PackageName Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Process Name Ġ= Ġ$ current Process Name Ċ // ĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ ĠJ ess ie . get Program ( current PackageName ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠpackageName : ĠString Ġget () Ġ= Ġdelegate . packageName ĊĠĠĠ Ġoverride Ġval Ġclass Loader : ĠClassLoader Ġget () Ġ= Ġdelegate . class Loader ĊĠĠĠ Ġoverride Ġval Ġresources : ĠResources Ġget () Ġ= Ġdelegate . resources ĊĠĠĠ Ġoverride Ġval Ġpackage Info : ĠPackage Info Ġget () Ġ= Ġdelegate . package Info ĊĠĠĠ Ġoverride Ġval Ġdex Info : ĠDex Info Ġget () Ġ= Ġdelegate . dex Info ĊĠĠĠ Ġoverride Ġval Ġpackage Components : ĠAndroid Package Components Ġget () Ġ= Ġdelegate . package Components ĊĊĠĠĠ Ġoverride Ġfun Ġpreload () Ġ= Ġdelegate . preload () ĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ= Ġdelegate . start () ĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ= Ġdelegate . stop () Ċ }