summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author satayev <satayev@google.com> 2019-11-06 07:19:20 -0800
committer android-build-merger <android-build-merger@google.com> 2019-11-06 07:19:20 -0800
commit98e9bbdb06d340d966f177173748c87ec93b3e11 (patch)
tree5b590b92f2c623f2c66d1861c64dafb55b56487f
parentf3946a63d60af82445dc083845492dfa46502c0d (diff)
parent698c84738e8b345d9b6b1eb3fab5266f06c3d8d0 (diff)
Merge "Plumb @TestApi enforcement policy to runtime." am: eb6be3bd48 am: d24444e5ee
am: 698c84738e Change-Id: Ib451e70ecb98e2e1af635139f23248261385694c
-rw-r--r--core/java/com/android/internal/os/Zygote.java7
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java18
-rw-r--r--services/core/java/com/android/server/am/ProcessList.java15
3 files changed, 30 insertions, 10 deletions
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 3ce3838a212e..f3de34be2e69 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -114,6 +114,13 @@ public final class Zygote {
*/
public static final int DEBUG_IGNORE_APP_SIGNAL_HANDLER = 1 << 17;
+ /**
+ * Disable runtime access to {@link android.annotation.TestApi} annotated members.
+ *
+ * <p>This only takes effect if Hidden API access restrictions are enabled as well.
+ */
+ public static final int DISABLE_TEST_API_ENFORCEMENT_POLICY = 1 << 18;
+
/** No external storage should be mounted. */
public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE;
/** Default external storage should be mounted. */
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index d6ecdeac1654..a6d216fea7e2 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -7846,10 +7846,18 @@ public class ActivityManagerService extends IActivityManager.Stub
false /* mountExtStorageFull */, abiOverride);
}
- // TODO: Move to ProcessList?
@GuardedBy("this")
final ProcessRecord addAppLocked(ApplicationInfo info, String customProcess, boolean isolated,
boolean disableHiddenApiChecks, boolean mountExtStorageFull, String abiOverride) {
+ return addAppLocked(info, customProcess, isolated, disableHiddenApiChecks,
+ false /* disableTestApiChecks */, mountExtStorageFull, abiOverride);
+ }
+
+ // TODO: Move to ProcessList?
+ @GuardedBy("this")
+ final ProcessRecord addAppLocked(ApplicationInfo info, String customProcess, boolean isolated,
+ boolean disableHiddenApiChecks, boolean disableTestApiChecks,
+ boolean mountExtStorageFull, String abiOverride) {
ProcessRecord app;
if (!isolated) {
app = getProcessRecordLocked(customProcess != null ? customProcess : info.processName,
@@ -7884,7 +7892,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mPersistentStartingProcesses.add(app);
mProcessList.startProcessLocked(app, new HostingRecord("added application",
customProcess != null ? customProcess : app.processName),
- disableHiddenApiChecks, mountExtStorageFull, abiOverride);
+ disableHiddenApiChecks, disableTestApiChecks, mountExtStorageFull, abiOverride);
}
return app;
@@ -16056,6 +16064,10 @@ public class ActivityManagerService extends IActivityManager.Stub
enforceCallingPermission(android.Manifest.permission.DISABLE_HIDDEN_API_CHECKS,
"disable hidden API checks");
}
+ // Allow instrumented processes access to test APIs.
+ // TODO(satayev): make this configurable via testing framework.
+ boolean disableTestApiChecks = true;
+
final boolean mountExtStorageFull = isCallerShell()
&& (flags & INSTR_FLAG_MOUNT_EXTERNAL_STORAGE_FULL) != 0;
@@ -16070,7 +16082,7 @@ public class ActivityManagerService extends IActivityManager.Stub
}
ProcessRecord app = addAppLocked(ai, defProcess, false, disableHiddenApiChecks,
- mountExtStorageFull, abiOverride);
+ disableTestApiChecks, mountExtStorageFull, abiOverride);
app.setActiveInstrumentation(activeInstr);
activeInstr.mFinished = false;
activeInstr.mRunningProcesses.add(app);
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 8be31a6e07c2..2bb703545cad 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -1413,15 +1413,11 @@ public final class ProcessList {
/**
* @return {@code true} if process start is successful, false otherwise.
- * @param app
- * @param hostingRecord
- * @param disableHiddenApiChecks
- * @param abiOverride
*/
@GuardedBy("mService")
boolean startProcessLocked(ProcessRecord app, HostingRecord hostingRecord,
- boolean disableHiddenApiChecks, boolean mountExtStorageFull,
- String abiOverride) {
+ boolean disableHiddenApiChecks, boolean disableTestApiChecks,
+ boolean mountExtStorageFull, String abiOverride) {
if (app.pendingStart) {
return true;
}
@@ -1566,6 +1562,10 @@ public final class ProcessList {
throw new IllegalStateException("Invalid API policy: " + policy);
}
runtimeFlags |= policyBits;
+
+ if (disableTestApiChecks) {
+ runtimeFlags |= Zygote.DISABLE_TEST_API_ENFORCEMENT_POLICY;
+ }
}
String useAppImageCache = SystemProperties.get(
@@ -1847,7 +1847,8 @@ public final class ProcessList {
final boolean startProcessLocked(ProcessRecord app, HostingRecord hostingRecord,
String abiOverride) {
return startProcessLocked(app, hostingRecord,
- false /* disableHiddenApiChecks */, false /* mountExtStorageFull */, abiOverride);
+ false /* disableHiddenApiChecks */, false /* disableTestApiChecks */,
+ false /* mountExtStorageFull */, abiOverride);
}
@GuardedBy("mService")