diff options
| author | 2016-06-23 23:02:34 +0000 | |
|---|---|---|
| committer | 2016-06-23 23:02:35 +0000 | |
| commit | d73d2a3a3d9169cc9222f0f187d58800da4964ba (patch) | |
| tree | 36b633c0d3a1f19ff5548d7b55dcf0214a30690e | |
| parent | b8516f10297a857333480a6b401022b5dd3b733f (diff) | |
| parent | 8051a0a3958f8ff75ce36cd5b4eb09dfc95662b1 (diff) | |
Merge "fix last modified time" into nyc-mr1-dev
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 8bb3f980a51e..62cdefa17251 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6763,11 +6763,26 @@ public class PackageManagerService extends IPackageManager.Stub { } } + private long getLastModifiedTime(PackageParser.Package pkg, File srcFile) { + if (srcFile.isDirectory()) { + final File baseFile = new File(pkg.baseCodePath); + long maxModifiedTime = baseFile.lastModified(); + if (pkg.splitCodePaths != null) { + for (int i = pkg.splitCodePaths.length - 1; i >=0; --i) { + final File splitFile = new File(pkg.splitCodePaths[i]); + maxModifiedTime = Math.max(maxModifiedTime, splitFile.lastModified()); + } + } + return maxModifiedTime; + } + return srcFile.lastModified(); + } + private void collectCertificatesLI(PackageSetting ps, PackageParser.Package pkg, File srcFile, final int policyFlags) throws PackageManagerException { if (ps != null && ps.codePath.equals(srcFile) - && ps.timeStamp == srcFile.lastModified() + && ps.timeStamp == getLastModifiedTime(pkg, srcFile) && !isCompatSignatureUpdateNeeded(pkg) && !isRecoverSignatureUpdateNeeded(pkg)) { long mSigningKeySetId = ps.keySetData.getProperSigningKeySet(); @@ -8403,7 +8418,7 @@ public class PackageManagerService extends IPackageManager.Stub { final String pkgName = pkg.packageName; - final long scanFileTime = scanFile.lastModified(); + final long scanFileTime = getLastModifiedTime(pkg, scanFile); final boolean forceDex = (scanFlags & SCAN_FORCE_DEX) != 0; pkg.applicationInfo.processName = fixProcessName( pkg.applicationInfo.packageName, |