Loading core/java/android/content/pm/PackageManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,17 @@ public abstract class PackageManager { */ public static final int DELETE_ALL_USERS = 0x00000002; /** * Flag parameter for {@link #deletePackage} to indicate that, if you are calling * uninstall on a system that has been updated, then don't do the normal process * of uninstalling the update and rolling back to the older system version (which * needs to happen for all users); instead, just mark the app as uninstalled for * the current user. * * @hide */ public static final int DELETE_SYSTEM_APP = 0x00000004; /** * Return code for when package deletion succeeds. This is passed to the * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system Loading core/java/android/content/pm/PackageParser.java +24 −1 Original line number Diff line number Diff line Loading @@ -1941,6 +1941,28 @@ public class PackageParser { return false; } } else if (tagName.equals("library")) { sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestLibrary); // Note: don't allow this value to be a reference to a resource // that may change. String lname = sa.getNonResourceString( com.android.internal.R.styleable.AndroidManifestLibrary_name); sa.recycle(); if (lname != null) { if (owner.libraryNames == null) { owner.libraryNames = new ArrayList<String>(); } if (!owner.libraryNames.contains(lname)) { owner.libraryNames.add(lname.intern()); } } XmlUtils.skipCurrentTag(parser); } else if (tagName.equals("uses-library")) { sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestUsesLibrary); Loading Loading @@ -3183,6 +3205,7 @@ public class PackageParser { public ArrayList<String> protectedBroadcasts; public ArrayList<String> libraryNames = null; public ArrayList<String> usesLibraries = null; public ArrayList<String> usesOptionalLibraries = null; public String[] usesLibraryFiles = null; Loading core/res/res/values/attrs_manifest.xml +15 −0 Original line number Diff line number Diff line Loading @@ -1065,6 +1065,21 @@ <attr name="maxSdkVersion" format="integer" /> </declare-styleable> <!-- The <code>library</code> tag declares that this apk is providing itself as a shared library for other applications to use. It can only be used with apks that are built in to the system image. Other apks can link to it with the {@link #AndroidManifestUsesLibrary uses-library} tag. <p>This appears as a child tag of the {@link #AndroidManifestApplication application} tag. --> <declare-styleable name="AndroidManifestLibrary" parent="AndroidManifest"> <!-- Required public name of the library, which other components and packages will use when referring to this library. This is a string using Java-style scoping to ensure it is unique. The name should typically be the same as the apk's package name. --> <attr name="name" /> </declare-styleable> <!-- The <code>uses-libraries</code> specifies a shared library that this package requires to be linked against. Specifying this flag tells the system to include this library's code in your class loader. Loading services/java/com/android/server/pm/PackageManagerService.java +402 −71 File changed.Preview size limit exceeded, changes collapsed. Show changes services/java/com/android/server/pm/Settings.java +158 −139 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import android.util.LogPrinter; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; import com.android.internal.util.XmlUtils; import com.android.server.IntentResolver; import com.android.server.pm.PackageManagerService.DumpState; import org.xmlpull.v1.XmlPullParser; Loading Loading @@ -2657,56 +2656,44 @@ final class Settings { ApplicationInfo.FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE", }; void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState) { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date date = new Date(); boolean printedSomething = false; List<UserInfo> users = getAllUsers(); for (final PackageSetting ps : mPackages.values()) { if (packageName != null && !packageName.equals(ps.realName) && !packageName.equals(ps.name)) { continue; } if (packageName != null) { dumpState.setSharedUser(ps.sharedUser); } if (!printedSomething) { if (dumpState.onTitlePrinted()) pw.println(" "); pw.println("Packages:"); printedSomething = true; } pw.print(" Package ["); void dumpPackageLPr(PrintWriter pw, String prefix, PackageSetting ps, SimpleDateFormat sdf, Date date, List<UserInfo> users) { pw.print(prefix); pw.print("Package ["); pw.print(ps.realName != null ? ps.realName : ps.name); pw.print("] ("); pw.print(Integer.toHexString(System.identityHashCode(ps))); pw.println("):"); if (ps.realName != null) { pw.print(" compat name="); pw.print(prefix); pw.print(" compat name="); pw.println(ps.name); } pw.print(" userId="); pw.print(ps.appId); pw.print(prefix); pw.print(" userId="); pw.print(ps.appId); pw.print(" gids="); pw.println(PackageManagerService.arrayToString(ps.gids)); pw.print(" sharedUser="); pw.println(ps.sharedUser); pw.print(" pkg="); pw.println(ps.pkg); pw.print(" codePath="); pw.println(ps.codePathString); pw.print(" resourcePath="); pw.println(ps.resourcePathString); pw.print(" nativeLibraryPath="); pw.println(ps.nativeLibraryPathString); pw.print(" versionCode="); pw.println(ps.versionCode); if (ps.sharedUser != null) { pw.print(prefix); pw.print(" sharedUser="); pw.println(ps.sharedUser); } pw.print(prefix); pw.print(" pkg="); pw.println(ps.pkg); pw.print(prefix); pw.print(" codePath="); pw.println(ps.codePathString); pw.print(prefix); pw.print(" resourcePath="); pw.println(ps.resourcePathString); pw.print(prefix); pw.print(" nativeLibraryPath="); pw.println(ps.nativeLibraryPathString); pw.print(prefix); pw.print(" versionCode="); pw.print(ps.versionCode); if (ps.pkg != null) { pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); pw.print(" flags="); printFlags(pw, ps.pkg.applicationInfo.flags, FLAG_DUMP_SPEC); pw.println(); pw.print(" versionName="); pw.println(ps.pkg.mVersionName); pw.print(" dataDir="); pw.println(ps.pkg.applicationInfo.dataDir); pw.print(" targetSdk="); pw.println(ps.pkg.applicationInfo.targetSdkVersion); pw.print(" targetSdk="); pw.print(ps.pkg.applicationInfo.targetSdkVersion); } pw.println(); if (ps.pkg != null) { pw.print(prefix); pw.print(" versionName="); pw.println(ps.pkg.mVersionName); pw.print(prefix); pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); pw.print(prefix); pw.print(" flags="); printFlags(pw, ps.pkg.applicationInfo.flags, FLAG_DUMP_SPEC); pw.println(); pw.print(prefix); pw.print(" dataDir="); pw.println(ps.pkg.applicationInfo.dataDir); if (ps.pkg.mOperationPending) { pw.println(" mOperationPending=true"); pw.print(prefix); pw.println(" mOperationPending=true"); } pw.print(" supportsScreens=["); pw.print(prefix); pw.print(" supportsScreens=["); boolean first = true; if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS) != 0) { if (!first) Loading Loading @@ -2745,27 +2732,55 @@ final class Settings { pw.print("anyDensity"); } pw.println("]"); if (ps.pkg.libraryNames != null && ps.pkg.libraryNames.size() > 0) { pw.print(prefix); pw.println(" libraries:"); for (int i=0; i<ps.pkg.libraryNames.size(); i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.libraryNames.get(i)); } } pw.print(" timeStamp="); if (ps.pkg.usesLibraries != null && ps.pkg.usesLibraries.size() > 0) { pw.print(prefix); pw.println(" usesLibraries:"); for (int i=0; i<ps.pkg.usesLibraries.size(); i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesLibraries.get(i)); } } if (ps.pkg.usesOptionalLibraries != null && ps.pkg.usesOptionalLibraries.size() > 0) { pw.print(prefix); pw.println(" usesOptionalLibraries:"); for (int i=0; i<ps.pkg.usesOptionalLibraries.size(); i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesOptionalLibraries.get(i)); } } if (ps.pkg.usesLibraryFiles != null && ps.pkg.usesLibraryFiles.length > 0) { pw.print(prefix); pw.println(" usesLibraryFiles:"); for (int i=0; i<ps.pkg.usesLibraryFiles.length; i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesLibraryFiles[i]); } } } pw.print(prefix); pw.print(" timeStamp="); date.setTime(ps.timeStamp); pw.println(sdf.format(date)); pw.print(" firstInstallTime="); pw.print(prefix); pw.print(" firstInstallTime="); date.setTime(ps.firstInstallTime); pw.println(sdf.format(date)); pw.print(" lastUpdateTime="); pw.print(prefix); pw.print(" lastUpdateTime="); date.setTime(ps.lastUpdateTime); pw.println(sdf.format(date)); if (ps.installerPackageName != null) { pw.print(" installerPackageName="); pw.println(ps.installerPackageName); pw.print(prefix); pw.print(" installerPackageName="); pw.println(ps.installerPackageName); } pw.print(" signatures="); pw.println(ps.signatures); pw.print(" permissionsFixed="); pw.print(ps.permissionsFixed); pw.print(prefix); pw.print(" signatures="); pw.println(ps.signatures); pw.print(prefix); pw.print(" permissionsFixed="); pw.print(ps.permissionsFixed); pw.print(" haveGids="); pw.print(ps.haveGids); pw.print(" installStatus="); pw.println(ps.installStatus); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC); pw.print(prefix); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC); pw.println(); for (UserInfo user : users) { pw.print(" User "); pw.print(user.id); pw.print(": "); pw.print(prefix); pw.print(" User "); pw.print(user.id); pw.print(": "); pw.print(" installed="); pw.print(ps.getInstalled(user.id)); pw.print(" stopped="); Loading @@ -2776,27 +2791,51 @@ final class Settings { pw.println(ps.getEnabled(user.id)); HashSet<String> cmp = ps.getDisabledComponents(user.id); if (cmp != null && cmp.size() > 0) { pw.println(" disabledComponents:"); pw.print(prefix); pw.println(" disabledComponents:"); for (String s : cmp) { pw.print(" "); pw.println(s); pw.print(prefix); pw.print(" "); pw.println(s); } } cmp = ps.getEnabledComponents(user.id); if (cmp != null && cmp.size() > 0) { pw.println(" enabledComponents:"); pw.print(prefix); pw.println(" enabledComponents:"); for (String s : cmp) { pw.print(" "); pw.println(s); pw.print(prefix); pw.print(" "); pw.println(s); } } } if (ps.grantedPermissions.size() > 0) { pw.println(" grantedPermissions:"); pw.print(prefix); pw.println(" grantedPermissions:"); for (String s : ps.grantedPermissions) { pw.print(" "); pw.println(s); pw.print(prefix); pw.print(" "); pw.println(s); } } } void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState) { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date date = new Date(); boolean printedSomething = false; List<UserInfo> users = getAllUsers(); for (final PackageSetting ps : mPackages.values()) { if (packageName != null && !packageName.equals(ps.realName) && !packageName.equals(ps.name)) { continue; } if (packageName != null) { dumpState.setSharedUser(ps.sharedUser); } if (!printedSomething) { if (dumpState.onTitlePrinted()) pw.println(" "); pw.println("Packages:"); printedSomething = true; } dumpPackageLPr(pw, " ", ps, sdf, date, users); } printedSomething = false; if (mRenamedPackages.size() > 0) { for (final Map.Entry<String, String> e : mRenamedPackages.entrySet()) { Loading Loading @@ -2830,27 +2869,7 @@ final class Settings { pw.println("Hidden system packages:"); printedSomething = true; } pw.print(" Package ["); pw.print(ps.realName != null ? ps.realName : ps.name); pw.print("] ("); pw.print(Integer.toHexString(System.identityHashCode(ps))); pw.println("):"); if (ps.realName != null) { pw.print(" compat name="); pw.println(ps.name); } if (ps.pkg != null && ps.pkg.applicationInfo != null) { pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); } pw.print(" userId="); pw.println(ps.appId); pw.print(" sharedUser="); pw.println(ps.sharedUser); pw.print(" codePath="); pw.println(ps.codePathString); pw.print(" resourcePath="); pw.println(ps.resourcePathString); dumpPackageLPr(pw, " ", ps, sdf, date, users); } } } Loading Loading
core/java/android/content/pm/PackageManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,17 @@ public abstract class PackageManager { */ public static final int DELETE_ALL_USERS = 0x00000002; /** * Flag parameter for {@link #deletePackage} to indicate that, if you are calling * uninstall on a system that has been updated, then don't do the normal process * of uninstalling the update and rolling back to the older system version (which * needs to happen for all users); instead, just mark the app as uninstalled for * the current user. * * @hide */ public static final int DELETE_SYSTEM_APP = 0x00000004; /** * Return code for when package deletion succeeds. This is passed to the * {@link IPackageDeleteObserver} by {@link #deletePackage()} if the system Loading
core/java/android/content/pm/PackageParser.java +24 −1 Original line number Diff line number Diff line Loading @@ -1941,6 +1941,28 @@ public class PackageParser { return false; } } else if (tagName.equals("library")) { sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestLibrary); // Note: don't allow this value to be a reference to a resource // that may change. String lname = sa.getNonResourceString( com.android.internal.R.styleable.AndroidManifestLibrary_name); sa.recycle(); if (lname != null) { if (owner.libraryNames == null) { owner.libraryNames = new ArrayList<String>(); } if (!owner.libraryNames.contains(lname)) { owner.libraryNames.add(lname.intern()); } } XmlUtils.skipCurrentTag(parser); } else if (tagName.equals("uses-library")) { sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestUsesLibrary); Loading Loading @@ -3183,6 +3205,7 @@ public class PackageParser { public ArrayList<String> protectedBroadcasts; public ArrayList<String> libraryNames = null; public ArrayList<String> usesLibraries = null; public ArrayList<String> usesOptionalLibraries = null; public String[] usesLibraryFiles = null; Loading
core/res/res/values/attrs_manifest.xml +15 −0 Original line number Diff line number Diff line Loading @@ -1065,6 +1065,21 @@ <attr name="maxSdkVersion" format="integer" /> </declare-styleable> <!-- The <code>library</code> tag declares that this apk is providing itself as a shared library for other applications to use. It can only be used with apks that are built in to the system image. Other apks can link to it with the {@link #AndroidManifestUsesLibrary uses-library} tag. <p>This appears as a child tag of the {@link #AndroidManifestApplication application} tag. --> <declare-styleable name="AndroidManifestLibrary" parent="AndroidManifest"> <!-- Required public name of the library, which other components and packages will use when referring to this library. This is a string using Java-style scoping to ensure it is unique. The name should typically be the same as the apk's package name. --> <attr name="name" /> </declare-styleable> <!-- The <code>uses-libraries</code> specifies a shared library that this package requires to be linked against. Specifying this flag tells the system to include this library's code in your class loader. Loading
services/java/com/android/server/pm/PackageManagerService.java +402 −71 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/java/com/android/server/pm/Settings.java +158 −139 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import android.util.LogPrinter; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; import com.android.internal.util.XmlUtils; import com.android.server.IntentResolver; import com.android.server.pm.PackageManagerService.DumpState; import org.xmlpull.v1.XmlPullParser; Loading Loading @@ -2657,56 +2656,44 @@ final class Settings { ApplicationInfo.FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE", }; void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState) { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date date = new Date(); boolean printedSomething = false; List<UserInfo> users = getAllUsers(); for (final PackageSetting ps : mPackages.values()) { if (packageName != null && !packageName.equals(ps.realName) && !packageName.equals(ps.name)) { continue; } if (packageName != null) { dumpState.setSharedUser(ps.sharedUser); } if (!printedSomething) { if (dumpState.onTitlePrinted()) pw.println(" "); pw.println("Packages:"); printedSomething = true; } pw.print(" Package ["); void dumpPackageLPr(PrintWriter pw, String prefix, PackageSetting ps, SimpleDateFormat sdf, Date date, List<UserInfo> users) { pw.print(prefix); pw.print("Package ["); pw.print(ps.realName != null ? ps.realName : ps.name); pw.print("] ("); pw.print(Integer.toHexString(System.identityHashCode(ps))); pw.println("):"); if (ps.realName != null) { pw.print(" compat name="); pw.print(prefix); pw.print(" compat name="); pw.println(ps.name); } pw.print(" userId="); pw.print(ps.appId); pw.print(prefix); pw.print(" userId="); pw.print(ps.appId); pw.print(" gids="); pw.println(PackageManagerService.arrayToString(ps.gids)); pw.print(" sharedUser="); pw.println(ps.sharedUser); pw.print(" pkg="); pw.println(ps.pkg); pw.print(" codePath="); pw.println(ps.codePathString); pw.print(" resourcePath="); pw.println(ps.resourcePathString); pw.print(" nativeLibraryPath="); pw.println(ps.nativeLibraryPathString); pw.print(" versionCode="); pw.println(ps.versionCode); if (ps.sharedUser != null) { pw.print(prefix); pw.print(" sharedUser="); pw.println(ps.sharedUser); } pw.print(prefix); pw.print(" pkg="); pw.println(ps.pkg); pw.print(prefix); pw.print(" codePath="); pw.println(ps.codePathString); pw.print(prefix); pw.print(" resourcePath="); pw.println(ps.resourcePathString); pw.print(prefix); pw.print(" nativeLibraryPath="); pw.println(ps.nativeLibraryPathString); pw.print(prefix); pw.print(" versionCode="); pw.print(ps.versionCode); if (ps.pkg != null) { pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); pw.print(" flags="); printFlags(pw, ps.pkg.applicationInfo.flags, FLAG_DUMP_SPEC); pw.println(); pw.print(" versionName="); pw.println(ps.pkg.mVersionName); pw.print(" dataDir="); pw.println(ps.pkg.applicationInfo.dataDir); pw.print(" targetSdk="); pw.println(ps.pkg.applicationInfo.targetSdkVersion); pw.print(" targetSdk="); pw.print(ps.pkg.applicationInfo.targetSdkVersion); } pw.println(); if (ps.pkg != null) { pw.print(prefix); pw.print(" versionName="); pw.println(ps.pkg.mVersionName); pw.print(prefix); pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); pw.print(prefix); pw.print(" flags="); printFlags(pw, ps.pkg.applicationInfo.flags, FLAG_DUMP_SPEC); pw.println(); pw.print(prefix); pw.print(" dataDir="); pw.println(ps.pkg.applicationInfo.dataDir); if (ps.pkg.mOperationPending) { pw.println(" mOperationPending=true"); pw.print(prefix); pw.println(" mOperationPending=true"); } pw.print(" supportsScreens=["); pw.print(prefix); pw.print(" supportsScreens=["); boolean first = true; if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS) != 0) { if (!first) Loading Loading @@ -2745,27 +2732,55 @@ final class Settings { pw.print("anyDensity"); } pw.println("]"); if (ps.pkg.libraryNames != null && ps.pkg.libraryNames.size() > 0) { pw.print(prefix); pw.println(" libraries:"); for (int i=0; i<ps.pkg.libraryNames.size(); i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.libraryNames.get(i)); } } pw.print(" timeStamp="); if (ps.pkg.usesLibraries != null && ps.pkg.usesLibraries.size() > 0) { pw.print(prefix); pw.println(" usesLibraries:"); for (int i=0; i<ps.pkg.usesLibraries.size(); i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesLibraries.get(i)); } } if (ps.pkg.usesOptionalLibraries != null && ps.pkg.usesOptionalLibraries.size() > 0) { pw.print(prefix); pw.println(" usesOptionalLibraries:"); for (int i=0; i<ps.pkg.usesOptionalLibraries.size(); i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesOptionalLibraries.get(i)); } } if (ps.pkg.usesLibraryFiles != null && ps.pkg.usesLibraryFiles.length > 0) { pw.print(prefix); pw.println(" usesLibraryFiles:"); for (int i=0; i<ps.pkg.usesLibraryFiles.length; i++) { pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesLibraryFiles[i]); } } } pw.print(prefix); pw.print(" timeStamp="); date.setTime(ps.timeStamp); pw.println(sdf.format(date)); pw.print(" firstInstallTime="); pw.print(prefix); pw.print(" firstInstallTime="); date.setTime(ps.firstInstallTime); pw.println(sdf.format(date)); pw.print(" lastUpdateTime="); pw.print(prefix); pw.print(" lastUpdateTime="); date.setTime(ps.lastUpdateTime); pw.println(sdf.format(date)); if (ps.installerPackageName != null) { pw.print(" installerPackageName="); pw.println(ps.installerPackageName); pw.print(prefix); pw.print(" installerPackageName="); pw.println(ps.installerPackageName); } pw.print(" signatures="); pw.println(ps.signatures); pw.print(" permissionsFixed="); pw.print(ps.permissionsFixed); pw.print(prefix); pw.print(" signatures="); pw.println(ps.signatures); pw.print(prefix); pw.print(" permissionsFixed="); pw.print(ps.permissionsFixed); pw.print(" haveGids="); pw.print(ps.haveGids); pw.print(" installStatus="); pw.println(ps.installStatus); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC); pw.print(prefix); pw.print(" pkgFlags="); printFlags(pw, ps.pkgFlags, FLAG_DUMP_SPEC); pw.println(); for (UserInfo user : users) { pw.print(" User "); pw.print(user.id); pw.print(": "); pw.print(prefix); pw.print(" User "); pw.print(user.id); pw.print(": "); pw.print(" installed="); pw.print(ps.getInstalled(user.id)); pw.print(" stopped="); Loading @@ -2776,27 +2791,51 @@ final class Settings { pw.println(ps.getEnabled(user.id)); HashSet<String> cmp = ps.getDisabledComponents(user.id); if (cmp != null && cmp.size() > 0) { pw.println(" disabledComponents:"); pw.print(prefix); pw.println(" disabledComponents:"); for (String s : cmp) { pw.print(" "); pw.println(s); pw.print(prefix); pw.print(" "); pw.println(s); } } cmp = ps.getEnabledComponents(user.id); if (cmp != null && cmp.size() > 0) { pw.println(" enabledComponents:"); pw.print(prefix); pw.println(" enabledComponents:"); for (String s : cmp) { pw.print(" "); pw.println(s); pw.print(prefix); pw.print(" "); pw.println(s); } } } if (ps.grantedPermissions.size() > 0) { pw.println(" grantedPermissions:"); pw.print(prefix); pw.println(" grantedPermissions:"); for (String s : ps.grantedPermissions) { pw.print(" "); pw.println(s); pw.print(prefix); pw.print(" "); pw.println(s); } } } void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState) { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date date = new Date(); boolean printedSomething = false; List<UserInfo> users = getAllUsers(); for (final PackageSetting ps : mPackages.values()) { if (packageName != null && !packageName.equals(ps.realName) && !packageName.equals(ps.name)) { continue; } if (packageName != null) { dumpState.setSharedUser(ps.sharedUser); } if (!printedSomething) { if (dumpState.onTitlePrinted()) pw.println(" "); pw.println("Packages:"); printedSomething = true; } dumpPackageLPr(pw, " ", ps, sdf, date, users); } printedSomething = false; if (mRenamedPackages.size() > 0) { for (final Map.Entry<String, String> e : mRenamedPackages.entrySet()) { Loading Loading @@ -2830,27 +2869,7 @@ final class Settings { pw.println("Hidden system packages:"); printedSomething = true; } pw.print(" Package ["); pw.print(ps.realName != null ? ps.realName : ps.name); pw.print("] ("); pw.print(Integer.toHexString(System.identityHashCode(ps))); pw.println("):"); if (ps.realName != null) { pw.print(" compat name="); pw.println(ps.name); } if (ps.pkg != null && ps.pkg.applicationInfo != null) { pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); } pw.print(" userId="); pw.println(ps.appId); pw.print(" sharedUser="); pw.println(ps.sharedUser); pw.print(" codePath="); pw.println(ps.codePathString); pw.print(" resourcePath="); pw.println(ps.resourcePathString); dumpPackageLPr(pw, " ", ps, sdf, date, users); } } } Loading