summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2014-07-21 17:47:26 +0200
committerYohann Roussel <yroussel@google.com>2014-07-30 15:08:34 +0200
commit58f5bb5e72221b538fbcc55eb6c2a2499f8c2488 (patch)
treea1c1fdfcbbfa34bfd8bc55aa8210f23f792e767a
parent036a8e007a76a8b61313f853b642d84aa3f7b334 (diff)
downloadmultidex-lollipop-release.tar.gz
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
-rw-r--r--library/src/android/support/multidex/MultiDex.java35
-rw-r--r--library/src/android/support/multidex/MultiDexExtractor.java7
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<File> 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<File> 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());
}