diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 17 | ||||
| -rw-r--r-- | core/java/android/content/pm/ApplicationInfo.java | 11 |
2 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 4ffe46ebe47d..1c53fbd4de49 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -38,10 +38,8 @@ import static android.window.ConfigurationHelper.shouldUpdateResources; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; -import android.annotation.ElapsedRealtimeLong; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.UptimeMillisLong; import android.app.RemoteServiceException.BadForegroundServiceNotificationException; import android.app.RemoteServiceException.CannotDeliverBroadcastException; import android.app.RemoteServiceException.CannotPostForegroundServiceNotificationException; @@ -2548,9 +2546,18 @@ public final class ActivityThread extends ClientTransactionHandler if (packageInfo != null) { if (!isLoadedApkResourceDirsUpToDate(packageInfo, aInfo)) { - List<String> oldPaths = new ArrayList<>(); - LoadedApk.makePaths(this, aInfo, oldPaths); - packageInfo.updateApplicationInfo(aInfo, oldPaths); + if (packageInfo.getApplicationInfo().createTimestamp > aInfo.createTimestamp) { + // The cached loaded apk is newer than the one passed in, we should not + // update the cached version + Slog.w(TAG, "getPackageInfo() called with an older ApplicationInfo " + + "than the cached version for package " + aInfo.packageName); + } else { + Slog.v(TAG, "getPackageInfo() caused update to cached ApplicationInfo " + + "for package " + aInfo.packageName); + List<String> oldPaths = new ArrayList<>(); + LoadedApk.makePaths(this, aInfo, oldPaths); + packageInfo.updateApplicationInfo(aInfo, oldPaths); + } } return packageInfo; diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 84c9fa9b375c..2998f764a2f3 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -1148,6 +1148,12 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public int versionCode; /** + * The timestamp of when this ApplicationInfo was created. + * @hide + */ + public long createTimestamp; + + /** * The user-visible SDK version (ex. 26) of the framework against which the application claims * to have been compiled, or {@code 0} if not specified. * <p> @@ -1639,6 +1645,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { + requestRawExternalStorageAccess); } } + pw.println(prefix + "createTimestamp=" + createTimestamp); super.dumpBack(pw, prefix); } @@ -1796,6 +1803,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { } public ApplicationInfo() { + createTimestamp = System.currentTimeMillis(); } public ApplicationInfo(ApplicationInfo orig) { @@ -1867,6 +1875,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { memtagMode = orig.memtagMode; nativeHeapZeroInitialized = orig.nativeHeapZeroInitialized; requestRawExternalStorageAccess = orig.requestRawExternalStorageAccess; + createTimestamp = System.currentTimeMillis(); } public String toString() { @@ -1957,6 +1966,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(memtagMode); dest.writeInt(nativeHeapZeroInitialized); sForBoolean.parcel(requestRawExternalStorageAccess, dest, parcelableFlags); + dest.writeLong(createTimestamp); } public static final @android.annotation.NonNull Parcelable.Creator<ApplicationInfo> CREATOR @@ -2044,6 +2054,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { memtagMode = source.readInt(); nativeHeapZeroInitialized = source.readInt(); requestRawExternalStorageAccess = sForBoolean.unparcel(source); + createTimestamp = source.readLong(); } /** |
