static Builder builder() { return new AutoValue_ApkOptimizations.Builder() .setUncompressNativeLibraries(false) .setUncompressDexFiles(false); }
/** Returns an optimizations specific to the universal APK. */ public static ApkOptimizations getOptimizationsForUniversalApk() { // Currently no optimizations are performed. return ApkOptimizations.builder().setSplitDimensions(ImmutableSet.of()).build(); } }
/** * Merges the optimizations instructions supplied by the developer (in the BundleConfig) and the * defaults set by BundleTool. */ public ApkOptimizations mergeWithDefaults(BundleConfig bundleConfig) { return mergeWithDefaults(bundleConfig, ImmutableSet.of()); }
@Test public void mergeOptimizations_onlyDefaults() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults(createBundleConfigBuilder().clearOptimizations().build()); assertThat(apkOptimizations.getSplitDimensions()).isEqualTo(DEFAULT_SPLIT_DIMENSIONS); assertThat(apkOptimizations.getUncompressNativeLibraries()).isFalse(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
: Version.of(buildVersionString); ApkOptimizations defaultOptimizations = ApkOptimizations.getDefaultOptimizationsForVersion(bundleToolBuildVersion); !optimizationsOverride.isEmpty() ? optimizationsOverride : mergeSplitDimensions( defaultOptimizations.getSplitDimensions(), requestedOptimizations.getSplitsConfig().getSplitDimensionList()); requestedOptimizations.hasUncompressNativeLibraries() ? requestedOptimizations.getUncompressNativeLibraries().getEnabled() : defaultOptimizations.getUncompressNativeLibraries(); return ApkOptimizations.builder() .setSplitDimensions(splitDimensions) .setUncompressNativeLibraries(uncompressNativeLibraries) .setUncompressDexFiles(uncompressDexFiles) .build();
@Test public void getDefaultOptimizations_0_6_0_onlySplitsByAbiDensityLanguageAndUncompressNativeLibs() { ApkOptimizations defaultOptimizations = ApkOptimizations.getDefaultOptimizationsForVersion(Version.of("0.6.0")); assertThat(defaultOptimizations) .isEqualTo( ApkOptimizations.builder() .setSplitDimensions(ImmutableSet.of(ABI, SCREEN_DENSITY, LANGUAGE)) .setUncompressNativeLibraries(true) .build()); } }
private ApkOptimizations getApkOptimizations(BundleConfig bundleConfig) { return new OptimizationsMerger() .mergeWithDefaults(bundleConfig, command.getOptimizationDimensions()); }
private ApkGenerationConfiguration getCommonSplitApkGenerationConfiguration( AppBundle appBundle, BundleConfig bundleConfig, Version bundleToolVersion) { ApkOptimizations apkOptimizations = getApkOptimizations(bundleConfig); ApkGenerationConfiguration.Builder apkGenerationConfiguration = ApkGenerationConfiguration.builder() .setOptimizationDimensions(apkOptimizations.getSplitDimensions()); boolean enableNativeLibraryCompressionSplitter = apkOptimizations.getUncompressNativeLibraries(); apkGenerationConfiguration.setEnableNativeLibraryCompressionSplitter( enableNativeLibraryCompressionSplitter); if (appBundle.has32BitRenderscriptCode()) { apkGenerationConfiguration.setInclude64BitLibs(false); } return apkGenerationConfiguration.build(); }
private ImmutableList<ModuleSplit> generateSplitsInternal( ImmutableList<BundleModule> modules, BundleMetadata bundleMetadata, ApkOptimizations apkOptimizations, Optional<DeviceSpec> deviceSpec) { BundleSharder bundleSharder = new BundleSharder(tempDir, bundleVersion, generate64BitShards, deviceSpec); ImmutableList<ModuleSplit> shardedApks = bundleSharder.shardBundle(modules, apkOptimizations.getSplitDimensions(), bundleMetadata); return setVariantTargetingAndSplitType(shardedApks, splitType); }
modulesToFuse(allFeatureModules), appBundle.getBundleMetadata(), ApkOptimizations.getOptimizationsForUniversalApk())); break; case SYSTEM_COMPRESSED:
@Test public void mergeOptimizations_afterVersion_0_6_0_uncompressNativeLibsNotSet() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder().setVersion("0.6.0").clearOptimizations().build()); assertThat(apkOptimizations.getSplitDimensions()).isEqualTo(DEFAULT_SPLIT_DIMENSIONS); assertThat(apkOptimizations.getUncompressNativeLibraries()).isTrue(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
@Test public void getDefaultOptimizations_0_2_0_onlySplitsByAbiDensityAndLanguage() { ApkOptimizations defaultOptimizations = ApkOptimizations.getDefaultOptimizationsForVersion(Version.of("0.2.0")); assertThat(defaultOptimizations) .isEqualTo( ApkOptimizations.builder() .setSplitDimensions(ImmutableSet.of(ABI, SCREEN_DENSITY, LANGUAGE)) .build()); }
@Test public void mergeOptimizations_withUncompressDexFiles() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .clearOptimizations() .setUncompressDexFiles(true) .build()); assertThat(apkOptimizations.getSplitDimensions()).isEqualTo(DEFAULT_SPLIT_DIMENSIONS); assertThat(apkOptimizations.getUncompressNativeLibraries()).isFalse(); assertThat(apkOptimizations.getUncompressDexFiles()).isTrue(); }
@Test public void mergeOptimizations_bundleConfigSameAsDefaults() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .clearOptimizations() .addSplitDimension(SplitDimension.Value.ABI) .build()); assertThat(apkOptimizations.getSplitDimensions()).isEqualTo(DEFAULT_SPLIT_DIMENSIONS); assertThat(apkOptimizations.getUncompressNativeLibraries()).isFalse(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
@Test public void mergeOptimizations_overridesTakePrecedence() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .clearOptimizations() .addSplitDimension(SplitDimension.Value.ABI) .build(), /* optimizationsOverride= */ ImmutableSet.of(SCREEN_DENSITY)); assertThat(apkOptimizations.getSplitDimensions()).containsExactly(SCREEN_DENSITY); assertThat(apkOptimizations.getUncompressNativeLibraries()).isFalse(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
@Test public void mergeOptimizations_overridesTakePrecedence_withUncompressNativeLibs() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .clearOptimizations() .setUncompressNativeLibraries(true) .build(), /* optimizationsOverride= */ ImmutableSet.of(SCREEN_DENSITY)); assertThat(apkOptimizations.getSplitDimensions()).containsExactly(SCREEN_DENSITY); assertThat(apkOptimizations.getUncompressNativeLibraries()).isTrue(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
@Test public void mergeOptimizations_afterVersion_0_6_0_enabledUncompressNativeLibs() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .setVersion("0.6.0") .clearOptimizations() .setUncompressNativeLibraries(/* enabled= */ true) .build()); assertThat(apkOptimizations.getSplitDimensions()).isEqualTo(DEFAULT_SPLIT_DIMENSIONS); assertThat(apkOptimizations.getUncompressNativeLibraries()).isTrue(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
@Test public void mergeOptimizations_afterVersion_0_6_0_disabledUncompressNativeLibs() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .setVersion("0.6.0") .clearOptimizations() .setUncompressNativeLibraries(/* enabled= */ false) .build()); assertThat(apkOptimizations.getSplitDimensions()).isEqualTo(DEFAULT_SPLIT_DIMENSIONS); assertThat(apkOptimizations.getUncompressNativeLibraries()).isFalse(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }
@Test public void mergeOptimizations_bundleConfigRemovesOneDimension() { ApkOptimizations apkOptimizations = new OptimizationsMerger() .mergeWithDefaults( createBundleConfigBuilder() .clearOptimizations() .addSplitDimension(SplitDimension.Value.ABI, /* negate= */ true) .build()); assertThat(apkOptimizations.getSplitDimensions()) .isEqualTo(Sets.difference(DEFAULT_SPLIT_DIMENSIONS, ImmutableSet.of(ABI))); assertThat(apkOptimizations.getUncompressNativeLibraries()).isFalse(); assertThat(apkOptimizations.getUncompressDexFiles()).isFalse(); }