diff options
| -rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 0d190cafcd4e..b85cf2cf2495 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -60,6 +60,7 @@ import android.net.Uri; import android.os.Binder; import android.os.Build; import android.os.Bundle; +import android.os.Debug; import android.os.HandlerThread; import android.os.Parcel; import android.os.RemoteException; @@ -2046,8 +2047,9 @@ class PackageManagerService extends IPackageManager.Stub { + suid.userId + "): packages=" + suid.packages); } } - - // Just create the setting, don't add it yet + + // Just create the setting, don't add it yet. For already existing packages + // the PkgSetting exists already and doesn't have to be created. pkgSetting = mSettings.getPackageLP(pkg, suid, destCodeFile, destResourceFile, pkg.applicationInfo.flags, true, false); if (pkgSetting == null) { @@ -2272,7 +2274,7 @@ class PackageManagerService extends IPackageManager.Stub { // Add the new setting to mSettings mSettings.insertPackageSettingLP(pkgSetting, pkg.packageName, suid); // Add the new setting to mPackages - mPackages.put(pkg.applicationInfo.packageName, pkg); + mPackages.put(pkg.applicationInfo.packageName, pkg); int N = pkg.providers.size(); StringBuilder r = null; int i; @@ -5422,10 +5424,10 @@ class PackageManagerService extends IPackageManager.Stub { */ static class PackageSettingBase extends GrantedPermissions { final String name; - final File codePath; - final String codePathString; - final File resourcePath; - final String resourcePathString; + File codePath; + String codePathString; + File resourcePath; + String resourcePathString; private long timeStamp; private String timeStampString = "0"; final int versionCode; @@ -5823,11 +5825,16 @@ class PackageManagerService extends IPackageManager.Stub { // and data partition. Just let the most recent version // take precedence. return p; - } else if ((p.pkg != null) && (p.pkg.applicationInfo != null)) { + } else { // Let the app continue with previous uid if code path changes. reportSettingsProblem(Log.WARN, "Package " + name + " codePath changed from " + p.codePath - + " to " + codePath + "; Retaining data and using new code"); + + " to " + codePath + "; Retaining data and using new code from " + + codePath); + p.codePath = codePath; + p.resourcePath = resourcePath; + p.codePathString = codePath.toString(); + p.resourcePathString = resourcePath.toString(); } } else if (p.sharedUser != sharedUser) { reportSettingsProblem(Log.WARN, @@ -5851,6 +5858,7 @@ class PackageManagerService extends IPackageManager.Stub { if (sharedUser != null) { p.userId = sharedUser.userId; } else if (MULTIPLE_APPLICATION_UIDS) { + // Assign new user id p.userId = newUserIdLP(p); } else { p.userId = FIRST_APPLICATION_UID; |