fix(autojs): AndroidClassLoader.defineClass()

This commit is contained in:
hyb1996
2018-09-13 19:59:19 +08:00
parent c41b3fcfe2
commit 1e5f911441

View File

@@ -52,7 +52,7 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoa
Log.d(LOG_TAG, "defineClass: name = " + name + " data.length = " + data.length); Log.d(LOG_TAG, "defineClass: name = " + name + " data.length = " + data.length);
File classFile = null; File classFile = null;
try { try {
classFile = createTempClassFile(name); classFile = generateTempClassFile(name, false);
final ZipFile zipFile = new ZipFile(classFile); final ZipFile zipFile = new ZipFile(classFile);
final ZipParameters parameters = new ZipParameters(); final ZipParameters parameters = new ZipParameters();
parameters.setFileNameInZip(name.replace('.', '/') + ".class"); parameters.setFileNameInZip(name.replace('.', '/') + ".class");
@@ -68,18 +68,22 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoa
} }
} }
private File createTempClassFile(String name) throws IOException { private File generateTempClassFile(String name, boolean create) throws IOException {
File file = new File(mCacheDir, name.hashCode() + System.currentTimeMillis() + ".jar"); File file = new File(mCacheDir, name.hashCode() + System.currentTimeMillis() + ".jar");
if (create) {
if (!file.exists()) { if (!file.exists()) {
file.createNewFile(); file.createNewFile();
} }
} else {
file.delete();
}
return file; return file;
} }
public void loadJar(File jar) throws IOException { public void loadJar(File jar) throws IOException {
Log.d(LOG_TAG, "loadJar: jar = " + jar); Log.d(LOG_TAG, "loadJar: jar = " + jar);
try { try {
final File classFile = new File(mCacheDir, jar.getPath().hashCode() + System.currentTimeMillis() + ".jar"); final File classFile = generateTempClassFile(jar.getPath(), false);
final ZipFile zipFile = new ZipFile(classFile); final ZipFile zipFile = new ZipFile(classFile);
final ZipFile jarFile = new ZipFile(jar); final ZipFile jarFile = new ZipFile(jar);
//noinspection unchecked //noinspection unchecked
@@ -110,7 +114,7 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoa
private DexClassLoader dexJar(File classFile) throws IOException { private DexClassLoader dexJar(File classFile) throws IOException {
final Main.Arguments arguments = new Main.Arguments(); final Main.Arguments arguments = new Main.Arguments();
arguments.fileNames = new String[]{classFile.getPath()}; arguments.fileNames = new String[]{classFile.getPath()};
File dexFile = createTempClassFile("dex-" + classFile.getPath()); File dexFile = generateTempClassFile("dex-" + classFile.getPath(), true);
arguments.outName = dexFile.getPath(); arguments.outName = dexFile.getPath();
arguments.jarOutput = true; arguments.jarOutput = true;
Main.run(arguments); Main.run(arguments);