diff --git a/app/src/main/java/com/fongmi/android/tv/App.java b/app/src/main/java/com/fongmi/android/tv/App.java index 94f21db80..b1b38f294 100644 --- a/app/src/main/java/com/fongmi/android/tv/App.java +++ b/app/src/main/java/com/fongmi/android/tv/App.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv; import android.app.Activity; import android.app.Application; +import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -15,6 +16,7 @@ import com.fongmi.android.tv.utils.Prefers; import com.github.catvod.bean.Doh; import com.github.catvod.net.OkHttp; import com.google.gson.Gson; +import com.tvbus.engine.PmsHook; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -73,6 +75,12 @@ public class App extends Application { this.activity = activity; } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + PmsHook.inject(base); + } + @Override public void onCreate() { super.onCreate(); diff --git a/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java b/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java index ce0a1d5a4..441b67ed4 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java +++ b/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java @@ -21,7 +21,7 @@ public class TVBus implements Listener { } private void init(Core core) { - tvcore = TVCore.get(); + tvcore = new TVCore(); tvcore.auth(core.getAuth()).broker(core.getBroker()); tvcore.name(core.getName()).pass(core.getPass()); tvcore.serv(0).play(8902).mode(1).listener(this); diff --git a/tvbus/src/main/java/com/tvbus/engine/PmsHook.java b/tvbus/src/main/java/com/tvbus/engine/PmsHook.java index a3dc425a3..9b703aa3c 100644 --- a/tvbus/src/main/java/com/tvbus/engine/PmsHook.java +++ b/tvbus/src/main/java/com/tvbus/engine/PmsHook.java @@ -19,17 +19,11 @@ public class PmsHook implements InvocationHandler { private String name; private Object base; - public static void inject() { - new PmsHook().hook(); + public static void inject(Context context) { + new PmsHook().hook(context); } - private Context getContext() throws Throwable { - Class activityThreadClass = Class.forName("android.app.ActivityThread"); - Method method = activityThreadClass.getMethod("currentApplication"); - return (Context) method.invoke(null); - } - - private void hook() { + private void hook(Context context) { try { Class activityThreadClass = Class.forName("android.app.ActivityThread"); Class iPackageManagerInterface = Class.forName("android.content.pm.IPackageManager"); @@ -37,12 +31,12 @@ public class PmsHook implements InvocationHandler { Field sPackageManagerField = activityThreadClass.getDeclaredField("sPackageManager"); Object currentActivityThread = currentActivityThreadMethod.invoke(null); sPackageManagerField.setAccessible(true); - this.sign = getSign(getContext()); - this.name = getContext().getPackageName(); + this.sign = getSign(context); + 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 = getContext().getPackageManager(); + PackageManager pm = context.getPackageManager(); Field mPmField = pm.getClass().getDeclaredField("mPM"); mPmField.setAccessible(true); mPmField.set(pm, proxy); diff --git a/tvbus/src/main/java/com/tvbus/engine/TVCore.java b/tvbus/src/main/java/com/tvbus/engine/TVCore.java index 5101b1c48..14b510066 100644 --- a/tvbus/src/main/java/com/tvbus/engine/TVCore.java +++ b/tvbus/src/main/java/com/tvbus/engine/TVCore.java @@ -6,17 +6,8 @@ public class TVCore { private long handle; - private static class Loader { - static volatile TVCore INSTANCE = new TVCore(); - } - - public static TVCore get() { - return Loader.INSTANCE; - } - public TVCore() { try { - PmsHook.inject(); System.loadLibrary("tvcore"); handle = initialise(); } catch (Throwable ignored) {