private ImmutableSet<VariantTargeting> generateVariants() { ImmutableSet.Builder<VariantTargeting> builder = ImmutableSet.builder(); for (BundleModule module : modules) { VariantGenerator variantGenerator = new VariantGenerator(module, apkGenerationConfiguration); ImmutableSet<VariantTargeting> splitApks = variantGenerator.generateVariants(); builder.addAll(splitApks); } return generateAllVariantTargetings(builder.build()); }
public ImmutableSet<VariantTargeting> generateVariants() { if (targetsOnlyPreL(module)) { throw CommandExecutionException.builder() .withMessage( "Cannot generate variants '%s' because it does not target devices on Android " + "L or above.", module.getName()) .build(); } ImmutableSet.Builder<VariantTargeting> splits = ImmutableSet.<VariantTargeting>builder().add(lPlusVariantTargeting()); for (BundleModuleVariantGenerator bundleModuleVariantGenerator : getVariantGenerators()) { splits.addAll(bundleModuleVariantGenerator.generate(module)); } return splits.build(); };
@Test public void variantsWithNativeLibsDexFiles_allOptimizationsDisabled() throws Exception { VariantGenerator variantGenerator = new VariantGenerator(createSingleLibraryDexModule()); ImmutableCollection<VariantTargeting> splits = variantGenerator.generateVariants(); assertThat(splits).containsExactly(lPlusVariantTargeting()); }
@Test public void variantsWithNativeLibsDexFiles_withInstantModule_allOptimizationsDisabled() throws Exception { VariantGenerator variantGenerator = new VariantGenerator( createSingleLibraryDexModule(), ApkGenerationConfiguration.builder().setForInstantAppVariants(true).build()); ImmutableCollection<VariantTargeting> splits = variantGenerator.generateVariants(); assertThat(splits).containsExactly(lPlusVariantTargeting()); }
@Test public void targetsPreLOnlyInManifest_throws() throws Exception { int preL = 20; BundleModule bundleModule = new BundleModuleBuilder("testModule") .setManifest(androidManifest("com.test.app", withMaxSdkVersion(preL))) .build(); CommandExecutionException exception = assertThrows( CommandExecutionException.class, () -> new VariantGenerator(bundleModule).generateVariants()); assertThat(exception) .hasMessageThat() .contains("does not target devices on Android L or above"); }
@Test public void variantsWithNativeLibsDexFiles_withDexOptimization() throws Exception { VariantGenerator variantGenerator = new VariantGenerator( createSingleLibraryDexModule(), ApkGenerationConfiguration.builder().setEnableDexCompressionSplitter(true).build()); ImmutableCollection<VariantTargeting> splits = variantGenerator.generateVariants(); assertThat(splits) .containsExactly(lPlusVariantTargeting(), variantMinSdkTargeting(ANDROID_P_API_VERSION)); }
@Test public void variantsWithNativeLibsDexFiles_withNativeLibsOptimization() throws Exception { VariantGenerator variantGenerator = new VariantGenerator( createSingleLibraryDexModule(), ApkGenerationConfiguration.builder() .setEnableNativeLibraryCompressionSplitter(true) .build()); ImmutableCollection<VariantTargeting> splits = variantGenerator.generateVariants(); assertThat(splits) .containsExactly(lPlusVariantTargeting(), variantMinSdkTargeting(ANDROID_M_API_VERSION)); }
@Test public void variantsWithNativeLibsDexFiles_withInstantModule_withNativeLibsAndDexOptimization() throws Exception { VariantGenerator variantGenerator = new VariantGenerator( createSingleLibraryDexModule(), ApkGenerationConfiguration.builder() .setForInstantAppVariants(true) .setEnableDexCompressionSplitter(true) .setEnableNativeLibraryCompressionSplitter(true) .build()); ImmutableCollection<VariantTargeting> splits = variantGenerator.generateVariants(); assertThat(splits).containsExactly(lPlusVariantTargeting()); }
@Test public void variantsWithNativeLibsDexFiles_withNativeLibsAndDexOptimization() throws Exception { VariantGenerator variantGenerator = new VariantGenerator( createSingleLibraryDexModule(), ApkGenerationConfiguration.builder() .setEnableDexCompressionSplitter(true) .setEnableNativeLibraryCompressionSplitter(true) .build()); ImmutableCollection<VariantTargeting> splits = variantGenerator.generateVariants(); assertThat(splits) .containsExactly( lPlusVariantTargeting(), variantMinSdkTargeting(ANDROID_M_API_VERSION), variantMinSdkTargeting(ANDROID_P_API_VERSION)); }