blob: 466055910369fe3d3090d31d1837237074eddcba [file] [log] [blame]
// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package classloader;
import java.lang.reflect.Method;
import dalvik.system.PathClassLoader;
// Command line application which take three arguments:
//
// Parent dex file
// Child dex file
// Main class name
//
// The application will create a classloader hierachy with the parent dex file above the
// system class loader, and the child dex file above the parent dex file. The it will load the
// Main class from the child dex file class loader and run its main method.
public class Runner {
public static void main(String[] args) throws Exception {
String parentFile = args[0];
String childFile = args[1];
String childClassName = args[2];
ClassLoader parentClassLoader =
new PathClassLoader(parentFile, ClassLoader.getSystemClassLoader());
ClassLoader childClassLoader = new PathClassLoader(childFile, parentClassLoader);
Class<?> childClass = childClassLoader.loadClass(childClassName);
runMain(childClass, new String[0]);
}
private static void runMain(Class<?> clazz, String[] args) throws Exception {
Method m = clazz.getMethod("main", String[].class);
m.invoke(null, new Object[] { args });
}
}