summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Narayan Kamath <narayan@google.com> 2014-05-01 14:39:16 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2014-05-01 14:39:16 +0000
commitd6809b35aff02fdccf7ac433005aba2d06bbc3ff (patch)
tree0081104a611fd7589064c782e2a34e2685616ee2
parentfbd80b58db2aa8f650acf26305e8cbed24a5755b (diff)
parentc1f81f9086037dde6e082b8a80c84277cb727726 (diff)
am c1f81f90: am 27f2bfc4: Merge "Fix dex file pruning logic."
* commit 'c1f81f9086037dde6e082b8a80c84277cb727726': Fix dex file pruning logic.
-rwxr-xr-xservices/core/java/com/android/server/pm/PackageManagerService.java50
1 files changed, 32 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index eda30c3a0506..707b3be81aa3 100755
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1296,24 +1296,7 @@ public class PackageManagerService extends IPackageManager.Stub {
}
if (didDexOpt) {
- File dalvikCacheDir = new File(dataDir, "dalvik-cache");
-
- // If we had to do a dexopt of one of the previous
- // things, then something on the system has changed.
- // Consider this significant, and wipe away all other
- // existing dexopt files to ensure we don't leave any
- // dangling around.
- String[] files = dalvikCacheDir.list();
- if (files != null) {
- for (int i=0; i<files.length; i++) {
- String fn = files[i];
- if (fn.startsWith("data@app@")
- || fn.startsWith("data@app-private@")) {
- Slog.i(TAG, "Pruning dalvik file: " + fn);
- (new File(dalvikCacheDir, fn)).delete();
- }
- }
- }
+ pruneDexFiles(new File(dataDir, "dalvik-cache"));
}
// Collect vendor overlay packages.
@@ -1535,6 +1518,37 @@ public class PackageManagerService extends IPackageManager.Stub {
} // synchronized (mInstallLock)
}
+ private static void pruneDexFiles(File cacheDir) {
+ // If we had to do a dexopt of one of the previous
+ // things, then something on the system has changed.
+ // Consider this significant, and wipe away all other
+ // existing dexopt files to ensure we don't leave any
+ // dangling around.
+ //
+ // Additionally, delete all dex files from the root directory
+ // since there shouldn't be any there anyway.
+ File[] files = cacheDir.listFiles();
+ if (files != null) {
+ for (File file : files) {
+ if (!file.isDirectory()) {
+ Slog.i(TAG, "Pruning dalvik file: " + file.getAbsolutePath());
+ file.delete();
+ } else {
+ File[] subDirList = file.listFiles();
+ if (subDirList != null) {
+ for (File subDirFile : subDirList) {
+ final String fn = subDirFile.getName();
+ if (fn.startsWith("data@app@") || fn.startsWith("data@app-private@")) {
+ Slog.i(TAG, "Pruning dalvik file: " + fn);
+ subDirFile.delete();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
public boolean isFirstBoot() {
return !mRestoredSettings;
}