diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java index ff53ab74f..6c6c8b2c8 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java @@ -14,6 +14,8 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; +import dalvik.system.DexClassLoader; + public class BaseLoader { private final JarLoader jarLoader; @@ -82,6 +84,10 @@ public class BaseLoader { jarLoader.parseJar(Util.md5(jar), jar); } + public DexClassLoader dex(String jar) { + return jarLoader.dex(jar); + } + public JSONObject jsonExt(String key, LinkedHashMap jxs, String url) throws Throwable { return jarLoader.jsonExt(key, jxs, url); } diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java index 3c4398600..0bd9c4101 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java @@ -101,7 +101,7 @@ public class JarLoader { } } - public DexClassLoader getLoader(String jar) { + public DexClassLoader dex(String jar) { try { String jaKey = Util.md5(jar); if (!loaders.containsKey(jaKey)) parseJar(jaKey, jar); diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java index 9ba45c575..de503a8c4 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java @@ -10,17 +10,14 @@ import java.util.concurrent.ConcurrentHashMap; public class JsLoader { private final ConcurrentHashMap spiders; - private final JarLoader jarLoader; private String recent; public JsLoader() { - jarLoader = new JarLoader(); spiders = new ConcurrentHashMap<>(); } public void clear() { for (Spider spider : spiders.values()) App.execute(spider::destroy); - jarLoader.clear(); spiders.clear(); } @@ -31,7 +28,7 @@ public class JsLoader { public Spider getSpider(String key, String api, String ext, String jar) { try { if (spiders.containsKey(key)) return spiders.get(key); - Spider spider = new com.fongmi.quickjs.crawler.Spider(key, api, jarLoader.getLoader(jar)); + Spider spider = new com.fongmi.quickjs.crawler.Spider(key, api, BaseLoader.get().dex(jar)); spider.init(App.get(), ext); spiders.put(key, spider); return spider; diff --git a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java index 9d7b8be02..93d4df639 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java @@ -14,14 +14,12 @@ import com.github.catvod.utils.Json; import com.github.catvod.utils.UriUtil; import com.github.catvod.utils.Util; import com.whl.quickjs.wrapper.JSArray; -import com.whl.quickjs.wrapper.JSMethod; import com.whl.quickjs.wrapper.JSObject; import com.whl.quickjs.wrapper.QuickJSContext; import org.json.JSONArray; import java.io.ByteArrayInputStream; -import java.lang.reflect.Method; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -178,47 +176,14 @@ public class Spider extends com.github.catvod.crawler.Spider { private void createDex() { try { - JSObject obj = ctx.createNewJSObject(); - Class clz = dex.loadClass("com.github.catvod.js.Method"); - Class[] classes = clz.getDeclaredClasses(); - ctx.getGlobalObject().setProperty("jsapi", obj); - if (classes.length == 0) invokeSingle(clz, obj); - if (classes.length >= 1) invokeMultiple(clz, obj); + if (dex == null) return; + Class clz = dex.loadClass("com.github.catvod.js.Function"); + clz.getDeclaredConstructor(QuickJSContext.class).newInstance(ctx); } catch (Throwable e) { e.printStackTrace(); } } - private void invokeSingle(Class clz, JSObject jsObj) throws Throwable { - invoke(clz, jsObj, clz.getDeclaredConstructor(QuickJSContext.class).newInstance(ctx)); - } - - private void invokeMultiple(Class clz, JSObject jsObj) throws Throwable { - for (Class subClz : clz.getDeclaredClasses()) { - Object javaObj = subClz.getDeclaredConstructor(clz).newInstance(clz.getDeclaredConstructor(QuickJSContext.class).newInstance(ctx)); - JSObject subObj = ctx.createNewJSObject(); - invoke(subClz, subObj, javaObj); - jsObj.setProperty(subClz.getSimpleName(), subObj); - } - } - - private void invoke(Class clz, JSObject jsObj, Object javaObj) { - for (Method method : clz.getMethods()) { - if (!method.isAnnotationPresent(JSMethod.class)) continue; - invoke(jsObj, method, javaObj); - } - } - - private void invoke(JSObject jsObj, Method method, Object javaObj) { - jsObj.setProperty(method.getName(), args -> { - try { - return method.invoke(javaObj, args); - } catch (Throwable e) { - return null; - } - }); - } - private void createObj() { String spider = "__JS_SPIDER__"; String global = "globalThis." + spider;