Finish isolated splits API
Fixes: b/318344370
Change-Id: I160554c5bfceb3f466abde412bb3d167e4351a69
diff --git a/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java b/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java
index 2ecb303..3273271 100644
--- a/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java
@@ -8,6 +8,7 @@
import static com.android.tools.r8.BaseCompilerCommandParser.MIN_API_FLAG;
import static com.android.tools.r8.BaseCompilerCommandParser.THREAD_COUNT_FLAG;
import static com.android.tools.r8.D8CommandParser.STARTUP_PROFILE_FLAG;
+import static com.android.tools.r8.R8CommandParser.ISOLATED_SPLITS_FLAG;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
@@ -182,6 +183,13 @@
return flag1(STARTUP_PROFILE_FLAG, "<file>", "Startup profile <file> to use for dex layout.");
}
+ public static ParseFlagInfoImpl getIsolatedSplits() {
+ return flag0(
+ ISOLATED_SPLITS_FLAG,
+ "Specifies that the application is using isolated splits, i.e., if split APKs installed "
+ + "for this application are loaded into their own Context objects.");
+ }
+
public static ParseFlagInfoImpl flag0(String flag, String... help) {
return flag(flag, Collections.emptyList(), Arrays.asList(help));
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 2b20068..e887576 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -54,7 +54,6 @@
import com.android.tools.r8.utils.SetUtils;
import com.android.tools.r8.utils.StringDiagnostic;
import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.SystemPropertyUtils;
import com.android.tools.r8.utils.ThreadUtils;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
@@ -133,10 +132,7 @@
private GraphConsumer mainDexKeptGraphConsumer = null;
private InputDependencyGraphConsumer inputDependencyGraphConsumer = null;
private final FeatureSplitConfiguration.Builder featureSplitConfigurationBuilder =
- FeatureSplitConfiguration.builder()
- .setEnableIsolatedSplits(
- SystemPropertyUtils.parseSystemPropertyOrDefault(
- "com.android.tools.r8.isolatedSplits", false));
+ FeatureSplitConfiguration.builder();
private String synthesizedClassPrefix = "";
private boolean enableMissingLibraryApiModeling = false;
private boolean enableExperimentalKeepAnnotations =
@@ -479,11 +475,16 @@
* <p>See also <a href="https://developer.android.com/reference/android/R.attr#isolatedSplits">
* R.attr#isolatedSplits</a>.
*/
- public Builder setEnableExperimentalIsolatedSplits(boolean enableIsolatedSplits) {
+ public Builder setEnableIsolatedSplits(boolean enableIsolatedSplits) {
featureSplitConfigurationBuilder.setEnableIsolatedSplits(enableIsolatedSplits);
return this;
}
+ @Deprecated
+ public Builder setEnableExperimentalIsolatedSplits(boolean enableIsolatedSplits) {
+ return setEnableIsolatedSplits(enableIsolatedSplits);
+ }
+
/**
* Enable experimental/pre-release support for modeling missing library APIs.
*
diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index d88314d..2ef79c8 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -29,6 +29,8 @@
public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Command.Builder> {
+ static final String ISOLATED_SPLITS_FLAG = "--isolated-splits";
+
// Note: this must be a super-set of OPTIONS_WITH_TWO_PARAMETERS.
private static final Set<String> OPTIONS_WITH_ONE_PARAMETER =
ImmutableSet.of(
@@ -99,6 +101,7 @@
"<output>",
"Add feature <input> file to <output> file. Several ",
"occurrences can map to the same output."))
+ .add(ParseFlagInfoImpl.getIsolatedSplits())
.add(flag1("--main-dex-list-output", "<file>", "Output the full main-dex list in <file>."))
.addAll(ParseFlagInfoImpl.getAssertionsFlags())
.add(ParseFlagInfoImpl.getThreadCount())
@@ -291,6 +294,8 @@
featureSplitJars
.computeIfAbsent(Paths.get(nextNextArg), k -> new ArrayList<>())
.add(Paths.get(nextArg));
+ } else if (arg.equals(ISOLATED_SPLITS_FLAG)) {
+ builder.setEnableIsolatedSplits(true);
} else if (arg.equals("--main-dex-list")) {
builder.addMainDexListFiles(Paths.get(nextArg));
} else if (arg.equals("--main-dex-list-output")) {
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index c9b9401..2c3ea07 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -138,7 +138,7 @@
ToolHelper.addSyntheticProguardRulesConsumerForTesting(
builder, rules -> box.syntheticProguardRules = rules);
libraryDesugaringTestConfiguration.configure(builder);
- builder.setEnableExperimentalIsolatedSplits(enableIsolatedSplits);
+ builder.setEnableIsolatedSplits(enableIsolatedSplits);
builder.setEnableExperimentalMissingLibraryApiModeling(enableMissingLibraryApiModeling);
builder.setEnableStartupLayoutOptimization(enableStartupLayoutOptimization);
StringBuilder pgConfOutput = wrapProguardConfigConsumer(builder);
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 5c926b3..f167821 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -582,8 +582,6 @@
if args.enable_test_assertions:
cmd.append('-Dcom.android.tools.r8.enableTestAssertions=1')
feature_jars = dump.feature_jars()
- if determine_isolated_splits(build_properties, feature_jars):
- cmd.append('-Dcom.android.tools.r8.isolatedSplits=1')
if args.print_times:
cmd.append('-Dcom.android.tools.r8.printtimes=1')
if args.r8_flags:
@@ -625,6 +623,8 @@
])
else:
cmd.append(feature_jar)
+ if determine_isolated_splits(build_properties, feature_jars):
+ cmd.append('--isolated-splits')
if dump.library_jar():
cmd.extend(['--lib', dump.library_jar()])
if dump.classpath_jar() and not is_l8_compiler(compiler):