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 b1b38f294..94f21db80 100644 --- a/app/src/main/java/com/fongmi/android/tv/App.java +++ b/app/src/main/java/com/fongmi/android/tv/App.java @@ -2,7 +2,6 @@ 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; @@ -16,7 +15,6 @@ 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; @@ -75,12 +73,6 @@ 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/tvbus/src/main/java/com/tvbus/engine/PmsHook.java b/tvbus/src/main/java/com/tvbus/engine/PmsHook.java index 9b703aa3c..1bb4a05ee 100644 --- a/tvbus/src/main/java/com/tvbus/engine/PmsHook.java +++ b/tvbus/src/main/java/com/tvbus/engine/PmsHook.java @@ -19,11 +19,17 @@ public class PmsHook implements InvocationHandler { private String name; private Object base; - public static void inject(Context context) { - new PmsHook().hook(context); + public static void inject() { + new PmsHook().hook(); } - private void hook(Context context) { + 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"); @@ -31,6 +37,7 @@ public class PmsHook implements InvocationHandler { Field sPackageManagerField = activityThreadClass.getDeclaredField("sPackageManager"); Object currentActivityThread = currentActivityThreadMethod.invoke(null); sPackageManagerField.setAccessible(true); + Context context = getCtx(); this.sign = getSign(context); this.name = context.getPackageName(); this.base = sPackageManagerField.get(currentActivityThread); diff --git a/tvbus/src/main/java/com/tvbus/engine/TVCore.java b/tvbus/src/main/java/com/tvbus/engine/TVCore.java index 14b510066..144b1d522 100644 --- a/tvbus/src/main/java/com/tvbus/engine/TVCore.java +++ b/tvbus/src/main/java/com/tvbus/engine/TVCore.java @@ -8,6 +8,7 @@ public class TVCore { public TVCore() { try { + PmsHook.inject(); System.loadLibrary("tvcore"); handle = initialise(); } catch (Throwable ignored) {