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

Commit fa0837d8 authored by Jackal Guo's avatar Jackal Guo
Browse files

Dump known packages

Add helpful known-packages section in bugreport.

Fix: 121374459
Test: Using 'adb shell dumpsys package (known-packages)' to check
      whether these known packages are dumped.
Change-Id: Ie43871d7ba8adca01bc17761dd9137129f47c58e
parent 2e2bd28e
Loading
Loading
Loading
Loading
+46 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ public abstract class PackageManagerInternal {
    public static final int PACKAGE_COMPANION = 14;
    public static final int PACKAGE_RETAIL_DEMO = 15;
    public static final int PACKAGE_OVERLAY_CONFIG_SIGNATURE = 16;
    public static final int LAST_KNOWN_PACKAGE = PACKAGE_OVERLAY_CONFIG_SIGNATURE;

    @IntDef(flag = true, prefix = "RESOLVE_", value = {
            RESOLVE_NON_BROWSER_ONLY,
@@ -1015,6 +1016,51 @@ public abstract class PackageManagerInternal {
    public abstract boolean unregisterInstalledLoadingProgressCallback(@NonNull String packageName,
            @NonNull InstalledLoadingProgressCallback callback);

    /**
     * Returns the string representation of a known package. For example,
     * {@link #PACKAGE_SETUP_WIZARD} is represented by the string Setup Wizard.
     *
     * @param knownPackage The known package.
     * @return The string representation.
     */
    public static @NonNull String knownPackageToString(@KnownPackage int knownPackage) {
        switch (knownPackage) {
            case PACKAGE_SYSTEM:
                return "System";
            case PACKAGE_SETUP_WIZARD:
                return "Setup Wizard";
            case PACKAGE_INSTALLER:
                return "Installer";
            case PACKAGE_VERIFIER:
                return "Verifier";
            case PACKAGE_BROWSER:
                return "Browser";
            case PACKAGE_SYSTEM_TEXT_CLASSIFIER:
                return "System Text Classifier";
            case PACKAGE_PERMISSION_CONTROLLER:
                return "Permission Controller";
            case PACKAGE_WELLBEING:
                return "Wellbeing";
            case PACKAGE_DOCUMENTER:
                return "Documenter";
            case PACKAGE_CONFIGURATOR:
                return "Configurator";
            case PACKAGE_INCIDENT_REPORT_APPROVER:
                return "Incident Report Approver";
            case PACKAGE_APP_PREDICTOR:
                return "App Predictor";
            case PACKAGE_WIFI:
                return "Wi-Fi";
            case PACKAGE_COMPANION:
                return "Companion";
            case PACKAGE_RETAIL_DEMO:
                return "Retail Demo";
            case PACKAGE_OVERLAY_CONFIG_SIGNATURE:
                return "Overlay Config Signature";
        }
        return "Unknown";
    }

    /**
     * Callback to listen for loading progress of a package installed on Incremental File System.
     */
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ public final class DumpState {
    public static final int DUMP_SERVICE_PERMISSIONS = 1 << 24;
    public static final int DUMP_APEX = 1 << 25;
    public static final int DUMP_QUERIES = 1 << 26;
    public static final int DUMP_KNOWN_PACKAGES = 1 << 27;

    public static final int OPTION_SHOW_FILTERS = 1 << 0;
    public static final int OPTION_DUMP_ALL_COMPONENTS = 1 << 1;
+38 −1
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.pm.PackageManager.RESTRICTION_NONE;
import static android.content.pm.PackageManager.UNINSTALL_REASON_UNKNOWN;
import static android.content.pm.PackageManagerInternal.LAST_KNOWN_PACKAGE;
import static android.content.pm.PackageParser.SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V4;
import static android.content.pm.PackageParser.isApkFile;
import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
@@ -686,6 +687,8 @@ public class PackageManagerService extends IPackageManager.Stub
    private static final String PACKAGE_SCHEME = "package";
    private static final String COMPANION_PACKAGE_NAME = "com.android.companiondevicemanager";
    /** Canonical intent used to identify what counts as a "web browser" app */
    private static final Intent sBrowserIntent;
    static {
@@ -21905,6 +21908,7 @@ public class PackageManagerService extends IPackageManager.Stub
                pw.println("    dexopt: dump dexopt state");
                pw.println("    compiler-stats: dump compiler statistics");
                pw.println("    service-permissions: dump permissions required by services");
                pw.println("    known-packages: dump known packages");
                pw.println("    <package.name>: info about given package");
                return;
            } else if ("--checkin".equals(opt)) {
@@ -22049,6 +22053,8 @@ public class PackageManagerService extends IPackageManager.Stub
                dumpState.setDump(DumpState.DUMP_CHANGES);
            } else if ("service-permissions".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_SERVICE_PERMISSIONS);
            } else if ("known-packages".equals(cmd)) {
                dumpState.setDump(DumpState.DUMP_KNOWN_PACKAGES);
            } else if ("write".equals(cmd)) {
                synchronized (mLock) {
                    writeSettingsLPrTEMP();
@@ -22073,6 +22079,37 @@ public class PackageManagerService extends IPackageManager.Stub
                }
            }
            if (!checkin
                    && dumpState.isDumping(DumpState.DUMP_KNOWN_PACKAGES)
                    && packageName == null) {
                if (dumpState.onTitlePrinted()) {
                    pw.println();
                }
                final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ", 120);
                ipw.println("Known Packages:");
                ipw.increaseIndent();
                for (int i = 0; i < LAST_KNOWN_PACKAGE; i++) {
                    final String knownPackage = mPmInternal.knownPackageToString(i);
                    if ("Unknown".equals(knownPackage)) {
                        continue;
                    }
                    ipw.print(knownPackage);
                    ipw.println(":");
                    final String[] pkgNames = mPmInternal.getKnownPackageNames(i,
                            UserHandle.USER_SYSTEM);
                    ipw.increaseIndent();
                    if (ArrayUtils.isEmpty(pkgNames)) {
                        ipw.println("none");
                    } else {
                        for (String name : pkgNames) {
                            ipw.println(name);
                        }
                    }
                    ipw.decreaseIndent();
                }
                ipw.decreaseIndent();
            }
            if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) {
                if (!checkin) {
                    if (dumpState.onTitlePrinted())
@@ -24515,7 +24552,7 @@ public class PackageManagerService extends IPackageManager.Stub
                case PackageManagerInternal.PACKAGE_APP_PREDICTOR:
                    return filterOnlySystemPackages(mAppPredictionServicePackage);
                case PackageManagerInternal.PACKAGE_COMPANION:
                    return filterOnlySystemPackages("com.android.companiondevicemanager");
                    return filterOnlySystemPackages(COMPANION_PACKAGE_NAME);
                case PackageManagerInternal.PACKAGE_RETAIL_DEMO:
                    return TextUtils.isEmpty(mRetailDemoPackage)
                            ? ArrayUtils.emptyArray(String.class)