summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/ActivityThread.java17
-rw-r--r--core/java/android/content/pm/ApplicationInfo.java11
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();
}
/**