Merge "Support additional dynamically linked library in plugins" into udc-dev

This commit is contained in:
Hawkwood Glazier
2023-04-28 18:00:49 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 6 deletions

View File

@@ -230,7 +230,7 @@ public class PluginInstance<T extends Plugin> implements PluginLifecycleManager
private ClassLoader getParentClassLoader(ClassLoader baseClassLoader) {
return new PluginManagerImpl.ClassLoaderFilter(
baseClassLoader, "com.android.systemui.plugin");
baseClassLoader, "com.android.systemui.log", "com.android.systemui.plugin");
}
/** Returns class loader specific for the given plugin. */

View File

@@ -248,19 +248,23 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
// This allows plugins to include any libraries or copied code they want by only including
// classes from the plugin library.
static class ClassLoaderFilter extends ClassLoader {
private final String mPackage;
private final String[] mPackages;
private final ClassLoader mBase;
public ClassLoaderFilter(ClassLoader base, String pkg) {
ClassLoaderFilter(ClassLoader base, String... pkgs) {
super(ClassLoader.getSystemClassLoader());
mBase = base;
mPackage = pkg;
mPackages = pkgs;
}
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
if (!name.startsWith(mPackage)) super.loadClass(name, resolve);
return mBase.loadClass(name);
for (String pkg : mPackages) {
if (name.startsWith(pkg)) {
return mBase.loadClass(name);
}
}
return super.loadClass(name, resolve);
}
}