Enable @TestApi access for instrumentation.

Since introduction of ALLOW_TEST_API_ACCESS, it is now possible to
grant access to test apis for the whole UID, instead of just a starting
process.

This resolves the issue, where a forked test process cannot access @TestApi's.

Bug: 147113465
Test: atest CameraEvictionTest#testBasicCamera2ActivityEviction
Merged-In: I8dd3bbacdb263a3e30539f43d8081f6d78e80155
Change-Id: I8dd3bbacdb263a3e30539f43d8081f6d78e80155
This commit is contained in:
Artur Satayev
2021-01-19 18:00:15 +00:00
parent 21900cb6ee
commit 244fa92fc1
2 changed files with 23 additions and 5 deletions

View File

@@ -174,10 +174,6 @@ public class Am extends BaseCommand {
instrument.noWindowAnimation = true;
} else if (opt.equals("--no-hidden-api-checks")) {
instrument.disableHiddenApiChecks = true;
} else if (opt.equals("--no-test-api-checks")) {
// TODO(satayev): remove this option, only kept for backwards compatibility with
// cached tradefed instance
instrument.disableTestApiChecks = false;
} else if (opt.equals("--no-test-api-access")) {
instrument.disableTestApiChecks = false;
} else if (opt.equals("--no-isolated-storage")) {
@@ -198,7 +194,6 @@ public class Am extends BaseCommand {
}
instrument.componentNameArg = nextArgRequired();
instrument.run();
}
}

View File

@@ -190,6 +190,7 @@ import android.app.usage.UsageEvents.Event;
import android.app.usage.UsageStatsManager;
import android.app.usage.UsageStatsManagerInternal;
import android.appwidget.AppWidgetManager;
import android.compat.Compatibility;
import android.content.AutofillOptions;
import android.content.BroadcastReceiver;
import android.content.ComponentCallbacks2;
@@ -318,6 +319,7 @@ import com.android.internal.app.IAppOpsService;
import com.android.internal.app.ProcessMap;
import com.android.internal.app.SystemUserHomeActivity;
import com.android.internal.app.procstats.ProcessStats;
import com.android.internal.compat.CompatibilityChangeConfig;
import com.android.internal.content.PackageHelper;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
@@ -16944,6 +16946,8 @@ public class ActivityManagerService extends IActivityManager.Stub
if (disableHiddenApiChecks || disableTestApiChecks) {
enforceCallingPermission(android.Manifest.permission.DISABLE_HIDDEN_API_CHECKS,
"disable hidden API checks");
enableTestApiAccess(ii.packageName);
}
// TODO(b/158750470): remove
@@ -17083,6 +17087,25 @@ public class ActivityManagerService extends IActivityManager.Stub
forceStopPackageLocked(app.info.packageName, -1, false, false, true, true, false, app.userId,
"finished inst");
disableTestApiAccess(app.info.packageName);
}
private void enableTestApiAccess(String packageName) {
if (mPlatformCompat != null) {
Compatibility.ChangeConfig config = new Compatibility.ChangeConfig(
Collections.singleton(166236554L /* VMRuntime.ALLOW_TEST_API_ACCESS */),
Collections.emptySet());
CompatibilityChangeConfig override = new CompatibilityChangeConfig(config);
mPlatformCompat.setOverridesForTest(override, packageName);
}
}
private void disableTestApiAccess(String packageName) {
if (mPlatformCompat != null) {
mPlatformCompat.clearOverrideForTest(166236554L /* VMRuntime.ALLOW_TEST_API_ACCESS */,
packageName);
}
}
public void finishInstrumentation(IApplicationThread target,