package me.ele.amigo.hook; import android.content.Context; import java.util.ArrayList; import java.util.List; import me.ele.amigo.utils.Log; public class HookFactory { private static final String TAG = HookFactory.class.getSimpleName(); private static final List<Hook> mHookList = new ArrayList<>(2); public static void install(Context context, ClassLoader cl) { installHook(new IActivityManagerHook(context), cl); installHook(new IPackageManagerHook(context), cl); } private static void installHook(Hook hook, ClassLoader cl) { synchronized (mHookList) { try { hook.onInstall(cl); mHookList.add(hook); } catch (Throwable throwable) { Log.e(TAG, "installHook %s error", throwable, hook); } } } public static void uninstallAllHooks(ClassLoader cl) { if (cl == null) { Log.e(TAG, "uninstallAllHooks: null classloader"); return; } synchronized (mHookList) { for (Hook hook : mHookList) { try { hook.onUnInstall(cl); } catch (Throwable throwable) { throw new RuntimeException(throwable); } } mHookList.clear(); } } }