Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7bfadcb0 authored by David Brazdil's avatar David Brazdil Committed by android-build-merger
Browse files

Merge "Add flag to AMS.startInstrumentation() to disable hidden API checks" am: 4a8fa52e

am: b459c66f

Change-Id: Ic9aac96f55b4eb947b5af78a6b8482638a806ae5
parents fe7521ec b459c66f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -167,6 +167,8 @@ public class Am extends BaseCommand {
            } else if (opt.equals("--no_window_animation")
                    || opt.equals("--no-window-animation")) {
                instrument.noWindowAnimation = true;
            } else if (opt.equals("--no-hidden-api-checks")) {
                instrument.disableHiddenApiChecks = true;
            } else if (opt.equals("--user")) {
                instrument.userId = parseUserArg(nextArgRequired());
            } else if (opt.equals("--abi")) {
+7 −1
Original line number Diff line number Diff line
@@ -52,12 +52,17 @@ public class Instrument {
    public boolean rawMode = false;
    public boolean proto = false;
    public boolean noWindowAnimation = false;
    public boolean disableHiddenApiChecks = false;
    public String abi = null;
    public int userId = UserHandle.USER_CURRENT;
    public Bundle args = new Bundle();
    // Required
    public String componentNameArg;

    // Disable hidden API checks for the newly started instrumentation.
    // Must be kept in sync with ActivityManagerService.
    private static final int INSTRUMENTATION_FLAG_DISABLE_HIDDEN_API_CHECKS = 1 << 0;

    /**
     * Construct the instrument command runner.
     */
@@ -416,7 +421,8 @@ public class Instrument {
            }

            // Start the instrumentation
            if (!mAm.startInstrumentation(cn, profileFile, 0, args, watcher, connection, userId,
            int flags = disableHiddenApiChecks ? INSTRUMENTATION_FLAG_DISABLE_HIDDEN_API_CHECKS : 0;
            if (!mAm.startInstrumentation(cn, profileFile, flags, args, watcher, connection, userId,
                        abi)) {
                throw new AndroidException("INSTRUMENTATION_FAILED: " + cn.flattenToString());
            }
+26 −4
Original line number Diff line number Diff line
@@ -532,6 +532,10 @@ public class ActivityManagerService extends IActivityManager.Stub
    // How long we wait until we timeout on key dispatching during instrumentation.
    static final int INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT = 60*1000;
    // Disable hidden API checks for the newly started instrumentation.
    // Must be kept in sync with Am.
    private static final int INSTRUMENTATION_FLAG_DISABLE_HIDDEN_API_CHECKS = 1 << 0;
    // How long to wait in getAssistContextExtras for the activity and foreground services
    // to respond with the result.
    static final int PENDING_ASSIST_EXTRAS_TIMEOUT = 500;
@@ -3828,6 +3832,13 @@ public class ActivityManagerService extends IActivityManager.Stub
    private final void startProcessLocked(ProcessRecord app, String hostingType,
            String hostingNameStr, String abiOverride, String entryPoint, String[] entryPointArgs) {
        startProcessLocked(app, hostingType, hostingNameStr, false /* disableHiddenApiChecks */,
                null /* abiOverride */, null /* entryPoint */, null /* entryPointArgs */);
    }
    private final void startProcessLocked(ProcessRecord app, String hostingType,
            String hostingNameStr, boolean disableHiddenApiChecks, String abiOverride,
            String entryPoint, String[] entryPointArgs) {
        long startTime = SystemClock.elapsedRealtime();
        if (app.pid > 0 && app.pid != MY_PID) {
            checkTime(startTime, "startProcess: removing from pids map");
@@ -3948,7 +3959,9 @@ public class ActivityManagerService extends IActivityManager.Stub
                runtimeFlags |= Zygote.ONLY_USE_SYSTEM_OAT_FILES;
            }
            if (!app.info.isAllowedToUseHiddenApi() && !mHiddenApiBlacklist.isDisabled()) {
            if (!app.info.isAllowedToUseHiddenApi() &&
                    !disableHiddenApiChecks &&
                    !mHiddenApiBlacklist.isDisabled()) {
                // This app is not allowed to use undocumented and private APIs, or blacklisting is
                // enabled. Set up its runtime with the appropriate flag.
                runtimeFlags |= Zygote.ENABLE_HIDDEN_API_CHECKS;
@@ -12471,6 +12484,12 @@ public class ActivityManagerService extends IActivityManager.Stub
    final ProcessRecord addAppLocked(ApplicationInfo info, String customProcess, boolean isolated,
            String abiOverride) {
        return addAppLocked(info, customProcess, isolated, false /* disableHiddenApiChecks */,
                abiOverride);
    }
    final ProcessRecord addAppLocked(ApplicationInfo info, String customProcess, boolean isolated,
            boolean disableHiddenApiChecks, String abiOverride) {
        ProcessRecord app;
        if (!isolated) {
            app = getProcessRecordLocked(customProcess != null ? customProcess : info.processName,
@@ -12502,8 +12521,8 @@ public class ActivityManagerService extends IActivityManager.Stub
        if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) {
            mPersistentStartingProcesses.add(app);
            startProcessLocked(app, "added application",
                    customProcess != null ? customProcess : app.processName, abiOverride,
                    null /* entryPoint */, null /* entryPointArgs */);
                    customProcess != null ? customProcess : app.processName, disableHiddenApiChecks,
                    abiOverride, null /* entryPoint */, null /* entryPointArgs */);
        }
        return app;
@@ -20165,7 +20184,10 @@ public class ActivityManagerService extends IActivityManager.Stub
            // Instrumentation can kill and relaunch even persistent processes
            forceStopPackageLocked(ii.targetPackage, -1, true, false, true, true, false, userId,
                    "start instr");
            ProcessRecord app = addAppLocked(ai, defProcess, false, abiOverride);
            boolean disableHiddenApiChecks =
                    (flags & INSTRUMENTATION_FLAG_DISABLE_HIDDEN_API_CHECKS) != 0;
            ProcessRecord app = addAppLocked(ai, defProcess, false, disableHiddenApiChecks,
                    abiOverride);
            app.instr = activeInstr;
            activeInstr.mFinished = false;
            activeInstr.mRunningProcesses.add(app);
+2 −1
Original line number Diff line number Diff line
@@ -2729,7 +2729,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
            pw.println("          specified then send to all users.");
            pw.println("      --receiver-permission <PERMISSION>: Require receiver to hold permission.");
            pw.println("  instrument [-r] [-e <NAME> <VALUE>] [-p <FILE>] [-w]");
            pw.println("          [--user <USER_ID> | current]");
            pw.println("          [--user <USER_ID> | current] [--no-hidden-api-checks]");
            pw.println("          [--no-window-animation] [--abi <ABI>] <COMPONENT>");
            pw.println("      Start an Instrumentation.  Typically this target <COMPONENT> is in the");
            pw.println("      form <TEST_PACKAGE>/<RUNNER_CLASS> or only <TEST_PACKAGE> if there");
@@ -2744,6 +2744,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
            pw.println("          test runners.");
            pw.println("      --user <USER_ID> | current: Specify user instrumentation runs in;");
            pw.println("          current user if not specified.");
            pw.println("      --no-hidden-api-checks: disable restrictions on use of hidden API.");
            pw.println("      --no-window-animation: turn off window animations while running.");
            pw.println("      --abi <ABI>: Launch the instrumented process with the selected ABI.");
            pw.println("          This assumes that the process supports the selected ABI.");