Merge "Move dex file pruning to installd."

This commit is contained in:
Narayan Kamath
2014-06-16 13:46:27 +00:00
committed by Gerrit Code Review
2 changed files with 19 additions and 40 deletions

View File

@@ -335,6 +335,10 @@ public final class Installer {
}
}
public int pruneDexCache() {
return execute("prunedexcache");
}
public int freeCache(long freeStorageSize) {
StringBuilder builder = new StringBuilder("freecache");
builder.append(' ');

View File

@@ -1433,7 +1433,21 @@ public class PackageManagerService extends IPackageManager.Stub {
}
if (didDexOptLibraryOrTool) {
pruneDexFiles(new File(dataDir, "dalvik-cache"));
// If we dexopted a library or tool, 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.
//
// TODO: This should be revisited because it isn't as good an indicator
// as it used to be. It used to include the boot classpath but at some point
// DexFile.isDexOptNeeded started returning false for the boot
// class path files in all cases. It is very possible in a
// small maintenance release update that the library and tool
// jars may be unchanged but APK could be removed resulting in
// unused dalvik-cache files.
mInstaller.pruneDexCache();
}
// Collect vendor overlay packages.
@@ -1661,45 +1675,6 @@ 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.
//
// Note: This isn't as good an indicator as it used to be. It
// used to include the boot classpath but at some point
// DexFile.isDexOptNeeded started returning false for the boot
// class path files in all cases. It is very possible in a
// small maintenance release update that the library and tool
// jars may be unchanged but APK could be removed resulting in
// unused dalvik-cache files.
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();
}
}
}
}
}
}
}
@Override
public boolean isFirstBoot() {
return !mRestoredSettings || mPackageUsage.isFirstBoot();