From 58f5bb5e72221b538fbcc55eb6c2a2499f8c2488 Mon Sep 17 00:00:00 2001 From: Yohann Roussel Date: Mon, 21 Jul 2014 17:47:26 +0200 Subject: Use a simulated code-cache for storing extracted files. This should allow an automatic cleaning when updating to L without having to check at each launch. Bug: 10447095 (cherry picked from commit 590a07e63868f0a1da311ff22b4a9f35eb48a865) Change-Id: I90b80c0c196b5da2b63bced30b2ba5e93ecb594a --- library/src/android/support/multidex/MultiDex.java | 35 ++++++++-------------- .../support/multidex/MultiDexExtractor.java | 7 ++--- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/library/src/android/support/multidex/MultiDex.java b/library/src/android/support/multidex/MultiDex.java index 68462c2..8d5e1ab 100644 --- a/library/src/android/support/multidex/MultiDex.java +++ b/library/src/android/support/multidex/MultiDex.java @@ -58,7 +58,10 @@ public final class MultiDex { static final String TAG = "MultiDex"; - private static final String SECONDARY_FOLDER_NAME = "secondary-dexes"; + private static final String OLD_SECONDARY_FOLDER_NAME = "secondary-dexes"; + + private static final String SECONDARY_FOLDER_NAME = "code_cache" + File.separator + + "secondary-dexes"; private static final int MAX_SUPPORTED_SDK_VERSION = 20; @@ -89,12 +92,6 @@ public final class MultiDex { Log.i(TAG, "install"); if (IS_VM_MULTIDEX_CAPABLE) { Log.i(TAG, "VM has multidex support, MultiDex support library is disabled."); - try { - clearOldDexDir(context); - } catch (Throwable t) { - Log.w(TAG, "Something went wrong when trying to clear old MultiDex extraction, " - + "continuing without cleaning.", t); - } return; } @@ -151,7 +148,14 @@ public final class MultiDex { return; } - File dexDir = new File(context.getFilesDir(), SECONDARY_FOLDER_NAME); + try { + clearOldDexDir(context); + } catch (Throwable t) { + Log.w(TAG, "Something went wrong when trying to clear old MultiDex extraction, " + + "continuing without cleaning.", t); + } + + File dexDir = new File(applicationInfo.dataDir, SECONDARY_FOLDER_NAME); List files = MultiDexExtractor.load(context, applicationInfo, dexDir, false); if (checkValidZipFiles(files)) { installSecondaryDexes(loader, dexDir, files); @@ -334,20 +338,7 @@ public final class MultiDex { } private static void clearOldDexDir(Context context) throws Exception { - ApplicationInfo applicationInfo = getApplicationInfo(context); - if (applicationInfo == null) { - // Looks like running on a test Context, so just return. - return; - } - - synchronized (installedApk) { - String apkPath = applicationInfo.sourceDir; - if (installedApk.contains(apkPath)) { - return; - } - installedApk.add(apkPath); - } - File dexDir = new File(context.getFilesDir(), SECONDARY_FOLDER_NAME); + File dexDir = new File(context.getFilesDir(), OLD_SECONDARY_FOLDER_NAME); if (dexDir.isDirectory()) { Log.i(TAG, "Clearing old secondary dex dir (" + dexDir.getPath() + ")."); File[] files = dexDir.listFiles(); diff --git a/library/src/android/support/multidex/MultiDexExtractor.java b/library/src/android/support/multidex/MultiDexExtractor.java index fd70dee..b7e0a11 100644 --- a/library/src/android/support/multidex/MultiDexExtractor.java +++ b/library/src/android/support/multidex/MultiDexExtractor.java @@ -84,11 +84,10 @@ final class MultiDexExtractor { Log.i(TAG, "MultiDexExtractor.load(" + applicationInfo.sourceDir + ", " + forceReload + ")"); final File sourceApk = new File(applicationInfo.sourceDir); - File archive = new File(applicationInfo.sourceDir); - long currentCrc = getZipCrc(archive); + long currentCrc = getZipCrc(sourceApk); List files; - if (!forceReload && !isModified(context, archive, currentCrc)) { + if (!forceReload && !isModified(context, sourceApk, currentCrc)) { try { files = loadExistingExtractions(context, sourceApk, dexDir); } catch (IOException ioe) { @@ -254,7 +253,7 @@ final class MultiDexExtractor { */ private static void prepareDexDir(File dexDir, final String extractedFilePrefix) throws IOException { - dexDir.mkdir(); + dexDir.mkdirs(); if (!dexDir.isDirectory()) { throw new IOException("Failed to create dex directory " + dexDir.getPath()); } -- cgit v1.2.3