From 03bfcbb9ba8ee1dad5980df1d02c267a4cb64ad0 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 2 Mar 2023 07:51:58 -0800 Subject: [PATCH 1/8] Add tests --- .../android/desugarer_integration_test.sh | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/test/shell/bazel/android/desugarer_integration_test.sh b/src/test/shell/bazel/android/desugarer_integration_test.sh index c9d3a1f7161293..ff5563af729d5a 100755 --- a/src/test/shell/bazel/android/desugarer_integration_test.sh +++ b/src/test/shell/bazel/android/desugarer_integration_test.sh @@ -124,10 +124,24 @@ function test_java_8_android_binary_worker_strategy() { setup_android_sdk_support create_java_8_android_binary - bazel build \ - --strategy=Desugar=worker \ - --desugar_for_android //java/bazel:bin \ - || fail "build failed" + assert_build //java/bazel:bin \ + --persistent_android_dex_desugar \ + --worker_verbose &> $TEST_log + expect_log "Created new non-sandboxed Desugar worker (id [0-9]\+)" + expect_log "Created new non-sandboxed DexBuilder worker (id [0-9]\+)" +} + +function test_java_8_android_binary_multiplex_worker_strategy() { + create_new_workspace + setup_android_sdk_support + create_java_8_android_binary + + assert_build //java/bazel:bin \ + --experimental_worker_multiplex \ + --persistent_multiplex_android_dex_desugar \ + --worker_verbose &> $TEST_log + expect_log "Created new non-sandboxed Desugar multiplex-worker (id [0-9]\+)" + expect_log "Created new non-sandboxed DexBuilder multiplex-worker (id [0-9]\+)" } run_suite "Android desugarer integration tests" From 28291488cd107e95477c4acb4e02f00f03930b33 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 2 Mar 2023 08:03:21 -0800 Subject: [PATCH 2/8] Remove useWorkersWithDexbuilder --- .../lib/rules/android/AndroidConfiguration.java | 17 ----------------- .../lib/rules/android/DexArchiveAspect.java | 3 --- .../android/AndroidConfigurationApi.java | 7 ------- 3 files changed, 27 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index a78af1acce139b..a18334f0846378 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -533,14 +533,6 @@ public static class Options extends FragmentOptions { help = "dx flags supported in tool that groups classes for inclusion in final .dex files.") public List dexoptsSupportedInDexSharder; - @Option( - name = "use_workers_with_dexbuilder", - defaultValue = "true", - documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, - effectTags = {OptionEffectTag.EXECUTION}, - help = "Whether dexbuilder supports being run in local worker mode.") - public boolean useWorkersWithDexbuilder; - @Option( name = "experimental_android_rewrite_dexes_with_rex", defaultValue = "false", @@ -1100,7 +1092,6 @@ public FragmentOptions getExec() { exec.dexoptsSupportedInIncrementalDexing = dexoptsSupportedInIncrementalDexing; exec.dexoptsSupportedInDexMerger = dexoptsSupportedInDexMerger; exec.dexoptsSupportedInDexSharder = dexoptsSupportedInDexSharder; - exec.useWorkersWithDexbuilder = useWorkersWithDexbuilder; exec.manifestMerger = manifestMerger; exec.manifestMergerOrder = manifestMergerOrder; exec.allowAndroidLibraryDepsWithoutSrcs = allowAndroidLibraryDepsWithoutSrcs; @@ -1128,7 +1119,6 @@ public FragmentOptions getExec() { private final ImmutableList targetDexoptsThatPreventIncrementalDexing; private final ImmutableList dexoptsSupportedInDexMerger; private final ImmutableList dexoptsSupportedInDexSharder; - private final boolean useWorkersWithDexbuilder; private final boolean desugarJava8; private final boolean desugarJava8Libs; private final boolean checkDesugarDeps; @@ -1184,7 +1174,6 @@ public AndroidConfiguration(BuildOptions buildOptions) throws InvalidConfigurati ImmutableList.copyOf(options.nonIncrementalPerTargetDexopts); this.dexoptsSupportedInDexMerger = ImmutableList.copyOf(options.dexoptsSupportedInDexMerger); this.dexoptsSupportedInDexSharder = ImmutableList.copyOf(options.dexoptsSupportedInDexSharder); - this.useWorkersWithDexbuilder = options.useWorkersWithDexbuilder; this.desugarJava8 = options.desugarJava8; this.desugarJava8Libs = options.desugarJava8Libs; this.checkDesugarDeps = options.checkDesugarDeps; @@ -1319,12 +1308,6 @@ public ImmutableList getTargetDexoptsThatPreventIncrementalDexing() { return targetDexoptsThatPreventIncrementalDexing; } - /** Whether to assume the dexbuilder tool supports local worker mode. */ - @Override - public boolean useWorkersWithDexbuilder() { - return useWorkersWithDexbuilder; - } - @Override public boolean desugarJava8() { return desugarJava8; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index f38913c4bc0617..2d803103c701a1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -658,9 +658,6 @@ static Artifact createDexArchiveAction( dexbuilder .addCommandLine(args.build(), ParamFileInfo.builder(UNQUOTED).setUseAlways(true).build()) .stripOutputPaths(stripOutputPaths); - if (getAndroidConfig(ruleContext).useWorkersWithDexbuilder()) { - dexbuilder.setExecutionInfo(ExecutionRequirements.WORKER_MODE_ENABLED); - } ruleContext.registerAction(dexbuilder.build(ruleContext)); return dexArchive; } diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java index 170b3f11680679..05da4e59319223 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java @@ -94,13 +94,6 @@ public interface AndroidConfigurationApi extends StarlarkValue { documented = false) ImmutableList getTargetDexoptsThatPreventIncrementalDexing(); - @StarlarkMethod( - name = "use_workers_with_dexbuilder", - structField = true, - doc = "", - documented = false) - boolean useWorkersWithDexbuilder(); - @StarlarkMethod(name = "desugar_java8", structField = true, doc = "", documented = false) boolean desugarJava8(); From 5d73a2b83e634719eb21091bd3ce554446245c56 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 2 Mar 2023 08:07:48 -0800 Subject: [PATCH 3/8] Add --internal_persistent_android_dex_desugar and --internal_persistent_multiplex_android_dex_desugar --- .../rules/android/AndroidConfiguration.java | 52 +++++++++++++++++-- .../lib/rules/android/DexArchiveAspect.java | 27 ++++++++-- .../android/AndroidConfigurationApi.java | 14 +++++ 3 files changed, 84 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index a18334f0846378..008bf0284bd97d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -897,10 +897,11 @@ public static class Options extends FragmentOptions { }, help = "Enable persistent Android dex and desugar actions by using workers.", expansion = { + "--internal_persistent_android_dex_desugar", "--strategy=Desugar=worker", "--strategy=DexBuilder=worker", }) - public Void persistentDexDesugar; + public Void persistentAndroidDexDesugar; @Option( name = "persistent_multiplex_android_dex_desugar", @@ -913,10 +914,9 @@ public static class Options extends FragmentOptions { help = "Enable persistent multiplexed Android dex and desugar actions by using workers.", expansion = { "--persistent_android_dex_desugar", - "--modify_execution_info=Desugar=+supports-multiplex-workers", - "--modify_execution_info=DexBuilder=+supports-multiplex-workers", + "--internal_persistent_multiplex_android_dex_desugar", }) - public Void persistentMultiplexDexDesugar; + public Void persistentMultiplexAndroidDexDesugar; @Option( name = "persistent_multiplex_android_tools", @@ -966,6 +966,36 @@ public static class Options extends FragmentOptions { help = "Tracking flag for when multiplexed busybox workers are enabled.") public boolean persistentMultiplexBusyboxTools; + /** + * We use this option to decide when to enable workers for busybox tools. This flag is also a + * guard against enabling workers using nothing but --persistent_android_resource_processor. + * + *

Consequently, we use this option to decide between param files or regular command line + * parameters. If we're not using workers or on Windows, there's no need to always use param + * files for I/O performance reasons. + */ + @Option( + name = "internal_persistent_android_dex_desugar", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = { + OptionEffectTag.HOST_MACHINE_RESOURCE_OPTIMIZATIONS, + OptionEffectTag.EXECUTION, + }, + defaultValue = "false", + help = "Tracking flag for when dexing and desugaring workers are enabled.") + public boolean persistentDexDesugar; + + @Option( + name = "internal_persistent_multiplex_android_dex_desugar", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = { + OptionEffectTag.HOST_MACHINE_RESOURCE_OPTIMIZATIONS, + OptionEffectTag.EXECUTION, + }, + defaultValue = "false", + help = "Tracking flag for when multiplexed dexing and desugaring workers are enabled.") + public boolean persistentMultiplexDexDesugar; + @Option( name = "experimental_remove_r_classes_from_instrumentation_test_jar", defaultValue = "true", @@ -1145,6 +1175,8 @@ public FragmentOptions getExec() { private final boolean dataBindingAndroidX; private final boolean persistentBusyboxTools; private final boolean persistentMultiplexBusyboxTools; + private final boolean persistentDexDesugar; + private final boolean persistentMultiplexDexDesugar; private final boolean filterRJarsFromAndroidTest; private final boolean removeRClassesFromInstrumentationTestJar; private final boolean alwaysFilterDuplicateClassesFromAndroidTest; @@ -1205,6 +1237,8 @@ public AndroidConfiguration(BuildOptions buildOptions) throws InvalidConfigurati this.dataBindingAndroidX = options.dataBindingAndroidX; this.persistentBusyboxTools = options.persistentBusyboxTools; this.persistentMultiplexBusyboxTools = options.persistentMultiplexBusyboxTools; + this.persistentDexDesugar = options.persistentDexDesugar; + this.persistentMultiplexDexDesugar = options.persistentMultiplexDexDesugar; this.filterRJarsFromAndroidTest = options.filterRJarsFromAndroidTest; this.removeRClassesFromInstrumentationTestJar = options.removeRClassesFromInstrumentationTestJar; @@ -1456,6 +1490,16 @@ public boolean persistentMultiplexBusyboxTools() { return persistentMultiplexBusyboxTools; } + @Override + public boolean persistentDexDesugar() { + return persistentDexDesugar; + } + + @Override + public boolean persistentMultiplexDexDesugar() { + return persistentMultiplexDexDesugar; + } + @Override public boolean incompatibleUseToolchainResolution() { return incompatibleUseToolchainResolution; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index 2d803103c701a1..3dae31cfdbc4ef 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -27,6 +27,7 @@ import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -530,13 +531,13 @@ private static Artifact createDesugarAction( new SpawnAction.Builder() .useDefaultShellEnvironment() .setExecutable(ruleContext.getExecutablePrerequisite(desugarPrereqName)) + .setExecutionInfo(createDexingDesugaringExecRequirements(ruleContext).build()) .addInput(jar) .addTransitiveInputs(bootclasspath) .addTransitiveInputs(classpath) .addOutput(result) .setMnemonic("Desugar") - .setProgressMessage("Desugaring %s for Android", jar.prettyPrint()) - .setExecutionInfo(ExecutionRequirements.WORKER_MODE_ENABLED); + .setProgressMessage("Desugaring %s for Android", jar.prettyPrint()); // SpawnAction.Builder.build() is documented as being safe for re-use. So we can call build here // to get the action's inputs for vetting path stripping safety, then call it again later to @@ -627,9 +628,9 @@ static Artifact createDexArchiveAction( new SpawnAction.Builder() .useDefaultShellEnvironment() .setExecutable(ruleContext.getExecutablePrerequisite(dexbuilderPrereq)) - .setExecutionInfo( - TargetUtils.getExecutionInfo( - ruleContext.getRule(), ruleContext.isAllowTagsPropagation())) + .setExecutionInfo(createDexingDesugaringExecRequirements(ruleContext) + .putAll(TargetUtils.getExecutionInfo(ruleContext.getRule(), ruleContext.isAllowTagsPropagation())) + .build()) // WorkerSpawnStrategy expects the last argument to be @paramfile .addInput(jar) .addOutput(dexArchive) @@ -667,6 +668,22 @@ private static Set> aspectDexopts(RuleContext ruleContext) { normalizeDexopts(getAndroidConfig(ruleContext).getDexoptsSupportedInIncrementalDexing())); } + /** + * Creates the execution requires for the DexBuilder and Desugar actions + */ + private static ImmutableMap.Builder createDexingDesugaringExecRequirements(RuleContext ruleContext) { + final ImmutableMap.Builder executionInfo = ImmutableMap.builder(); + AndroidConfiguration androidConfiguration = getAndroidConfig(ruleContext); + if (androidConfiguration.persistentDexDesugar()) { + executionInfo.putAll(ExecutionRequirements.WORKER_MODE_ENABLED); + if (androidConfiguration.persistentMultiplexDexDesugar()) { + executionInfo.putAll(ExecutionRequirements.WORKER_MULTIPLEX_MODE_ENABLED); + } + } + + return executionInfo; + } + /** * Derives options to use in incremental dexing actions from the given context and dx flags, where * the latter typically come from a {@code dexopts} attribute on a top-level target. This method diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java index 05da4e59319223..39c74c4f753cd7 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java @@ -231,6 +231,20 @@ public interface AndroidConfigurationApi extends StarlarkValue { documented = false) boolean persistentMultiplexBusyboxTools(); + @StarlarkMethod( + name = "persistent_android_dex_desugar", + structField = true, + doc = "", + documented = false) + boolean persistentDexDesugar(); + + @StarlarkMethod( + name = "persistent_multiplex_android_dex_desugar", + structField = true, + doc = "", + documented = false) + boolean persistentMultiplexDexDesugar(); + @StarlarkMethod( name = "get_output_directory_name", structField = true, From f5dfebb9221e67e5fde89653c5e0d0471b491a2f Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 2 Mar 2023 08:37:41 -0800 Subject: [PATCH 4/8] Enable workers by default again --- .../devtools/build/lib/rules/android/DexArchiveAspect.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index 3dae31cfdbc4ef..f9f6baefa81e54 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -531,13 +531,15 @@ private static Artifact createDesugarAction( new SpawnAction.Builder() .useDefaultShellEnvironment() .setExecutable(ruleContext.getExecutablePrerequisite(desugarPrereqName)) - .setExecutionInfo(createDexingDesugaringExecRequirements(ruleContext).build()) .addInput(jar) .addTransitiveInputs(bootclasspath) .addTransitiveInputs(classpath) .addOutput(result) .setMnemonic("Desugar") - .setProgressMessage("Desugaring %s for Android", jar.prettyPrint()); + .setProgressMessage("Desugaring %s for Android", jar.prettyPrint()) + .setExecutionInfo(createDexingDesugaringExecRequirements(ruleContext) + .putAll(ExecutionRequirements.WORKER_MODE_ENABLED) + .build()); // SpawnAction.Builder.build() is documented as being safe for re-use. So we can call build here // to get the action's inputs for vetting path stripping safety, then call it again later to From fd4662c3360434e7c401ab7184a3a54d60c264e8 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 2 Mar 2023 09:12:37 -0800 Subject: [PATCH 5/8] Avoid dups --- .../devtools/build/lib/rules/android/DexArchiveAspect.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index f9f6baefa81e54..2b0488492c0a32 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -539,7 +539,7 @@ private static Artifact createDesugarAction( .setProgressMessage("Desugaring %s for Android", jar.prettyPrint()) .setExecutionInfo(createDexingDesugaringExecRequirements(ruleContext) .putAll(ExecutionRequirements.WORKER_MODE_ENABLED) - .build()); + .buildKeepingLast()); // SpawnAction.Builder.build() is documented as being safe for re-use. So we can call build here // to get the action's inputs for vetting path stripping safety, then call it again later to @@ -632,7 +632,7 @@ static Artifact createDexArchiveAction( .setExecutable(ruleContext.getExecutablePrerequisite(dexbuilderPrereq)) .setExecutionInfo(createDexingDesugaringExecRequirements(ruleContext) .putAll(TargetUtils.getExecutionInfo(ruleContext.getRule(), ruleContext.isAllowTagsPropagation())) - .build()) + .buildKeepingLast()) // WorkerSpawnStrategy expects the last argument to be @paramfile .addInput(jar) .addOutput(dexArchive) From 7dec51a0ed65e14b84bc72bdc41859b9491a555c Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Mon, 3 Apr 2023 20:21:04 -0700 Subject: [PATCH 6/8] Remove comment --- tools/android/BUILD.tools | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools index 7fa51a1fe46739..9d5fd1e5333daf 100644 --- a/tools/android/BUILD.tools +++ b/tools/android/BUILD.tools @@ -47,8 +47,6 @@ java_binary( runtime_deps = ["//src/tools/android/java/com/google/devtools/build/android/r8"], ) -# NOTE: d8 dex builder doesn't support the persistent worker mode at the moment. To use this config, -# without a build error, --nouse_workers_with_dexbuilder flag must also be specified. config_setting( name = "d8_incremental_dexing", values = { From 9bfc2b7548c65e1bc4b0f0273549f07bfb444cca Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Tue, 4 Apr 2023 13:21:34 -0700 Subject: [PATCH 7/8] Move use_workers_with_dexbuilder into the graveyard options. --- .../devtools/build/lib/bazel/rules/BazelRulesModule.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java index cc6cc6c2efe31e..d5806dc912ea8b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java @@ -362,6 +362,15 @@ public static final class BazelBuildGraveyardOptions extends BuildGraveyardOptio help = "This option is deprecated and has no effect.") public boolean shortenObjFilePath; + @Deprecated + @Option( + name = "use_workers_with_dexbuilder", + defaultValue = "true", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.EXECUTION}, + help = "This option is deprecated and has no effect.") + public boolean useWorkersWithDexbuilder; + @Option( name = "force_ignore_dash_static", defaultValue = "false", From 99df324e4a895da15231423f08702dec8bdfb43f Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 6 Apr 2023 21:06:04 -0700 Subject: [PATCH 8/8] Move into BuildGraveyardOptions --- .../lib/bazel/rules/BazelRulesModule.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java index d5806dc912ea8b..f396c9e38af9bb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java @@ -281,6 +281,15 @@ public static class BuildGraveyardOptions extends OptionsBase { help = "Deprecated no-op. Use --experimental_dynamic_local_load_factor instead.") @Deprecated public boolean skipFirstBuild; + + @Option( + name = "use_workers_with_dexbuilder", + defaultValue = "true", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.EXECUTION}, + help = "This option is deprecated and has no effect.") + @Deprecated + public boolean useWorkersWithDexbuilder; } /** This is where deprecated Bazel-specific options only used by the build command go to die. */ @@ -362,15 +371,6 @@ public static final class BazelBuildGraveyardOptions extends BuildGraveyardOptio help = "This option is deprecated and has no effect.") public boolean shortenObjFilePath; - @Deprecated - @Option( - name = "use_workers_with_dexbuilder", - defaultValue = "true", - documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, - effectTags = {OptionEffectTag.EXECUTION}, - help = "This option is deprecated and has no effect.") - public boolean useWorkersWithDexbuilder; - @Option( name = "force_ignore_dash_static", defaultValue = "false",