pull/585/head
FongMi 1 year ago
parent fd90a6a186
commit 6f8a4febcc
  1. 6
      app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java
  3. 5
      app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java
  4. 41
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.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<String, String> jxs, String url) throws Throwable {
return jarLoader.jsonExt(key, jxs, url);
}

@ -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);

@ -10,17 +10,14 @@ import java.util.concurrent.ConcurrentHashMap;
public class JsLoader {
private final ConcurrentHashMap<String, Spider> 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;

@ -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;

Loading…
Cancel
Save