Merge "Dump known packages"

This commit is contained in:
Jackal Guo
2020-10-07 02:14:13 +00:00
committed by Android (Google) Code Review
3 changed files with 85 additions and 1 deletions

View File

@@ -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.
*/

View File

@@ -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;

View File

@@ -94,6 +94,7 @@ import static android.content.pm.PackageManager.MOVE_FAILED_SYSTEM_PACKAGE;
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 {
@@ -22062,6 +22065,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)) {
@@ -22206,6 +22210,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();
@@ -22230,6 +22236,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())
@@ -24719,7 +24756,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)