package com.topjohnwu.magisk; import android.content.Context; import android.content.ContextWrapper; import android.util.Log; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import io.michaelrocks.paranoid.Obfuscate; @Obfuscate public class DelegateRootService extends ContextWrapper { public DelegateRootService() { super(null); } @Override protected void attachBaseContext(Context base) { if (DynLoad.inject(base) == null) return; // Create the actual RootService and call its attachBaseContext try { Constructor ctor = DynLoad.apkData.getRootService().getConstructor(Object.class); ctor.setAccessible(true); Object service = ctor.newInstance(this); Method m = ContextWrapper.class.getDeclaredMethod("attachBaseContext", Context.class); m.setAccessible(true); m.invoke(service, base); } catch (Exception e) { Log.e(DelegateRootService.class.getSimpleName(), "", e); } } }