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

Commit 076dc013 authored by Narayan Kamath's avatar Narayan Kamath Committed by Gerrit Code Review
Browse files

Merge "Move dex file pruning to installd."

parents 1083573c 5b95e026
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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(' ');
+15 −40
Original line number Diff line number Diff line
@@ -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();