From 5d4003a2c44f71a9c24ccc2828111367d1e5c4a3 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 8 Aug 2023 11:35:53 +0800 Subject: [PATCH] Clean code --- .../android/tv/ui/activity/HomeActivity.java | 2 +- .../android/tv/player/extractor/TVBus.java | 6 +- settings.gradle | 1 + .../main/java/com/tvbus/engine/PmsHook.java | 73 ------------------- .../main/java/com/tvbus/engine/TVCore.java | 16 ++-- 5 files changed, 14 insertions(+), 84 deletions(-) delete mode 100644 tvbus/src/main/java/com/tvbus/engine/PmsHook.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 879f7fa1f..295a2ccd0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -398,7 +398,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen WallConfig.get().clear(); LiveConfig.get().clear(); ApiConfig.get().clear(); - Source.get().exit(); Server.get().stop(); + Source.get().exit(); } } \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java index 34377b3cf..8346d8b26 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java @@ -19,11 +19,11 @@ public class TVBus implements Source.Extractor, Listener { } private void init(Core core) { - tvcore = new TVCore(core.getSo(), core.getSign()); + tvcore = new TVCore(core.getSign(), core.getSo()); tvcore.auth(core.getAuth()).broker(core.getBroker()); tvcore.name(core.getName()).pass(core.getPass()); tvcore.serv(0).play(8902).mode(1).listener(this); - tvcore.init(App.get()); + tvcore.init(); } @Override @@ -54,7 +54,7 @@ public class TVBus implements Source.Extractor, Listener { @Override public void exit() { - tvcore = null; + if (tvcore != null) System.exit(0); } @Override diff --git a/settings.gradle b/settings.gradle index 5735863d7..0466357f5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -20,6 +20,7 @@ dependencyResolutionManagement { } } include ':app' +include ':hook' include ':tvbus' include ':catvod' include ':pyramid' diff --git a/tvbus/src/main/java/com/tvbus/engine/PmsHook.java b/tvbus/src/main/java/com/tvbus/engine/PmsHook.java deleted file mode 100644 index c2cd471c5..000000000 --- a/tvbus/src/main/java/com/tvbus/engine/PmsHook.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.tvbus.engine; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.Signature; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -public class PmsHook implements InvocationHandler { - - private String sign; - private String name; - private Object base; - - private static class Loader { - static volatile PmsHook INSTANCE = new PmsHook(); - } - - public static PmsHook get() { - return Loader.INSTANCE; - } - - private PmsHook() { - hook(); - } - - public void inject(String sign) { - this.sign = sign; - } - - private Context getCtx() throws Throwable { - Class activityThreadClass = Class.forName("android.app.ActivityThread"); - Method method = activityThreadClass.getMethod("currentApplication"); - return (Context) method.invoke(null); - } - - private void hook() { - try { - Class activityThreadClass = Class.forName("android.app.ActivityThread"); - Class iPackageManagerInterface = Class.forName("android.content.pm.IPackageManager"); - Method currentActivityThreadMethod = activityThreadClass.getDeclaredMethod("currentActivityThread"); - Field sPackageManagerField = activityThreadClass.getDeclaredField("sPackageManager"); - Object currentActivityThread = currentActivityThreadMethod.invoke(null); - sPackageManagerField.setAccessible(true); - Context context = getCtx(); - this.name = context.getPackageName(); - this.base = sPackageManagerField.get(currentActivityThread); - Object proxy = Proxy.newProxyInstance(iPackageManagerInterface.getClassLoader(), new Class[]{iPackageManagerInterface}, this); - sPackageManagerField.set(currentActivityThread, proxy); - PackageManager pm = context.getPackageManager(); - Field mPmField = pm.getClass().getDeclaredField("mPM"); - mPmField.setAccessible(true); - mPmField.set(pm, proxy); - } catch (Throwable e) { - e.printStackTrace(); - } - } - - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if (!method.getName().equals("getPackageInfo")) return method.invoke(base, args); - String pkg = (String) args[0]; - Number flag = (Number) args[1]; - if (flag.intValue() != PackageManager.GET_SIGNATURES || !name.equals(pkg)) return method.invoke(base, args); - PackageInfo info = (PackageInfo) method.invoke(base, args); - info.signatures[0] = new Signature(sign); - return info; - } -} diff --git a/tvbus/src/main/java/com/tvbus/engine/TVCore.java b/tvbus/src/main/java/com/tvbus/engine/TVCore.java index d7a293946..36ccfab9d 100644 --- a/tvbus/src/main/java/com/tvbus/engine/TVCore.java +++ b/tvbus/src/main/java/com/tvbus/engine/TVCore.java @@ -2,16 +2,18 @@ package com.tvbus.engine; import android.content.Context; +import com.fongmi.hook.Hook; +import com.github.catvod.Init; import com.github.catvod.utils.Github; public class TVCore { private long handle; - public TVCore(String name, String sign) { + public TVCore(String sign, String so) { try { - PmsHook.get().inject(sign); - System.load(Github.getSo(name)); + Hook.pm(Init.context(), sign); + System.load(Github.getSo(so)); handle = initialise(); } catch (Throwable ignored) { } @@ -89,13 +91,13 @@ public class TVCore { } } - public void init(Context context) { - new Thread(() -> start(context)).start(); + public void init() { + new Thread(this::start).start(); } - private void start(Context context) { + private void start() { try { - init(handle, context); + init(handle, Init.context()); run(handle); } catch (Throwable ignored) { }