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
Change-Id: I8dd3bbacdb263a3e30539f43d8081f6d78e80155
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index ebe6199..4e46aa3 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -174,10 +174,6 @@
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")) {
@@ -200,7 +196,6 @@
}
instrument.componentNameArg = nextArgRequired();
-
instrument.run();
}
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index c1ab5b6..b40dcd6 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -180,6 +180,7 @@
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;
@@ -303,6 +304,7 @@
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;
@@ -14394,6 +14396,8 @@
if (disableHiddenApiChecks || disableTestApiChecks) {
enforceCallingPermission(android.Manifest.permission.DISABLE_HIDDEN_API_CHECKS,
"disable hidden API checks");
+
+ enableTestApiAccess(ii.packageName);
}
// TODO(b/158750470): remove
@@ -14566,6 +14570,25 @@
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,