HookFactory.java 源代码
package com.x8zs.morgoo.droidplugin.hook;
import android.app.Application;
import android.content.Context;
import com.x8zs.morgoo.droidplugin.hook.proxy.IActivityManagerHook;
import com.x8zs.morgoo.droidplugin.hook.proxy.IPackageManagerHook;
import com.x8zs.morgoo.droidplugin.hook.xhook.SQLiteDatabaseHook;
import com.x8zs.morgoo.helper.Log;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class HookFactory {
private static HookFactory sInstance;
private List<Hook> mHookList = new ArrayList(3);
private HookFactory() {
}
public static HookFactory getInstance() {
synchronized (HookFactory.class) {
if (sInstance == null) {
sInstance = new HookFactory();
}
}
return sInstance;
}
public void installHook(Hook hook, ClassLoader classLoader) {
try {
hook.onInstall(classLoader);
synchronized (this.mHookList) {
this.mHookList.add(hook);
}
} catch (Throwable th) {
Log.e(Log.TAG, "installHook %s error", th, hook);
}
}
public final void onCallApplicationOnCreate(Context context, Application application) {
installHook(new SQLiteDatabaseHook(context), application.getClassLoader());
}
public void setHookEnable(boolean z6) {
synchronized (this.mHookList) {
Iterator<Hook> it = this.mHookList.iterator();
while (it.hasNext()) {
it.next().setEnable(z6);
}
}
}
public void setHookEnable(boolean z6, boolean z7) {
synchronized (this.mHookList) {
Iterator<Hook> it = this.mHookList.iterator();
while (it.hasNext()) {
it.next().setEnable(z6, z7);
}
}
}
public final void installHook(Context context, ClassLoader classLoader) {
Log.e(Log.TAG, "%s", "installHook call");
installHook(new IActivityManagerHook(context), classLoader);
installHook(new IPackageManagerHook(context), classLoader);
}
public void setHookEnable(Class cls, boolean z6) {
synchronized (this.mHookList) {
for (Hook hook : this.mHookList) {
if (cls.isInstance(hook)) {
hook.setEnable(z6);
}
}
}
}
}