diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-10-21 03:13:27 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-10-21 03:13:27 +0000 |
commit | f578e26dc0426dcc549bba0a542e6a4fc7dfa9c5 (patch) | |
tree | e172c1ca0ecfb7e2e67c0429bf972abe0eb64622 | |
parent | 00248d9717a96566087bcca3fad62f9e36d3a271 (diff) | |
parent | 5acc1d876e767331143fd3b20f6583405e705d7c (diff) | |
download | multidex-f578e26dc0426dcc549bba0a542e6a4fc7dfa9c5.tar.gz |
Snap for 5082210 from 5acc1d876e767331143fd3b20f6583405e705d7c to qt-release
Change-Id: I25b91a2dd777838502eb4720d7719994757a6fe3
-rw-r--r-- | library/Android.bp | 3 | ||||
-rw-r--r-- | library/src/androidx/multidex/MultiDex.java | 57 |
2 files changed, 39 insertions, 21 deletions
diff --git a/library/Android.bp b/library/Android.bp index bc82325..6ba5804 100644 --- a/library/Android.bp +++ b/library/Android.bp @@ -31,7 +31,8 @@ genrule { java_library_static { name: "android-support-multidex", - sdk_version: "4", + sdk_version: "15", + min_sdk_version: "4", srcs: [ "src/**/*.java", ], diff --git a/library/src/androidx/multidex/MultiDex.java b/library/src/androidx/multidex/MultiDex.java index 69ff889..30cb886 100644 --- a/library/src/androidx/multidex/MultiDex.java +++ b/library/src/androidx/multidex/MultiDex.java @@ -22,7 +22,9 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.os.Build; import android.util.Log; + import dalvik.system.DexFile; + import java.io.File; import java.io.IOException; import java.lang.reflect.Array; @@ -218,28 +220,11 @@ public final class MultiDex { + System.getProperty("java.vm.version") + "\""); } - /* The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional DEX - * file entries. + /* The patched class loader is expected to be a ClassLoader capable of loading DEX + * bytecode. We modify its pathList field to append additional DEX file entries. */ - ClassLoader loader; - try { - loader = mainContext.getClassLoader(); - } catch (RuntimeException e) { - /* Ignore those exceptions so that we don't break tests relying on Context like - * a android.test.mock.MockContext or a android.content.ContextWrapper with a - * null base Context. - */ - Log.w(TAG, "Failure while trying to obtain Context class loader. " + - "Must be running in test mode. Skip patching.", e); - return; - } + ClassLoader loader = getDexClassloader(mainContext); if (loader == null) { - // Note, the context class loader is null when running Robolectric tests. - Log.e(TAG, - "Context class loader is null. Must be running in test mode. " - + "Skip patching."); return; } @@ -286,6 +271,38 @@ public final class MultiDex { } } + /** + * Returns a {@link Classloader} from the {@link Context} that is capable of reading dex + * bytecode or null if the Classloader is not dex-capable e.g: when running on a JVM testing + * environment such as Robolectric. + */ + private static ClassLoader getDexClassloader(Context context) { + ClassLoader loader; + try { + loader = context.getClassLoader(); + } catch (RuntimeException e) { + /* Ignore those exceptions so that we don't break tests relying on Context like + * a android.test.mock.MockContext or a android.content.ContextWrapper with a + * null base Context. + */ + Log.w(TAG, "Failure while trying to obtain Context class loader. " + + "Must be running in test mode. Skip patching.", e); + return null; + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + if (loader instanceof dalvik.system.BaseDexClassLoader) { + return loader; + } + } else if (loader instanceof dalvik.system.DexClassLoader + || loader instanceof dalvik.system.PathClassLoader) { + return loader; + } + Log.e(TAG, "Context class loader is null or not dex-capable. " + + "Must be running in test mode. Skip patching."); + return null; + } + private static ApplicationInfo getApplicationInfo(Context context) { try { /* Due to package install races it is possible for a process to be started from an old |