package com.lody.virtual.client.hook.base; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import com.lody.virtual.client.VClientImpl; import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.helper.utils.ComponentUtils; import com.lody.virtual.os.VUserHandle; import java.lang.reflect.Method; /** * @author Lody */ public abstract class MethodProxy { private boolean enable = true; private LogInvocation.Condition mInvocationLoggingCondition = LogInvocation.Condition.NEVER; // Inherit public MethodProxy() { LogInvocation loggingAnnotation = getClass().getAnnotation(LogInvocation.class); if (loggingAnnotation != null) { this.mInvocationLoggingCondition = loggingAnnotation.value(); } } public static String getHostPkg() { return VirtualCore.get().getHostPkg(); } protected static Context getHostContext() { return VirtualCore.get().getContext(); } protected static boolean isAppProcess() { return VirtualCore.get().isVAppProcess(); } protected static boolean isServerProcess() { return VirtualCore.get().isServerProcess(); } protected static boolean isMainProcess() { return VirtualCore.get().isMainProcess(); } protected static int getVUid() { return VClientImpl.get().getVUid(); } protected static int getAppUserId() { return VUserHandle.getUserId(getVUid()); } protected static int getBaseVUid() { return VClientImpl.get().getBaseVUid(); } protected static int getRealUid() { return VirtualCore.get().myUid(); } public static boolean isVisiblePackage(ApplicationInfo info) { return getHostPkg().equals(info.packageName) || ComponentUtils.isSystemApp(info) || VirtualCore.get().isOutsidePackageVisible(info.packageName); } public abstract String getMethodName(); public boolean beforeCall(Object who, Method method, Object... args) { return true; } public Object call(Object who, Method method, Object... args) throws Throwable { return method.invoke(who, args); } public Object afterCall(Object who, Method method, Object[] args, Object result) throws Throwable { return result; } public boolean isEnable() { return enable; } public void setEnable(boolean enable) { this.enable = enable; } public LogInvocation.Condition getInvocationLoggingCondition() { return mInvocationLoggingCondition; } public void setInvocationloggingCondition(LogInvocation.Condition invocationLoggingCondition) { mInvocationLoggingCondition = invocationLoggingCondition; } public boolean isAppPkg(String pkg) { return VirtualCore.get().isAppInstalled(pkg); } protected PackageManager getPM() { return VirtualCore.getPM(); } @Override public String toString() { return "Method : " + getMethodName(); } }