Move things around

This commit is contained in:
topjohnwu 2022-05-22 19:36:47 -07:00
parent c8492b0c58
commit dfa36fb25d
4 changed files with 10 additions and 12 deletions

View File

@ -130,15 +130,12 @@ class StubClassLoader extends ClassLoader {
class DelegateClassLoader extends ClassLoader { class DelegateClassLoader extends ClassLoader {
// The active classloader
static ClassLoader cl = DelegateClassLoader.class.getClassLoader();
DelegateClassLoader() { DelegateClassLoader() {
super(null); super(null);
} }
@Override @Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
return cl.loadClass(name); return DynLoad.activeClassLoader.loadClass(name);
} }
} }

View File

@ -37,7 +37,7 @@ public class DelegateComponentFactory extends AppComponentFactory {
public Activity instantiateActivity(ClassLoader cl, String className, Intent intent) public Activity instantiateActivity(ClassLoader cl, String className, Intent intent)
throws ClassNotFoundException, IllegalAccessException, InstantiationException { throws ClassNotFoundException, IllegalAccessException, InstantiationException {
if (receiver != null) if (receiver != null)
return receiver.instantiateActivity(DelegateClassLoader.cl, className, intent); return receiver.instantiateActivity(DynLoad.activeClassLoader, className, intent);
return create(className, DownloadActivity.class); return create(className, DownloadActivity.class);
} }
@ -45,7 +45,7 @@ public class DelegateComponentFactory extends AppComponentFactory {
public BroadcastReceiver instantiateReceiver(ClassLoader cl, String className, Intent intent) public BroadcastReceiver instantiateReceiver(ClassLoader cl, String className, Intent intent)
throws ClassNotFoundException, IllegalAccessException, InstantiationException { throws ClassNotFoundException, IllegalAccessException, InstantiationException {
if (receiver != null) if (receiver != null)
return receiver.instantiateReceiver(DelegateClassLoader.cl, className, intent); return receiver.instantiateReceiver(DynLoad.activeClassLoader, className, intent);
return create(className, DummyReceiver.class); return create(className, DummyReceiver.class);
} }
@ -53,7 +53,7 @@ public class DelegateComponentFactory extends AppComponentFactory {
public Service instantiateService(ClassLoader cl, String className, Intent intent) public Service instantiateService(ClassLoader cl, String className, Intent intent)
throws ClassNotFoundException, IllegalAccessException, InstantiationException { throws ClassNotFoundException, IllegalAccessException, InstantiationException {
if (receiver != null) if (receiver != null)
return receiver.instantiateService(DelegateClassLoader.cl, className, intent); return receiver.instantiateService(DynLoad.activeClassLoader, className, intent);
return create(className, DummyService.class); return create(className, DummyService.class);
} }
@ -61,7 +61,7 @@ public class DelegateComponentFactory extends AppComponentFactory {
public ContentProvider instantiateProvider(ClassLoader cl, String className) public ContentProvider instantiateProvider(ClassLoader cl, String className)
throws ClassNotFoundException, IllegalAccessException, InstantiationException { throws ClassNotFoundException, IllegalAccessException, InstantiationException {
if (receiver != null) if (receiver != null)
return receiver.instantiateProvider(DelegateClassLoader.cl, className); return receiver.instantiateProvider(DynLoad.activeClassLoader, className);
return create(className, DummyProvider.class); return create(className, DummyProvider.class);
} }
@ -69,7 +69,7 @@ public class DelegateComponentFactory extends AppComponentFactory {
throws IllegalAccessException, InstantiationException { throws IllegalAccessException, InstantiationException {
try { try {
// noinspection unchecked // noinspection unchecked
return (T) DelegateClassLoader.cl.loadClass(name).newInstance(); return (T) DynLoad.activeClassLoader.loadClass(name).newInstance();
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
return fallback.newInstance(); return fallback.newInstance();
} }

View File

@ -59,7 +59,7 @@ public class DownloadActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (DelegateClassLoader.cl instanceof AppClassLoader) { if (DynLoad.activeClassLoader instanceof AppClassLoader) {
// For some reason activity is created before Application.attach(), // For some reason activity is created before Application.attach(),
// relaunch the activity using the same intent // relaunch the activity using the same intent
finishAffinity(); finishAffinity();

View File

@ -28,6 +28,7 @@ import io.michaelrocks.paranoid.Obfuscate;
public class DynLoad { public class DynLoad {
static Object componentFactory; static Object componentFactory;
static ClassLoader activeClassLoader = DynLoad.class.getClassLoader();
static StubApk.Data createApkData() { static StubApk.Data createApkData() {
var data = new StubApk.Data(); var data = new StubApk.Data();
@ -150,7 +151,7 @@ public class DynLoad {
delegate.receiver = (AppComponentFactory) factory; delegate.receiver = (AppComponentFactory) factory;
} }
DelegateClassLoader.cl = cl; activeClassLoader = cl;
// Send real application to attachBaseContext // Send real application to attachBaseContext
attachContext(app, context); attachContext(app, context);
@ -161,7 +162,7 @@ public class DynLoad {
apk.delete(); apk.delete();
} }
DelegateClassLoader.cl = new StubClassLoader(info); activeClassLoader = new StubClassLoader(info);
return null; return null;
} }