diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 3cd41d30aa86c..7bf406bfaf009 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4610,8 +4610,14 @@ public class PackageManagerService extends IPackageManager.Stub public void dump(int type, FileDescriptor fd, PrintWriter pw, DumpState dumpState) { final String packageName = dumpState.getTargetPackageName(); + final PackageSetting setting = mSettings.getPackageLPr(packageName); final boolean checkin = dumpState.isCheckIn(); + // Return if the package doesn't exist. + if (packageName != null && setting == null) { + return; + } + switch (type) { case DumpState.DUMP_VERSION: { @@ -4704,8 +4710,7 @@ public class PackageManagerService extends IPackageManager.Stub case DumpState.DUMP_QUERIES: { - final PackageSetting setting = mSettings.getPackageLPr(packageName); - Integer filteringAppId = setting == null ? null : setting.appId; + final Integer filteringAppId = setting == null ? null : setting.appId; mAppsFilter.dumpQueries( pw, filteringAppId, dumpState, mUserManager.getUserIds(), this::getPackagesForUidInternalBody); @@ -4716,8 +4721,9 @@ public class PackageManagerService extends IPackageManager.Stub { final android.util.IndentingPrintWriter writer = new android.util.IndentingPrintWriter(pw); - if (dumpState.onTitlePrinted()) pw.println(); - + if (dumpState.onTitlePrinted()) { + pw.println(); + } writer.println("Domain verification status:"); writer.increaseIndent(); try { @@ -4734,18 +4740,14 @@ public class PackageManagerService extends IPackageManager.Stub case DumpState.DUMP_DEXOPT: { final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); - ipw.println(); + if (dumpState.onTitlePrinted()) { + pw.println(); + } ipw.println("Dexopt state:"); ipw.increaseIndent(); Collection pkgSettings; - if (packageName != null) { - PackageSetting targetPkgSetting = mSettings.getPackageLPr(packageName); - if (targetPkgSetting != null) { - pkgSettings = Collections.singletonList(targetPkgSetting); - } else { - ipw.println("Unable to find package: " + packageName); - return; - } + if (setting != null) { + pkgSettings = Collections.singletonList(setting); } else { pkgSettings = mSettings.getPackagesLocked().values(); } @@ -4755,10 +4757,12 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg == null) { continue; } - ipw.println("[" + pkgSetting.name + "]"); + final String pkgName = pkg.getPackageName(); + ipw.println("[" + pkgName + "]"); ipw.increaseIndent(); + mPackageDexOptimizer.dumpDexoptState(ipw, pkg, pkgSetting, - mDexManager.getPackageUseInfoOrDefault(pkg.getPackageName())); + mDexManager.getPackageUseInfoOrDefault(pkgName)); ipw.decreaseIndent(); } break; @@ -4767,28 +4771,29 @@ public class PackageManagerService extends IPackageManager.Stub case DumpState.DUMP_COMPILER_STATS: { final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); - ipw.println(); + if (dumpState.onTitlePrinted()) { + pw.println(); + } ipw.println("Compiler stats:"); ipw.increaseIndent(); - Collection packages; - if (packageName != null) { - AndroidPackage targetPackage = mPackages.get(packageName); - if (targetPackage != null) { - packages = Collections.singletonList(targetPackage); - } else { - ipw.println("Unable to find package: " + packageName); - return; - } + Collection pkgSettings; + if (setting != null) { + pkgSettings = Collections.singletonList(setting); } else { - packages = mPackages.values(); + pkgSettings = mSettings.getPackagesLocked().values(); } - for (AndroidPackage pkg : packages) { + for (PackageSetting pkgSetting : pkgSettings) { + final AndroidPackage pkg = pkgSetting.getPkg(); + if (pkg == null) { + continue; + } final String pkgName = pkg.getPackageName(); ipw.println("[" + pkgName + "]"); ipw.increaseIndent(); - CompilerStats.PackageStats stats = mCompilerStats.getPackageStats(pkgName); + final CompilerStats.PackageStats stats = + mCompilerStats.getPackageStats(pkgName); if (stats == null) { ipw.println("(No recorded stats)"); } else { @@ -21090,15 +21095,24 @@ public class PackageManagerService extends IPackageManager.Stub final String packageName = dumpState.getTargetPackageName(); final boolean checkin = dumpState.isCheckIn(); + + // Return if the package doesn't exist. + if (packageName != null + && getPackageSetting(packageName) == null + && !mApexManager.isApexPackage(packageName)) { + pw.println("Unable to find package: " + packageName); + return; + } + if (checkin) { pw.println("vers,1"); } // reader - if (dumpState.isDumping(DumpState.DUMP_VERSION) && packageName == null) { - if (!checkin) { - dump(DumpState.DUMP_VERSION, fd, pw, dumpState); - } + if (!checkin + && dumpState.isDumping(DumpState.DUMP_VERSION) + && packageName == null) { + dump(DumpState.DUMP_VERSION, fd, pw, dumpState); } if (!checkin @@ -21129,7 +21143,8 @@ public class PackageManagerService extends IPackageManager.Stub ipw.decreaseIndent(); } - if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) { + if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) + && packageName == null) { final String requiredVerifierPackage = mRequiredVerifierPackage; if (!checkin) { if (dumpState.onTitlePrinted()) { @@ -21150,14 +21165,16 @@ public class PackageManagerService extends IPackageManager.Stub } } - if (dumpState.isDumping(DumpState.DUMP_DOMAIN_VERIFIER) && packageName == null) { + if (dumpState.isDumping(DumpState.DUMP_DOMAIN_VERIFIER) + && packageName == null) { final DomainVerificationProxy proxy = mDomainVerificationManager.getProxy(); final ComponentName verifierComponent = proxy.getComponentName(); if (verifierComponent != null) { String verifierPackageName = verifierComponent.getPackageName(); if (!checkin) { - if (dumpState.onTitlePrinted()) + if (dumpState.onTitlePrinted()) { pw.println(); + } pw.println("Domain Verifier:"); pw.print(" Using: "); pw.print(verifierPackageName); @@ -21177,11 +21194,13 @@ public class PackageManagerService extends IPackageManager.Stub } } - if (dumpState.isDumping(DumpState.DUMP_LIBS) && packageName == null) { + if (dumpState.isDumping(DumpState.DUMP_LIBS) + && packageName == null) { dump(DumpState.DUMP_LIBS, fd, pw, dumpState); } - if (dumpState.isDumping(DumpState.DUMP_FEATURES) && packageName == null) { + if (dumpState.isDumping(DumpState.DUMP_FEATURES) + && packageName == null) { if (dumpState.onTitlePrinted()) { pw.println(); } @@ -21191,12 +21210,7 @@ public class PackageManagerService extends IPackageManager.Stub synchronized (mAvailableFeatures) { for (FeatureInfo feat : mAvailableFeatures.values()) { - if (checkin) { - pw.print("feat,"); - pw.print(feat.name); - pw.print(","); - pw.println(feat.version); - } else { + if (!checkin) { pw.print(" "); pw.print(feat.name); if (feat.version > 0) { @@ -21204,55 +21218,73 @@ public class PackageManagerService extends IPackageManager.Stub pw.print(feat.version); } pw.println(); + } else { + pw.print("feat,"); + pw.print(feat.name); + pw.print(","); + pw.println(feat.version); } } } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_ACTIVITY_RESOLVERS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_ACTIVITY_RESOLVERS)) { synchronized (mLock) { mComponentResolver.dumpActivityResolvers(pw, dumpState, packageName); } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_RECEIVER_RESOLVERS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_RECEIVER_RESOLVERS)) { synchronized (mLock) { mComponentResolver.dumpReceiverResolvers(pw, dumpState, packageName); } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_SERVICE_RESOLVERS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_SERVICE_RESOLVERS)) { synchronized (mLock) { mComponentResolver.dumpServiceResolvers(pw, dumpState, packageName); } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_CONTENT_RESOLVERS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_CONTENT_RESOLVERS)) { synchronized (mLock) { mComponentResolver.dumpProviderResolvers(pw, dumpState, packageName); } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_PREFERRED)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_PREFERRED)) { dump(DumpState.DUMP_PREFERRED, fd, pw, dumpState); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_PREFERRED_XML) + && packageName == null) { dump(DumpState.DUMP_PREFERRED_XML, fd, pw, dumpState); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_DOMAIN_PREFERRED)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_DOMAIN_PREFERRED)) { dump(DumpState.DUMP_DOMAIN_PREFERRED, fd, pw, dumpState); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) { - mSettings.dumpPermissions(pw, packageName, permissionNames, dumpState); + if (!checkin + && dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) { + synchronized (mLock) { + mSettings.dumpPermissions(pw, packageName, permissionNames, dumpState); + } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_PROVIDERS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_PROVIDERS)) { synchronized (mLock) { mComponentResolver.dumpContentProviders(pw, dumpState, packageName); } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_KEYSETS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_KEYSETS)) { synchronized (mLock) { mSettings.getKeySetManagerService().dumpLPr(pw, packageName, dumpState); } @@ -21267,7 +21299,8 @@ public class PackageManagerService extends IPackageManager.Stub } } - if (dumpState.isDumping(DumpState.DUMP_QUERIES)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_QUERIES)) { dump(DumpState.DUMP_QUERIES, fd, pw, dumpState); } @@ -21279,8 +21312,12 @@ public class PackageManagerService extends IPackageManager.Stub } } - if (dumpState.isDumping(DumpState.DUMP_CHANGES)) { - if (dumpState.onTitlePrinted()) pw.println(); + if (!checkin + && dumpState.isDumping(DumpState.DUMP_CHANGES) + && packageName == null) { + if (dumpState.onTitlePrinted()) { + pw.println(); + } pw.println("Package Changes:"); synchronized (mLock) { pw.print(" Sequence number="); pw.println(mChangedPackagesSequenceNumber); @@ -21306,11 +21343,14 @@ public class PackageManagerService extends IPackageManager.Stub } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_FROZEN) && packageName == null) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_FROZEN) + && packageName == null) { // XXX should handle packageName != null by dumping only install data that // the given package is involved with. - if (dumpState.onTitlePrinted()) pw.println(); - + if (dumpState.onTitlePrinted()) { + pw.println(); + } final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ", 120); ipw.println(); ipw.println("Frozen packages:"); @@ -21327,9 +21367,12 @@ public class PackageManagerService extends IPackageManager.Stub ipw.decreaseIndent(); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_VOLUMES) && packageName == null) { - if (dumpState.onTitlePrinted()) pw.println(); - + if (!checkin + && dumpState.isDumping(DumpState.DUMP_VOLUMES) + && packageName == null) { + if (dumpState.onTitlePrinted()) { + pw.println(); + } final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ", 120); ipw.println(); ipw.println("Loaded volumes:"); @@ -21346,52 +21389,65 @@ public class PackageManagerService extends IPackageManager.Stub ipw.decreaseIndent(); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_SERVICE_PERMISSIONS) + if (!checkin + && dumpState.isDumping(DumpState.DUMP_SERVICE_PERMISSIONS) && packageName == null) { synchronized (mLock) { mComponentResolver.dumpServicePermissions(pw, dumpState); } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_DEXOPT)) { - if (dumpState.onTitlePrinted()) pw.println(); + if (!checkin + && dumpState.isDumping(DumpState.DUMP_DEXOPT)) { dump(DumpState.DUMP_DEXOPT, fd, pw, dumpState); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_COMPILER_STATS)) { - if (dumpState.onTitlePrinted()) pw.println(); + if (!checkin + && dumpState.isDumping(DumpState.DUMP_COMPILER_STATS)) { dump(DumpState.DUMP_COMPILER_STATS, fd, pw, dumpState); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_MESSAGES) && packageName == null) { - if (dumpState.onTitlePrinted()) pw.println(); - synchronized (mLock) { - mSettings.dumpReadMessagesLPr(pw, dumpState); + if (dumpState.isDumping(DumpState.DUMP_MESSAGES) + && packageName == null) { + if (!checkin) { + if (dumpState.onTitlePrinted()) { + pw.println(); + } + synchronized (mLock) { + mSettings.dumpReadMessagesLPr(pw, dumpState); + } + pw.println(); + pw.println("Package warning messages:"); + dumpCriticalInfo(pw, null); + } else { + dumpCriticalInfo(pw, "msg,"); } - pw.println(); - pw.println("Package warning messages:"); - dumpCriticalInfo(pw, null); - } - - if (checkin && dumpState.isDumping(DumpState.DUMP_MESSAGES)) { - dumpCriticalInfo(pw, "msg,"); } // PackageInstaller should be called outside of mPackages lock - if (!checkin && dumpState.isDumping(DumpState.DUMP_INSTALLS) && packageName == null) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_INSTALLS) + && packageName == null) { // XXX should handle packageName != null by dumping only install data that // the given package is involved with. - if (dumpState.onTitlePrinted()) pw.println(); + if (dumpState.onTitlePrinted()) { + pw.println(); + } mInstallerService.dump(new IndentingPrintWriter(pw, " ", 120)); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_APEX)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_APEX) + && (packageName == null || mApexManager.isApexPackage(packageName))) { mApexManager.dump(pw, packageName); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_PER_UID_READ_TIMEOUTS) + if (!checkin + && dumpState.isDumping(DumpState.DUMP_PER_UID_READ_TIMEOUTS) && packageName == null) { - pw.println(); + if (dumpState.onTitlePrinted()) { + pw.println(); + } pw.println("Per UID read timeouts:"); pw.println(" Default timeouts flag: " + getDefaultTimeouts()); pw.println(" Known digesters list flag: " + getKnownDigestersList()); @@ -21408,7 +21464,12 @@ public class PackageManagerService extends IPackageManager.Stub } } - if (!checkin && dumpState.isDumping(DumpState.DUMP_SNAPSHOT_STATISTICS)) { + if (!checkin + && dumpState.isDumping(DumpState.DUMP_SNAPSHOT_STATISTICS) + && packageName == null) { + if (dumpState.onTitlePrinted()) { + pw.println(); + } pw.println("Snapshot statistics"); if (!mSnapshotEnabled) { pw.println(" Snapshots disabled");