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

Commit 3a94306f authored by Ivan Chiang's avatar Ivan Chiang
Browse files

[pm] Add --no-profile option into install command

Bug: 257532944
Test: adb install --no-profile foo.apk.
      adb shell pm help
Change-Id: I8b7ad8f6ff6dac340b6658e68c3a37d8060edbf7
parent 3f5ab98f
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1431,6 +1431,7 @@ public abstract class PackageManager {
            INSTALL_ALLOW_DOWNGRADE,
            INSTALL_STAGED,
            INSTALL_REQUEST_UPDATE_OWNERSHIP,
            INSTALL_DONT_EXTRACT_BASELINE_PROFILES,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface InstallFlags {}
@@ -1645,6 +1646,13 @@ public abstract class PackageManager {
     */
    public static final int INSTALL_FROM_MANAGED_USER_OR_PROFILE = 1 << 26;

    /**
     * Flag parameter for {@link PackageInstaller.SessionParams} to indicate that do not extract
     * the baseline profiles when parsing the apk
     * @hide
     */
    public static final int INSTALL_DONT_EXTRACT_BASELINE_PROFILES = 1 << 27;

    /** @hide */
    @IntDef(flag = true, value = {
            DONT_KILL_APP,
+5 −1
Original line number Diff line number Diff line
@@ -1077,6 +1077,8 @@ final class InstallPackageHelper {
        final boolean isApex = ((installFlags & PackageManager.INSTALL_APEX) != 0);
        final boolean isRollback =
                request.getInstallReason() == PackageManager.INSTALL_REASON_ROLLBACK;
        final boolean extractProfile =
                ((installFlags & PackageManager.INSTALL_DONT_EXTRACT_BASELINE_PROFILES) == 0);
        @PackageManagerService.ScanFlags int scanFlags = SCAN_NEW_INSTALL | SCAN_UPDATE_SIGNATURE;
        if (request.isInstallMove()) {
            // moving a complete application; perform an initial scan on the new install location
@@ -1112,7 +1114,9 @@ final class InstallPackageHelper {
        @ParsingPackageUtils.ParseFlags final int parseFlags =
                mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_CHATTY
                        | ParsingPackageUtils.PARSE_ENFORCE_CODE
                        | (onExternal ? ParsingPackageUtils.PARSE_EXTERNAL_STORAGE : 0);
                        | (onExternal ? ParsingPackageUtils.PARSE_EXTERNAL_STORAGE : 0)
                        | (extractProfile
                        ? ParsingPackageUtils.PARSE_EXTRACT_BASELINE_PROFILES_FROM_APK : 0);

        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parsePackage");
        final ParsedPackage parsedPackage;
+7 −2
Original line number Diff line number Diff line
@@ -3436,6 +3436,10 @@ class PackageManagerShellCommand extends ShellCommand {
                    sessionParams.installFlags |=
                            PackageManager.INSTALL_BYPASS_LOW_TARGET_SDK_BLOCK;
                    break;
                case "--no-profile":
                    sessionParams.installFlags |=
                            PackageManager.INSTALL_DONT_EXTRACT_BASELINE_PROFILES;
                    break;
                default:
                    throw new IllegalArgumentException("Unknown option " + opt);
            }
@@ -4324,7 +4328,7 @@ class PackageManagerShellCommand extends ShellCommand {
        pw.println("       [--install-reason 0/1/2/3/4] [--originating-uri URI]");
        pw.println("       [--referrer URI] [--abi ABI_NAME] [--force-sdk]");
        pw.println("       [--preload] [--instant] [--full] [--dont-kill]");
        pw.println("       [--enable-rollback]");
        pw.println("       [--enable-rollback] [--no-profile]");
        pw.println("       [--force-uuid internal|UUID] [--pkg PACKAGE] [-S BYTES]");
        pw.println("       [--apex] [--force-non-staged] [--staged-ready-timeout TIMEOUT]");
        pw.println("       [PATH [SPLIT...]|-]");
@@ -4357,6 +4361,7 @@ class PackageManagerShellCommand extends ShellCommand {
        pw.println("      --apex: install an .apex file, not an .apk");
        pw.println("      --force-non-staged: force the installation to run under a non-staged");
        pw.println("          session, which may complete without requiring a reboot");
        pw.println("      --no-profile: don't extract the profiles from the apk");
        pw.println("      --staged-ready-timeout: By default, staged sessions wait "
                + DEFAULT_STAGED_READY_TIMEOUT_MS);
        pw.println("          milliseconds for pre-reboot verification to complete when");
@@ -4378,7 +4383,7 @@ class PackageManagerShellCommand extends ShellCommand {
        pw.println("       [--referrer URI] [--abi ABI_NAME] [--force-sdk]");
        pw.println("       [--preload] [--instant] [--full] [--dont-kill]");
        pw.println("       [--force-uuid internal|UUID] [--pkg PACKAGE] [--apex] [-S BYTES]");
        pw.println("       [--multi-package] [--staged] [--update-ownership]");
        pw.println("       [--multi-package] [--staged] [--no-profile] [--update-ownership]");
        pw.println("    Like \"install\", but starts an install session.  Use \"install-write\"");
        pw.println("    to push data into the session, and \"install-commit\" to finish.");
        pw.println("");
+8 −1
Original line number Diff line number Diff line
@@ -240,6 +240,11 @@ public class ParsingPackageUtils {
    public static final int PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY = 1 << 7;
    public static final int PARSE_APK_IN_APEX = 1 << 9;

    /**
     * This flag is to determine whether to extract the baseline profiles from the apk or not.
     */
    public static final int PARSE_EXTRACT_BASELINE_PROFILES_FROM_APK = 1 << 10;

    public static final int PARSE_CHATTY = 1 << 31;

    /** The total maximum number of activities, services, providers and activity-aliases */
@@ -251,14 +256,16 @@ public class ParsingPackageUtils {
    private static final int MAX_PERMISSION_NAME_LENGTH = 512;

    @IntDef(flag = true, prefix = { "PARSE_" }, value = {
            PARSE_APK_IN_APEX,
            PARSE_CHATTY,
            PARSE_COLLECT_CERTIFICATES,
            PARSE_ENFORCE_CODE,
            PARSE_EXTERNAL_STORAGE,
            PARSE_EXTRACT_BASELINE_PROFILES_FROM_APK,
            PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY,
            PARSE_IGNORE_PROCESSES,
            PARSE_IS_SYSTEM_DIR,
            PARSE_MUST_BE_APK,
            PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ParseFlags {}