am 6a6411e3: am 076dc013: Merge "Move dex file pruning to installd."

* commit '6a6411e3d8c533a40bfe1897e2c26e3d6f3b52e0':
  Move dex file pruning to installd.
This commit is contained in:
Narayan Kamath
2014-06-16 13:54:10 +00:00
committed by Android Git Automerger
2 changed files with 19 additions and 40 deletions

View File

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

View File

@@ -1439,7 +1439,21 @@ public class PackageManagerService extends IPackageManager.Stub {
} }
if (didDexOptLibraryOrTool) { 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. // Collect vendor overlay packages.
@@ -1667,45 +1681,6 @@ public class PackageManagerService extends IPackageManager.Stub {
} // synchronized (mInstallLock) } // 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 @Override
public boolean isFirstBoot() { public boolean isFirstBoot() {
return !mRestoredSettings || mPackageUsage.isFirstBoot(); return !mRestoredSettings || mPackageUsage.isFirstBoot();