* commit '40a26004810623f02546a31cb0ce49a0502bdff7': Issue #13308712: Add --checkin to package manager dump.
This commit is contained in:
@@ -10576,7 +10576,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
|
|
||||||
DumpState dumpState = new DumpState();
|
DumpState dumpState = new DumpState();
|
||||||
boolean fullPreferred = false;
|
boolean fullPreferred = false;
|
||||||
|
boolean checkin = false;
|
||||||
|
|
||||||
String packageName = null;
|
String packageName = null;
|
||||||
|
|
||||||
int opti = 0;
|
int opti = 0;
|
||||||
@@ -10590,7 +10591,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
// Right now we only know how to print all.
|
// Right now we only know how to print all.
|
||||||
} else if ("-h".equals(opt)) {
|
} else if ("-h".equals(opt)) {
|
||||||
pw.println("Package manager dump options:");
|
pw.println("Package manager dump options:");
|
||||||
pw.println(" [-h] [-f] [cmd] ...");
|
pw.println(" [-h] [-f] [--checkin] [cmd] ...");
|
||||||
|
pw.println(" --checkin: dump for a checkin");
|
||||||
pw.println(" -f: print details of intent filters");
|
pw.println(" -f: print details of intent filters");
|
||||||
pw.println(" -h: print this help");
|
pw.println(" -h: print this help");
|
||||||
pw.println(" cmd may be one of:");
|
pw.println(" cmd may be one of:");
|
||||||
@@ -10608,13 +10610,15 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
pw.println(" <package.name>: info about given package");
|
pw.println(" <package.name>: info about given package");
|
||||||
pw.println(" k[eysets]: print known keysets");
|
pw.println(" k[eysets]: print known keysets");
|
||||||
return;
|
return;
|
||||||
|
} else if ("--checkin".equals(opt)) {
|
||||||
|
checkin = true;
|
||||||
} else if ("-f".equals(opt)) {
|
} else if ("-f".equals(opt)) {
|
||||||
dumpState.setOptionEnabled(DumpState.OPTION_SHOW_FILTERS);
|
dumpState.setOptionEnabled(DumpState.OPTION_SHOW_FILTERS);
|
||||||
} else {
|
} else {
|
||||||
pw.println("Unknown argument: " + opt + "; use -h for help");
|
pw.println("Unknown argument: " + opt + "; use -h for help");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is the caller requesting to dump a particular piece of data?
|
// Is the caller requesting to dump a particular piece of data?
|
||||||
if (opti < args.length) {
|
if (opti < args.length) {
|
||||||
String cmd = args[opti];
|
String cmd = args[opti];
|
||||||
@@ -10656,17 +10660,26 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (checkin) {
|
||||||
|
pw.println("vers,1");
|
||||||
|
}
|
||||||
|
|
||||||
// reader
|
// reader
|
||||||
synchronized (mPackages) {
|
synchronized (mPackages) {
|
||||||
if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) {
|
if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (!checkin) {
|
||||||
pw.println();
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println("Verifiers:");
|
pw.println();
|
||||||
pw.print(" Required: ");
|
pw.println("Verifiers:");
|
||||||
pw.print(mRequiredVerifierPackage);
|
pw.print(" Required: ");
|
||||||
pw.print(" (uid=");
|
pw.print(mRequiredVerifierPackage);
|
||||||
pw.print(getPackageUid(mRequiredVerifierPackage, 0));
|
pw.print(" (uid=");
|
||||||
pw.println(")");
|
pw.print(getPackageUid(mRequiredVerifierPackage, 0));
|
||||||
|
pw.println(")");
|
||||||
|
} else if (mRequiredVerifierPackage != null) {
|
||||||
|
pw.print("vrfy,"); pw.print(mRequiredVerifierPackage);
|
||||||
|
pw.print(","); pw.println(getPackageUid(mRequiredVerifierPackage, 0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_LIBS) && packageName == null) {
|
if (dumpState.isDumping(DumpState.DUMP_LIBS) && packageName == null) {
|
||||||
@@ -10675,21 +10688,37 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
String name = it.next();
|
String name = it.next();
|
||||||
SharedLibraryEntry ent = mSharedLibraries.get(name);
|
SharedLibraryEntry ent = mSharedLibraries.get(name);
|
||||||
if (!printedHeader) {
|
if (!checkin) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (!printedHeader) {
|
||||||
pw.println();
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println("Libraries:");
|
pw.println();
|
||||||
printedHeader = true;
|
pw.println("Libraries:");
|
||||||
}
|
printedHeader = true;
|
||||||
pw.print(" ");
|
}
|
||||||
pw.print(name);
|
pw.print(" ");
|
||||||
pw.print(" -> ");
|
|
||||||
if (ent.path != null) {
|
|
||||||
pw.print("(jar) ");
|
|
||||||
pw.print(ent.path);
|
|
||||||
} else {
|
} else {
|
||||||
pw.print("(apk) ");
|
pw.print("lib,");
|
||||||
pw.print(ent.apk);
|
}
|
||||||
|
pw.print(name);
|
||||||
|
if (!checkin) {
|
||||||
|
pw.print(" -> ");
|
||||||
|
}
|
||||||
|
if (ent.path != null) {
|
||||||
|
if (!checkin) {
|
||||||
|
pw.print("(jar) ");
|
||||||
|
pw.print(ent.path);
|
||||||
|
} else {
|
||||||
|
pw.print(",jar,");
|
||||||
|
pw.print(ent.path);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!checkin) {
|
||||||
|
pw.print("(apk) ");
|
||||||
|
pw.print(ent.apk);
|
||||||
|
} else {
|
||||||
|
pw.print(",apk,");
|
||||||
|
pw.print(ent.apk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pw.println();
|
pw.println();
|
||||||
}
|
}
|
||||||
@@ -10698,16 +10727,22 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
if (dumpState.isDumping(DumpState.DUMP_FEATURES) && packageName == null) {
|
if (dumpState.isDumping(DumpState.DUMP_FEATURES) && packageName == null) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println();
|
pw.println();
|
||||||
pw.println("Features:");
|
if (!checkin) {
|
||||||
|
pw.println("Features:");
|
||||||
|
}
|
||||||
Iterator<String> it = mAvailableFeatures.keySet().iterator();
|
Iterator<String> it = mAvailableFeatures.keySet().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
String name = it.next();
|
String name = it.next();
|
||||||
pw.print(" ");
|
if (!checkin) {
|
||||||
|
pw.print(" ");
|
||||||
|
} else {
|
||||||
|
pw.print("feat,");
|
||||||
|
}
|
||||||
pw.println(name);
|
pw.println(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_RESOLVERS)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_RESOLVERS)) {
|
||||||
if (mActivities.dump(pw, dumpState.getTitlePrinted() ? "\nActivity Resolver Table:"
|
if (mActivities.dump(pw, dumpState.getTitlePrinted() ? "\nActivity Resolver Table:"
|
||||||
: "Activity Resolver Table:", " ", packageName,
|
: "Activity Resolver Table:", " ", packageName,
|
||||||
dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
|
dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
|
||||||
@@ -10730,7 +10765,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
|
||||||
for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
|
for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
|
||||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
|
PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
|
||||||
int user = mSettings.mPreferredActivities.keyAt(i);
|
int user = mSettings.mPreferredActivities.keyAt(i);
|
||||||
@@ -10744,7 +10779,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
|
||||||
pw.flush();
|
pw.flush();
|
||||||
FileOutputStream fout = new FileOutputStream(fd);
|
FileOutputStream fout = new FileOutputStream(fd);
|
||||||
BufferedOutputStream str = new BufferedOutputStream(fout);
|
BufferedOutputStream str = new BufferedOutputStream(fout);
|
||||||
@@ -10766,11 +10801,11 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
|
||||||
mSettings.dumpPermissionsLPr(pw, packageName, dumpState);
|
mSettings.dumpPermissionsLPr(pw, packageName, dumpState);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_PROVIDERS)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_PROVIDERS)) {
|
||||||
boolean printedSomething = false;
|
boolean printedSomething = false;
|
||||||
for (PackageParser.Provider p : mProviders.mProviders.values()) {
|
for (PackageParser.Provider p : mProviders.mProviders.values()) {
|
||||||
if (packageName != null && !packageName.equals(p.info.packageName)) {
|
if (packageName != null && !packageName.equals(p.info.packageName)) {
|
||||||
@@ -10807,19 +10842,19 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_KEYSETS)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_KEYSETS)) {
|
||||||
mSettings.mKeySetManager.dump(pw, packageName, dumpState);
|
mSettings.mKeySetManager.dump(pw, packageName, dumpState);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_PACKAGES)) {
|
if (dumpState.isDumping(DumpState.DUMP_PACKAGES)) {
|
||||||
mSettings.dumpPackagesLPr(pw, packageName, dumpState);
|
mSettings.dumpPackagesLPr(pw, packageName, dumpState, checkin);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) {
|
||||||
mSettings.dumpSharedUsersLPr(pw, packageName, dumpState);
|
mSettings.dumpSharedUsersLPr(pw, packageName, dumpState);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dumpState.isDumping(DumpState.DUMP_MESSAGES) && packageName == null) {
|
if (!checkin && dumpState.isDumping(DumpState.DUMP_MESSAGES) && packageName == null) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println();
|
pw.println();
|
||||||
mSettings.dumpReadMessagesLPr(pw, dumpState);
|
mSettings.dumpReadMessagesLPr(pw, dumpState);
|
||||||
|
|||||||
@@ -2891,8 +2891,44 @@ final class Settings {
|
|||||||
ApplicationInfo.FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE",
|
ApplicationInfo.FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE",
|
||||||
};
|
};
|
||||||
|
|
||||||
void dumpPackageLPr(PrintWriter pw, String prefix, PackageSetting ps, SimpleDateFormat sdf,
|
void dumpPackageLPr(PrintWriter pw, String prefix, String checkinTag, PackageSetting ps,
|
||||||
Date date, List<UserInfo> users) {
|
SimpleDateFormat sdf, Date date, List<UserInfo> users) {
|
||||||
|
if (checkinTag != null) {
|
||||||
|
pw.print(checkinTag);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.realName != null ? ps.realName : ps.name);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.appId);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.versionCode);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.firstInstallTime);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.lastUpdateTime);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.installerPackageName != null ? ps.installerPackageName : "?");
|
||||||
|
pw.println();
|
||||||
|
for (UserInfo user : users) {
|
||||||
|
pw.print(checkinTag);
|
||||||
|
pw.print("-");
|
||||||
|
pw.print("usr");
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(user.id);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.getInstalled(user.id) ? "I" : "i");
|
||||||
|
pw.print(ps.getBlocked(user.id) ? "B" : "b");
|
||||||
|
pw.print(ps.getStopped(user.id) ? "S" : "s");
|
||||||
|
pw.print(ps.getNotLaunched(user.id) ? "l" : "L");
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(ps.getEnabled(user.id));
|
||||||
|
String lastDisabledAppCaller = ps.getLastDisabledAppCaller(user.id);
|
||||||
|
pw.print(",");
|
||||||
|
pw.print(lastDisabledAppCaller != null ? lastDisabledAppCaller : "?");
|
||||||
|
pw.println();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pw.print(prefix); pw.print("Package [");
|
pw.print(prefix); pw.print("Package [");
|
||||||
pw.print(ps.realName != null ? ps.realName : ps.name);
|
pw.print(ps.realName != null ? ps.realName : ps.name);
|
||||||
pw.print("] (");
|
pw.print("] (");
|
||||||
@@ -3054,7 +3090,7 @@ final class Settings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState) {
|
void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState, boolean checkin) {
|
||||||
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
final Date date = new Date();
|
final Date date = new Date();
|
||||||
boolean printedSomething = false;
|
boolean printedSomething = false;
|
||||||
@@ -3065,35 +3101,39 @@ final class Settings {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packageName != null) {
|
if (!checkin && packageName != null) {
|
||||||
dumpState.setSharedUser(ps.sharedUser);
|
dumpState.setSharedUser(ps.sharedUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!printedSomething) {
|
if (!checkin && !printedSomething) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println();
|
pw.println();
|
||||||
pw.println("Packages:");
|
pw.println("Packages:");
|
||||||
printedSomething = true;
|
printedSomething = true;
|
||||||
}
|
}
|
||||||
dumpPackageLPr(pw, " ", ps, sdf, date, users);
|
dumpPackageLPr(pw, " ", checkin ? "pkg" : null, ps, sdf, date, users);
|
||||||
}
|
}
|
||||||
|
|
||||||
printedSomething = false;
|
printedSomething = false;
|
||||||
if (mRenamedPackages.size() > 0) {
|
if (!checkin && mRenamedPackages.size() > 0) {
|
||||||
for (final Map.Entry<String, String> e : mRenamedPackages.entrySet()) {
|
for (final Map.Entry<String, String> e : mRenamedPackages.entrySet()) {
|
||||||
if (packageName != null && !packageName.equals(e.getKey())
|
if (packageName != null && !packageName.equals(e.getKey())
|
||||||
&& !packageName.equals(e.getValue())) {
|
&& !packageName.equals(e.getValue())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!printedSomething) {
|
if (!checkin) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (!printedSomething) {
|
||||||
pw.println();
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println("Renamed packages:");
|
pw.println();
|
||||||
printedSomething = true;
|
pw.println("Renamed packages:");
|
||||||
|
printedSomething = true;
|
||||||
|
}
|
||||||
|
pw.print(" ");
|
||||||
|
} else {
|
||||||
|
pw.print("ren,");
|
||||||
}
|
}
|
||||||
pw.print(" ");
|
|
||||||
pw.print(e.getKey());
|
pw.print(e.getKey());
|
||||||
pw.print(" -> ");
|
pw.print(checkin ? " -> " : ",");
|
||||||
pw.println(e.getValue());
|
pw.println(e.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3105,13 +3145,13 @@ final class Settings {
|
|||||||
&& !packageName.equals(ps.name)) {
|
&& !packageName.equals(ps.name)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!printedSomething) {
|
if (!checkin && !printedSomething) {
|
||||||
if (dumpState.onTitlePrinted())
|
if (dumpState.onTitlePrinted())
|
||||||
pw.println();
|
pw.println();
|
||||||
pw.println("Hidden system packages:");
|
pw.println("Hidden system packages:");
|
||||||
printedSomething = true;
|
printedSomething = true;
|
||||||
}
|
}
|
||||||
dumpPackageLPr(pw, " ", ps, sdf, date, users);
|
dumpPackageLPr(pw, " ", checkin ? "dis" : null, ps, sdf, date, users);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user