Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d140e4b authored by Narayan Kamath's avatar Narayan Kamath Committed by Android Git Automerger
Browse files

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

* commit '5406f59a':
  Move dex file pruning to installd.
parents 97df96d8 5406f59a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -345,6 +345,10 @@ public final class Installer extends SystemService {
        }
    }

    public int pruneDexCache() {
        return execute("prunedexcache");
    }

    public int freeCache(long freeStorageSize) {
        StringBuilder builder = new StringBuilder("freecache");
        builder.append(' ');
+15 −40
Original line number Diff line number Diff line
@@ -1485,7 +1485,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.
@@ -1727,45 +1741,6 @@ public class PackageManagerService extends IPackageManager.Stub {
        Runtime.getRuntime().gc();
    }
    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();