content: package com.topjohnwu.magisk;
  
  import android.content.Context;
  import android.content.ContextWrapper;
  import android.content.pm.PackageInfo;
  import android.content.pm.PackageManager;
  import android.util.Log;
  
  import java.io.File;
  import java.lang.reflect.Constructor;
  
  public class DelegateRootService extends ContextWrapper {
  
      public DelegateRootService() {
          super(null);
      }
  
      @Override
      protected void attachBaseContext(Context base) {
          ClassLoader loader = DynLoad.loadApk(base);
          if (loader == null)
              return;
  
          try {
              // Create application to get the real root service class
              var data = DynLoad.createApkData();
              File apk = StubApk.current(base);
              PackageManager pm = base.getPackageManager();
              PackageInfo pkgInfo = pm.getPackageArchiveInfo(apk.getPath(), 0);
              loader.loadClass(pkgInfo.applicationInfo.className)
                      .getConstructor(Object.class)
                      .newInstance(data.getObject());
  
              // Create the actual RootService and call its attachBaseContext
              Constructor<?> ctor = data.getRootService().getConstructor(Object.class);
              ctor.setAccessible(true);
              Object service = ctor.newInstance(this);
              DynLoad.attachContext(service, base);
          } catch (Exception e) {
              Log.e(DelegateRootService.class.getSimpleName(), "", e);
          }
      }
  }
  