From 1e5f911441c3860422136972611b7427b7b5146b Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 13 Sep 2018 19:59:19 +0800 Subject: [PATCH] fix(autojs): AndroidClassLoader.defineClass() --- .../autojs/rhino/AndroidClassLoader.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java b/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java index ea52e262..0e9363bc 100644 --- a/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java +++ b/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java @@ -52,7 +52,7 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoa Log.d(LOG_TAG, "defineClass: name = " + name + " data.length = " + data.length); File classFile = null; try { - classFile = createTempClassFile(name); + classFile = generateTempClassFile(name, false); final ZipFile zipFile = new ZipFile(classFile); final ZipParameters parameters = new ZipParameters(); parameters.setFileNameInZip(name.replace('.', '/') + ".class"); @@ -68,10 +68,14 @@ 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"); - if (!file.exists()) { - file.createNewFile(); + if (create) { + if (!file.exists()) { + file.createNewFile(); + } + } else { + file.delete(); } return file; } @@ -79,7 +83,7 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoa public void loadJar(File jar) throws IOException { Log.d(LOG_TAG, "loadJar: jar = " + jar); 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 jarFile = new ZipFile(jar); //noinspection unchecked @@ -110,7 +114,7 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoa private DexClassLoader dexJar(File classFile) throws IOException { final Main.Arguments arguments = new Main.Arguments(); arguments.fileNames = new String[]{classFile.getPath()}; - File dexFile = createTempClassFile("dex-" + classFile.getPath()); + File dexFile = generateTempClassFile("dex-" + classFile.getPath(), true); arguments.outName = dexFile.getPath(); arguments.jarOutput = true; Main.run(arguments);