protected int getFakeUid() { return Process.myUid(); }
private static void fillInProcessInfo(ActivityManager.RunningAppProcessInfo processInfo) { processInfo.pid = Process.myPid(); processInfo.uid = Process.myUid(); }
public static void killAllOtherProcess(Context context) { final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (am == null) { return; } List<ActivityManager.RunningAppProcessInfo> appProcessList = am .getRunningAppProcesses(); if (appProcessList == null) { return; } // NOTE: getRunningAppProcess() ONLY GIVE YOU THE PROCESS OF YOUR OWN PACKAGE IN ANDROID M // BUT THAT'S ENOUGH HERE for (ActivityManager.RunningAppProcessInfo ai : appProcessList) { // KILL OTHER PROCESS OF MINE if (ai.uid == android.os.Process.myUid() && ai.pid != android.os.Process.myPid()) { android.os.Process.killProcess(ai.pid); } } }
public static void killProcessExceptMain(Context context) { final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (am == null) { return; } List<ActivityManager.RunningAppProcessInfo> appProcessList = am.getRunningAppProcesses(); if (appProcessList != null) { // NOTE: getRunningAppProcess() ONLY GIVE YOU THE PROCESS OF YOUR OWN PACKAGE IN ANDROID M // BUT THAT'S ENOUGH HERE for (ActivityManager.RunningAppProcessInfo ai : appProcessList) { if (ai.uid != android.os.Process.myUid()) { continue; } if (ai.processName.equals(context.getPackageName())) { continue; } android.os.Process.killProcess(ai.pid); } } }
@Implementation protected static final int getCallingUid() { if (callingUid != null) { return callingUid; } return android.os.Process.myUid(); }
void grantPermissions(String... permissionNames) { grantPermissions(Process.myPid(), Process.myUid(), permissionNames); }
@Override public int getUidByPid(int pid) { synchronized (mPidsSelfLocked) { ProcessRecord r = findProcessLocked(pid); if (r != null) { return r.vuid; } } return Process.myUid(); }
void denyPermissions(String... permissionNames) { denyPermissions(Process.myPid(), Process.myUid(), permissionNames); }
@Resetter public static void reset() { if (userPidMap != null && userPidMap.isEmpty() == false) { ShadowProcess.setUid(userPidMap.get(UserHandle.USER_SYSTEM)); userPidMap.clear(); userPidMap.put(UserHandle.USER_SYSTEM, Process.myUid()); } } }
/** * Copied from android.support.v4.content.ContextCompat for backwards compatibility * @param permission the permission to check * @return true is granted */ private boolean isPermissionGranted(String permission) { if (permission == null) { throw new IllegalArgumentException("permission is null"); } return context.checkPermission(permission, android.os.Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED; } }
@Implementation protected int checkCallingPermission(String permission) { return checkPermission(permission, android.os.Process.myPid(), android.os.Process.myUid()); }
CompatWorkEnqueuer(Context context, ComponentName cn) { super(context, cn); mContext = context.getApplicationContext(); if (mContext.checkPermission(Manifest.permission.WAKE_LOCK, Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED) { // Make wake locks. We need two, because the launch wake lock wants to have // a timeout, and the system does not do the right thing if you mix timeout and // non timeout (or even changing the timeout duration) in one wake lock. PowerManager pm = ((PowerManager) context.getSystemService(Context.POWER_SERVICE)); mLaunchWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, cn.getClassName() + ":launch"); mLaunchWakeLock.setReferenceCounted(false); mRunWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, cn.getClassName() + ":run"); mRunWakeLock.setReferenceCounted(false); } else { TinkerLog.w(TAG, "it would be better to grant WAKE_LOCK permission to your app so that tinker can use WakeLock to keep system awake."); mLaunchWakeLock = mRunWakeLock = null; } }
@Override public boolean beforeCall(Object who, Method method, Object... args) { int index = ArrayUtils.indexOfLast(args, Integer.class); if (index != -1) { int uid = (int) args[index]; if (uid == Process.myUid()) { args[index] = getRealUid(); } } return super.beforeCall(who, method, args); } }
@Override public List<ResolveInfo> queryBroadcastReceivers(final Intent intent, final int flags) { check(intent); final List<ResolveInfo> resolves = new ArrayList<>(); resolves.add(buildResolveInfo(ALLOWED_PACKAGE, false, android.os.Process.myUid())); resolves.add(buildResolveInfo(DISALLOWED_PACKAGE, false, android.os.Process.myUid())); return resolves; }
@Test public void shouldGetMyUidAsSet() { ShadowProcess.setUid(123); assertThat(android.os.Process.myUid()).isEqualTo(123); }
@Test public void some_test_with_permissions() { Context context = getApplicationContext(); assertThat(context.checkPermission(permission.READ_CONTACTS, Process.myPid(), Process.myUid())) .isEqualTo(PackageManager.PERMISSION_GRANTED); assertThat(context.checkPermission(permission.WRITE_CONTACTS, Process.myPid(), Process.myUid())) .isEqualTo(PackageManager.PERMISSION_DENIED); } }
@Test public void testGetCallingUidShouldUseProcessUidByDefault() { assertThat(Binder.getCallingUid()).isEqualTo(android.os.Process.myUid()); }
@Test public void getRunningAppProcesses_shouldReturnProcessList() { final ActivityManager activityManager = getActivityManager(); final ActivityManager.RunningAppProcessInfo process1 = buildProcessInfo(new ComponentName("org.robolectric", "Process 1")); final ActivityManager.RunningAppProcessInfo process2 = buildProcessInfo(new ComponentName("org.robolectric", "Process 2")); assertThat(activityManager.getRunningAppProcesses().size()).isEqualTo(1); ActivityManager.RunningAppProcessInfo myInfo = activityManager.getRunningAppProcesses().get(0); assertThat(myInfo.pid).isEqualTo(android.os.Process.myPid()); assertThat(myInfo.uid).isEqualTo(android.os.Process.myUid()); assertThat(myInfo.processName) .isEqualTo( ((Application) ApplicationProvider.getApplicationContext()) .getBaseContext() .getPackageName()); shadowOf(activityManager).setProcesses(Lists.newArrayList(process1, process2)); assertThat(activityManager.getRunningAppProcesses()).containsExactly(process1, process2); }
@Test public void getMyMemoryState() throws Exception { ActivityManager.RunningAppProcessInfo inState = new ActivityManager.RunningAppProcessInfo(); ActivityManager.getMyMemoryState(inState); assertThat(inState.uid).isEqualTo(Process.myUid()); assertThat(inState.pid).isEqualTo(Process.myPid()); assertThat(inState.importanceReasonCode).isEqualTo(0); ActivityManager.RunningAppProcessInfo setState = new ActivityManager.RunningAppProcessInfo(); setState.uid = Process.myUid(); setState.pid = Process.myPid(); setState.importanceReasonCode = ActivityManager.RunningAppProcessInfo.REASON_PROVIDER_IN_USE; shadowOf(getActivityManager()).setProcesses(ImmutableList.of(setState)); inState = new ActivityManager.RunningAppProcessInfo(); ActivityManager.getMyMemoryState(inState); assertThat(inState.importanceReasonCode) .isEqualTo(ActivityManager.RunningAppProcessInfo.REASON_PROVIDER_IN_USE); }
@Test public void testResetUpdatesCallingUidAndPid() { ShadowBinder.setCallingPid(48); ShadowBinder.setCallingUid(49); ShadowBinder.reset(); assertThat(Binder.getCallingPid()).isEqualTo(android.os.Process.myPid()); assertThat(Binder.getCallingUid()).isEqualTo(android.os.Process.myUid()); } }