summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorvasilii <vasilii@chromium.org>2016-01-15 02:18:45 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-15 10:19:30 +0000
commitac74e7a74cd2e700b1953f0542c09a72c672b1b1 (patch)
treefadc6afd337641f19b75cc5aff33ca5038c39ef6 /base
parentf795671d8c34bc15ae30a005d38d0a4f5b9fae11 (diff)
downloadchromium_src-ac74e7a74cd2e700b1953f0542c09a72c672b1b1.zip
chromium_src-ac74e7a74cd2e700b1953f0542c09a72c672b1b1.tar.gz
chromium_src-ac74e7a74cd2e700b1953f0542c09a72c672b1b1.tar.bz2
Revert of [Android] Rework multidex and enable multidex for unit_tests_apk. (patchset #7 id:120001 of https://codereview.chromium.org/1581563003/ )
Reason for revert: Broke compilation on Android https://build.chromium.org/p/chromium/builders/Android/builds/50665 FAILED: cd ../../components; python ../build/android/gyp/apk_obfuscate.py --configuration-name Release --android-sdk /b/build/slave/Android/build/src/third_party/android_tools/sdk//platforms/android-23 --android-sdk-tools /b/build/slave/Android/build/src/third_party/android_tools/sdk//build-tools/23.0.1 --android-sdk-jar /b/build/slave/Android/build/src/third_party/android_tools/sdk//platforms/android-23/android.jar "--input-jars-paths=/b/build/slave/Android/build/src/third_party/android_tools/sdk//extras/android/support/multidex/library/libs/android-support-multidex.jar \"../out/Release/lib.java/jsr_305_javalib.jar\" \"../out/Release/lib.java/base_java.jar\" /b/build/slave/Android/build/src/third_party/android_tools/sdk//extras/android/support/annotations/android-support-annotations.jar \"../out/Release/lib.java/cronet_api.jar\" \"../out/Release/lib.java/url_java.jar\" \"../out/Release/lib.java/net_java.jar\" \"../out/Release/lib.java/cronet_java.jar\" \"../out/Release/lib.java/chromium_apk_cronet_perf_test_apk.jar\"" "--proguard-configs=cronet/android/proguard.cfg \"../out/Release/cronet_perf_test_apk/proguard.txt\"" --test-jar-path ../out/Release/test.lib.java/CronetPerfTest.jar --obfuscated-jar-path ../out/Release/cronet_perf_test_apk/obfuscated.jar --proguard-jar-path ../third_party/proguard/lib/proguard.jar --stamp ../out/Release/cronet_perf_test_apk/obfuscate.stamp --testapp --proguard-enabled Traceback (most recent call last): File "../build/android/gyp/apk_obfuscate.py", line 185, in <module> sys.exit(main(sys.argv[1:])) File "../build/android/gyp/apk_obfuscate.py", line 167, in main DoProguard(options) File "../build/android/gyp/apk_obfuscate.py", line 124, in DoProguard proguard.CheckOutput() File "/b/build/slave/Android/build/src/build/android/gyp/util/proguard_util.py", line 180, in CheckOutput stderr_filter=stderr_filter) File "/b/build/slave/Android/build/src/build/android/gyp/util/build_utils.py", line 162, in CheckOutput raise CalledProcessError(cwd, args, stdout + stderr) util.build_utils.CalledProcessError: Command failed: ( cd /b/build/slave/Android/build/src/components; java -jar ../third_party/proguard/lib/proguard.jar -forceprocessing -libraryjars /b/build/slave/Android/build/src/third_party/android_tools/sdk//platforms/android-23/android.jar -injars /b/build/slave/Android/build/src/third_party/android_tools/sdk//extras/android/support/multidex/library/libs/android-support-multidex.jar:../out/Release/lib.java/jsr_305_javalib.jar:../out/Release/lib.java/base_java.jar:/b/build/slave/Android/build/src/third_party/android_tools/sdk//extras/android/support/annotations/android-support-annotations.jar:../out/Release/lib.java/cronet_api.jar:../out/Release/lib.java/url_java.jar:../out/Release/lib.java/net_java.jar:../out/Release/lib.java/cronet_java.jar:../out/Release/lib.java/chromium_apk_cronet_perf_test_apk.jar -include cronet/android/proguard.cfg -include ../out/Release/cronet_perf_test_apk/proguard.txt -outjars ../out/Release/cronet_perf_test_apk/obfuscated.jar -dump ../out/Release/cronet_perf_test_apk/obfuscated.jar.dump -printseeds ../out/Release/cronet_perf_test_apk/obfuscated.jar.seeds -printusage ../out/Release/cronet_perf_test_apk/obfuscated.jar.usage -printmapping ../out/Release/cronet_perf_test_apk/obfuscated.jar.mapping ) Warning: org.chromium.base.multidex.ChromiumMultiDexInstaller: can't find referenced class org.chromium.base.multidex.ChromiumMultiDex Warning: org.chromium.base.multidex.ChromiumMultiDexInstaller: can't find referenced class org.chromium.base.multidex.ChromiumMultiDex Warning: there were 2 unresolved references to classes or interfaces. You may need to specify additional library jars (using '-libraryjars'). Error: Please correct the above warnings first. Original issue's description: > [Android] Rework multidex and enable multidex for unit_tests_apk. > > This allows multidex to be used in release builds. > > BUG=272790 > > Committed: https://crrev.com/f743bef34d49987c0f1f69e2f0bb6cb8beb03bf5 > Cr-Commit-Position: refs/heads/master@{#369715} TBR=phajdan.jr@chromium.org,agrieve@chromium.org,dpranke@chromium.org,thakis@chromium.org,yfriedman@chromium.org,jbudorick@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=272790 Review URL: https://codereview.chromium.org/1587253003 Cr-Commit-Position: refs/heads/master@{#369717}
Diffstat (limited to 'base')
-rw-r--r--base/BUILD.gn9
-rw-r--r--base/android/java/src/org/chromium/base/BaseChromiumApplication.java4
-rw-r--r--base/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java114
-rw-r--r--base/android/java/templates/ChromiumMultiDex.template113
-rw-r--r--base/base.gyp14
-rw-r--r--base/test/android/javatests/src/org/chromium/base/test/BaseInstrumentationTestRunner.java4
6 files changed, 116 insertions, 142 deletions
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 1265df8..5d8510f 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2057,10 +2057,9 @@ if (is_android) {
DEPRECATED_java_in_dir = "android/java/src"
- # New versions of ChromiumMultiDex.java and NativeLibraries.java
- # (with the actual correct values) will be created when creating an apk.
+ # A new version of NativeLibraries.java (with the actual correct values)
+ # will be created when creating an apk.
jar_excluded_patterns = [
- "*/ChromiumMultiDex.class",
"*/NativeLibraries.class",
"*/NativeLibraries##*.class",
]
@@ -2095,7 +2094,6 @@ if (is_android) {
"//third_party/robolectric:android-all-4.3_r2-robolectric-0",
"//third_party/robolectric:robolectric_java",
]
- srcjar_deps = [ ":base_multidex_gen" ]
}
# GYP: //base.gyp:base_junit_tests
@@ -2130,6 +2128,9 @@ if (is_android) {
sources = [
"android/java/templates/ChromiumMultiDex.template",
]
+ if (is_debug) {
+ defines = [ "MULTIDEX_CONFIGURATION_Debug" ]
+ }
package_name = "org/chromium/base/multidex"
}
diff --git a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
index f842a18..e4e6e20 100644
--- a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
+++ b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
@@ -10,7 +10,7 @@ import android.content.Context;
import android.os.Bundle;
import android.view.Window;
-import org.chromium.base.multidex.ChromiumMultiDexInstaller;
+import org.chromium.base.multidex.ChromiumMultiDex;
/**
* Basic application functionality that should be shared among all browser applications.
@@ -31,7 +31,7 @@ public class BaseChromiumApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
- ChromiumMultiDexInstaller.install(this);
+ ChromiumMultiDex.install(this);
}
/**
diff --git a/base/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java b/base/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java
deleted file mode 100644
index e4b30b9..0000000
--- a/base/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base.multidex;
-
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningAppProcessInfo;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.support.multidex.MultiDex;
-
-import org.chromium.base.Log;
-import org.chromium.base.VisibleForTesting;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Performs multidex installation for non-isolated processes.
- */
-public class ChromiumMultiDexInstaller {
-
- private static final String TAG = "base_multidex";
-
- /**
- * Suffix for the meta-data tag in the AndroidManifext.xml that determines whether loading
- * secondary dexes should be skipped for a given process name.
- */
- private static final String IGNORE_MULTIDEX_KEY = ".ignore_multidex";
-
- /**
- * Installs secondary dexes if possible/necessary.
- *
- * Isolated processes (e.g. renderer processes) can't load secondary dex files on
- * K and below, so we don't even try in that case.
- *
- * In release builds of app apks (as opposed to test apks), this is a no-op because:
- * - multidex isn't necessary in release builds because we run proguard there and
- * thus aren't threatening to hit the dex limit; and
- * - calling MultiDex.install, even in the absence of secondary dexes, causes a
- * significant regression in start-up time (crbug.com/525695).
- *
- * @param context The application context.
- */
- @VisibleForTesting
- public static void install(Context context) {
- if (!ChromiumMultiDex.isMultidexEnabled()) return;
-
- // TODO(jbudorick): Back out this version check once support for K & below works.
- // http://crbug.com/512357
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
- && !shouldInstallMultiDex(context)) {
- Log.i(TAG, "Skipping multidex installation: not needed for process.");
- } else {
- MultiDex.install(context);
- Log.i(TAG, "Completed multidex installation.");
- }
- }
-
- private static String getProcessName(Context context) {
- try {
- String currentProcessName = null;
- int pid = android.os.Process.myPid();
-
- ActivityManager manager =
- (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
- if (processInfo.pid == pid) {
- currentProcessName = processInfo.processName;
- break;
- }
- }
-
- return currentProcessName;
- } catch (SecurityException ex) {
- return null;
- }
- }
-
- // Determines whether MultiDex should be installed for the current process. Isolated
- // Processes should skip MultiDex as they can not actually access the files on disk.
- // Privileged processes need ot have all of their dependencies in the MainDex for
- // performance reasons.
- private static boolean shouldInstallMultiDex(Context context) {
- try {
- Method isIsolatedMethod =
- android.os.Process.class.getMethod("isIsolated");
- Object retVal = isIsolatedMethod.invoke(null);
- if (retVal != null && retVal instanceof Boolean && ((Boolean) retVal)) {
- return false;
- }
- } catch (IllegalAccessException | IllegalArgumentException
- | InvocationTargetException | NoSuchMethodException e) {
- // Ignore and fall back to checking the app processes.
- }
-
- String currentProcessName = getProcessName(context);
- if (currentProcessName == null) return true;
-
- PackageManager packageManager = context.getPackageManager();
- try {
- ApplicationInfo appInfo = packageManager.getApplicationInfo(context.getPackageName(),
- PackageManager.GET_META_DATA);
- if (appInfo == null || appInfo.metaData == null) return true;
- return !appInfo.metaData.getBoolean(currentProcessName + IGNORE_MULTIDEX_KEY, false);
- } catch (PackageManager.NameNotFoundException e) {
- return true;
- }
- }
-
-}
diff --git a/base/android/java/templates/ChromiumMultiDex.template b/base/android/java/templates/ChromiumMultiDex.template
index 7e70701..5580489 100644
--- a/base/android/java/templates/ChromiumMultiDex.template
+++ b/base/android/java/templates/ChromiumMultiDex.template
@@ -4,22 +4,115 @@
package org.chromium.base.multidex;
+import android.app.ActivityManager;
+import android.app.ActivityManager.RunningAppProcessInfo;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Process;
+import android.support.multidex.MultiDex;
+
+import org.chromium.base.Log;
+import org.chromium.base.VisibleForTesting;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
/**
- * Multidex configuration. Generated on a per-target basis.
+ * Performs multidex installation for non-isolated processes.
*/
-class ChromiumMultiDex {
+public class ChromiumMultiDex {
- /** Whether multidex is enabled for this target.
+ private static final String TAG = "base_multidex";
+
+ /**
+ * Suffix for the meta-data tag in the AndroidManifext.xml that determines whether loading
+ * secondary dexes should be skipped for a given process name.
+ */
+ private static final String IGNORE_MULTIDEX_KEY = ".ignore_multidex";
+
+ /**
+ * Installs secondary dexes if possible/necessary.
+ *
+ * Isolated processes (e.g. renderer processes) can't load secondary dex files on
+ * K and below, so we don't even try in that case.
*
- * This has to be a function instead of a static final boolean s.t. the initial false value
- * doesn't get optimized into {@link ChromiumMultiDexInstaller} at base_java compile time.
+ * In release builds, this is a no-op because:
+ * - multidex isn't necessary in release builds because we run proguard there and
+ * thus aren't threatening to hit the dex limit; and
+ * - calling MultiDex.install, even in the absence of secondary dexes, causes a
+ * significant regression in start-up time (crbug.com/525695).
+ *
+ * @param context The application context.
*/
- static boolean isMultidexEnabled() {
-#if defined(ENABLE_MULTIDEX)
- return true;
+ @VisibleForTesting
+#if defined(MULTIDEX_CONFIGURATION_Debug)
+ public static void install(Context context) {
+ // TODO(jbudorick): Back out this version check once support for K & below works.
+ // http://crbug.com/512357
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
+ && !shouldInstallMultiDex(context)) {
+ Log.i(TAG, "Skipping multidex installation: not needed for process.");
+ } else {
+ MultiDex.install(context);
+ Log.i(TAG, "Completed multidex installation.");
+ }
+ }
+
+ private static String getProcessName(Context context) {
+ try {
+ String currentProcessName = null;
+ int pid = android.os.Process.myPid();
+
+ ActivityManager manager =
+ (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+ for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
+ if (processInfo.pid == pid) {
+ currentProcessName = processInfo.processName;
+ break;
+ }
+ }
+
+ return currentProcessName;
+ } catch (SecurityException ex) {
+ return null;
+ }
+ }
+
+ // Determines whether MultiDex should be installed for the current process. Isolated
+ // Processes should skip MultiDex as they can not actually access the files on disk.
+ // Privileged processes need ot have all of their dependencies in the MainDex for
+ // performance reasons.
+ private static boolean shouldInstallMultiDex(Context context) {
+ try {
+ Method isIsolatedMethod =
+ android.os.Process.class.getMethod("isIsolated");
+ Object retVal = isIsolatedMethod.invoke(null);
+ if (retVal != null && retVal instanceof Boolean && ((Boolean) retVal)) {
+ return false;
+ }
+ } catch (IllegalAccessException | IllegalArgumentException
+ | InvocationTargetException | NoSuchMethodException e) {
+ // Ignore and fall back to checking the app processes.
+ }
+
+ String currentProcessName = getProcessName(context);
+ if (currentProcessName == null) return true;
+
+ PackageManager packageManager = context.getPackageManager();
+ try {
+ ApplicationInfo appInfo = packageManager.getApplicationInfo(context.getPackageName(),
+ PackageManager.GET_META_DATA);
+ if (appInfo == null || appInfo.metaData == null) return true;
+ return !appInfo.metaData.getBoolean(currentProcessName + IGNORE_MULTIDEX_KEY, false);
+ } catch (PackageManager.NameNotFoundException e) {
+ return true;
+ }
+ }
#else
- return false;
-#endif
+ public static void install(Context context) {
}
+#endif
}
diff --git a/base/base.gyp b/base/base.gyp
index 94a1d49..dc484f4 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -1489,6 +1489,9 @@
'variables': {
'package_name': 'org/chromium/base/multidex',
'template_deps': [],
+ 'additional_gcc_preprocess_options': [
+ '--defines', 'MULTIDEX_CONFIGURATION_<(CONFIGURATION_NAME)',
+ ],
},
'includes': ['../build/android/java_cpp_template.gypi'],
},
@@ -1507,10 +1510,7 @@
'type': 'none',
'variables': {
'java_in_dir': 'android/java',
- 'jar_excluded_classes': [
- '*/ChromiumMultiDex.class',
- '*/NativeLibraries.class',
- ],
+ 'jar_excluded_classes': [ '*/NativeLibraries.class' ],
},
'dependencies': [
'base_java_application_state',
@@ -1522,11 +1522,6 @@
'../third_party/android_tools/android_tools.gyp:android_support_multidex_javalib',
'../third_party/jsr-305/jsr-305.gyp:jsr_305_javalib',
],
- 'all_dependent_settings': {
- 'variables': {
- 'generate_multidex_config': 1,
- },
- },
'includes': [ '../build/java.gypi' ],
},
{
@@ -1588,7 +1583,6 @@
'target_name': 'base_junit_test_support',
'type': 'none',
'dependencies': [
- 'base_multidex_gen',
'../testing/android/junit/junit_test.gyp:junit_test_support',
'../third_party/android_tools/android_tools.gyp:android_support_multidex_javalib',
],
diff --git a/base/test/android/javatests/src/org/chromium/base/test/BaseInstrumentationTestRunner.java b/base/test/android/javatests/src/org/chromium/base/test/BaseInstrumentationTestRunner.java
index 669307c..8bf3d0fb 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/BaseInstrumentationTestRunner.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/BaseInstrumentationTestRunner.java
@@ -18,7 +18,7 @@ import junit.framework.TestResult;
import org.chromium.base.Log;
import org.chromium.base.SysUtils;
-import org.chromium.base.multidex.ChromiumMultiDexInstaller;
+import org.chromium.base.multidex.ChromiumMultiDex;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.DisableIfSkipCheck;
import org.chromium.base.test.util.MinAndroidSdkLevel;
@@ -37,7 +37,7 @@ public class BaseInstrumentationTestRunner extends InstrumentationTestRunner {
@Override
public void onCreate(Bundle arguments) {
- ChromiumMultiDexInstaller.install(getTargetContext());
+ ChromiumMultiDex.install(getTargetContext());
super.onCreate(arguments);
}