package com.lody.virtual.client.hook.patchs.am; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.IInterface; import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.client.hook.base.Hook; import com.lody.virtual.client.ipc.VActivityManager; import java.lang.reflect.Method; /** * @author Lody * * 原型: public int stopService(IApplicationThreadKitkat caller, Intent service, * String resolvedType, int userId) */ /* package */ class StopService extends Hook { @Override public String getName() { return "stopService"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { IInterface caller = (IInterface) args[0]; Intent intent = (Intent) args[1]; String resolvedType = (String) args[2]; intent.setDataAndType(intent.getData(), resolvedType); ComponentName componentName = intent.getComponent(); PackageManager pm = VirtualCore.getPM(); if (componentName == null) { ResolveInfo resolveInfo = pm.resolveService(intent, 0); if (resolveInfo != null && resolveInfo.serviceInfo != null) { componentName = new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name); } } if (componentName != null && !getHostPkg().equals(componentName.getPackageName())) { return VActivityManager.get().stopService(caller, intent, resolvedType); } return method.invoke(who, args); } @Override public boolean isEnable() { return isAppProcess() || isServerProcess(); } }