[Android] Enable multidex for debug builds of ChromePublic.
This is a non-incremental implementation. It adds @MainDex to classes used by
the renderer to keep them in the main dex, as it can't load secondary dexes
when using the multidex support library (i.e., on K and below).
BUG=272790
TBR=newt@chromium.org,sky@chromium.org
Review URL: https://codereview.chromium.org/1408163009
Cr-Commit-Position: refs/heads/master@{#359453}
CrOS-Libchrome-Original-Commit: f667d3b3a1b953800bb5325c7b8d62775a1c5aeb
diff --git a/base/android/java/src/org/chromium/base/AnimationFrameTimeHistogram.java b/base/android/java/src/org/chromium/base/AnimationFrameTimeHistogram.java
index ad5cdd8..1cd2acf 100644
--- a/base/android/java/src/org/chromium/base/AnimationFrameTimeHistogram.java
+++ b/base/android/java/src/org/chromium/base/AnimationFrameTimeHistogram.java
@@ -11,10 +11,13 @@
import android.animation.TimeAnimator.TimeListener;
import android.util.Log;
+import org.chromium.base.annotations.MainDex;
+
/**
* Record Android animation frame rate and save it to UMA histogram. This is mainly for monitoring
* any jankiness of short Chrome Android animations. It is limited to few seconds of recording.
*/
+@MainDex
public class AnimationFrameTimeHistogram {
private static final String TAG = "AnimationFrameTimeHistogram";
private static final int MAX_FRAME_TIME_NUM = 600; // 10 sec on 60 fps.
diff --git a/base/android/java/src/org/chromium/base/ApplicationStatus.java b/base/android/java/src/org/chromium/base/ApplicationStatus.java
index 5035b9c..9f77595 100644
--- a/base/android/java/src/org/chromium/base/ApplicationStatus.java
+++ b/base/android/java/src/org/chromium/base/ApplicationStatus.java
@@ -12,6 +12,7 @@
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.MainDex;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -24,6 +25,7 @@
* to register / unregister listeners for state changes.
*/
@JNINamespace("base::android")
+@MainDex
public class ApplicationStatus {
private static class ActivityInfo {
private int mStatus = ActivityState.DESTROYED;
diff --git a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
index 1c1f826..e4e6e20 100644
--- a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
+++ b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
@@ -10,6 +10,8 @@
import android.os.Bundle;
import android.view.Window;
+import org.chromium.base.multidex.ChromiumMultiDex;
+
/**
* Basic application functionality that should be shared among all browser applications.
*/
@@ -26,6 +28,12 @@
mShouldInitializeApplicationStatusTracking = shouldInitializeApplicationStatusTracking;
}
+ @Override
+ protected void attachBaseContext(Context base) {
+ super.attachBaseContext(base);
+ ChromiumMultiDex.install(this);
+ }
+
/**
* Interface to be implemented by listeners for window focus events.
*/
diff --git a/base/android/java/src/org/chromium/base/CommandLine.java b/base/android/java/src/org/chromium/base/CommandLine.java
index bb227f1..efef22a 100644
--- a/base/android/java/src/org/chromium/base/CommandLine.java
+++ b/base/android/java/src/org/chromium/base/CommandLine.java
@@ -7,6 +7,8 @@
import android.text.TextUtils;
import android.util.Log;
+import org.chromium.base.annotations.MainDex;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -25,6 +27,7 @@
* file at a specific location early during startup. Applications each define their own files, e.g.,
* ContentShellApplication.COMMAND_LINE_FILE.
**/
+@MainDex
public abstract class CommandLine {
/**
* Allows classes who cache command line flags to be notified when those arguments are updated
diff --git a/base/android/java/src/org/chromium/base/FieldTrialList.java b/base/android/java/src/org/chromium/base/FieldTrialList.java
index 5fc9a1f..cfd7d5c 100644
--- a/base/android/java/src/org/chromium/base/FieldTrialList.java
+++ b/base/android/java/src/org/chromium/base/FieldTrialList.java
@@ -4,9 +4,12 @@
package org.chromium.base;
+import org.chromium.base.annotations.MainDex;
+
/**
* Helper to get field trial information.
*/
+@MainDex
public class FieldTrialList {
private FieldTrialList() {}
diff --git a/base/android/java/src/org/chromium/base/JNIUtils.java b/base/android/java/src/org/chromium/base/JNIUtils.java
index adbd36c..f971b5e 100644
--- a/base/android/java/src/org/chromium/base/JNIUtils.java
+++ b/base/android/java/src/org/chromium/base/JNIUtils.java
@@ -5,10 +5,12 @@
package org.chromium.base;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.MainDex;
/**
* This class provides JNI-related methods to the native library.
*/
+@MainDex
public class JNIUtils {
/**
* This returns a ClassLoader that is capable of loading Chromium Java code. Such a ClassLoader
diff --git a/base/android/java/src/org/chromium/base/MemoryPressureListener.java b/base/android/java/src/org/chromium/base/MemoryPressureListener.java
index c1109ef..d61a006 100644
--- a/base/android/java/src/org/chromium/base/MemoryPressureListener.java
+++ b/base/android/java/src/org/chromium/base/MemoryPressureListener.java
@@ -10,6 +10,7 @@
import android.content.res.Configuration;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.MainDex;
/**
@@ -17,6 +18,7 @@
* It registers a ComponentCallbacks2 with the system, and dispatches into
* native for levels that are considered actionable.
*/
+@MainDex
public class MemoryPressureListener {
/**
* Sending an intent with this action to Chrome will cause it to issue a call to onLowMemory
diff --git a/base/android/java/src/org/chromium/base/PathUtils.java b/base/android/java/src/org/chromium/base/PathUtils.java
index 01b036b..81c74f4 100644
--- a/base/android/java/src/org/chromium/base/PathUtils.java
+++ b/base/android/java/src/org/chromium/base/PathUtils.java
@@ -11,6 +11,7 @@
import android.os.StrictMode;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.MainDex;
import java.io.File;
import java.util.concurrent.ExecutionException;
@@ -18,6 +19,7 @@
/**
* This class provides the path related methods for the native library.
*/
+@MainDex
public abstract class PathUtils {
private static final String THUMBNAIL_DIRECTORY = "textures";
diff --git a/base/android/java/src/org/chromium/base/SystemMessageHandler.java b/base/android/java/src/org/chromium/base/SystemMessageHandler.java
index 37d5ef0..ebcc0d9 100644
--- a/base/android/java/src/org/chromium/base/SystemMessageHandler.java
+++ b/base/android/java/src/org/chromium/base/SystemMessageHandler.java
@@ -10,10 +10,12 @@
import android.os.Message;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.MainDex;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+@MainDex
class SystemMessageHandler extends Handler {
private static final String TAG = "cr.SysMessageHandler";
diff --git a/base/android/java/src/org/chromium/base/library_loader/LegacyLinker.java b/base/android/java/src/org/chromium/base/library_loader/LegacyLinker.java
index 581c661..d0ab312 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LegacyLinker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LegacyLinker.java
@@ -11,6 +11,7 @@
import org.chromium.base.SysUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.MainDex;
import java.util.HashMap;
import java.util.Locale;
@@ -31,6 +32,7 @@
*
* For more on the operations performed by the Linker, see {@link Linker}.
*/
+@MainDex
class LegacyLinker extends Linker {
// Log tag for this class.
private static final String TAG = "LibraryLoader";
diff --git a/base/android/java/src/org/chromium/base/multidex/ChromiumMultiDex.java b/base/android/java/templates/ChromiumMultiDex.template
similarity index 94%
rename from base/android/java/src/org/chromium/base/multidex/ChromiumMultiDex.java
rename to base/android/java/templates/ChromiumMultiDex.template
index 7696a14..18b3c77 100644
--- a/base/android/java/src/org/chromium/base/multidex/ChromiumMultiDex.java
+++ b/base/android/java/templates/ChromiumMultiDex.template
@@ -30,6 +30,7 @@
* @param context The application context.
*/
@VisibleForTesting
+#if defined(CONFIGURATION_NAME_Debug)
public static void install(Context context) {
try {
// TODO(jbudorick): Back out this version check once support for K & below works.
@@ -54,5 +55,9 @@
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
return (boolean) Process.class.getMethod("isIsolated").invoke(null);
}
+#else
+ public static void install(Context context) {
+ }
+#endif
}