public ImmutableList<ModuleSplit> generateSystemSplits( ImmutableList<BundleModule> modules, BundleMetadata bundleMetadata, ApkOptimizations apkOptimizations, Optional<DeviceSpec> deviceSpec) { return generateSplitsInternal(modules, bundleMetadata, apkOptimizations, deviceSpec); }
/** Creates a {@link ModuleSplitSplitter} capable of splitting assets on the language. */ public static ModuleSplitSplitter create() { return AssetsDimensionSplitterFactory.createSplitter( AssetsDirectoryTargeting::getLanguage, LanguageAssetsSplitter::fromLanguage, ApkTargeting::hasLanguageTargeting); }
@Test public void variantsGeneration_withInstantModule_generatesNoVariant() throws Exception { DexCompressionVariantGenerator dexCompressionVariantGenerator = new DexCompressionVariantGenerator( ApkGenerationConfiguration.builder() .setForInstantAppVariants(true) .setEnableDexCompressionSplitter(true) .build()); ImmutableCollection<VariantTargeting> splits = dexCompressionVariantGenerator.generate(createModuleWithDexFile()); assertThat(splits).isEmpty(); }
@Test public void variantsWithNativeLibs_instantModule() throws Exception { NativeLibsCompressionVariantGenerator nativeLibsCompressionVariantGenerator = new NativeLibsCompressionVariantGenerator( ApkGenerationConfiguration.builder() .setForInstantAppVariants(true) .setEnableNativeLibraryCompressionSplitter(true) .build()); ImmutableCollection<VariantTargeting> splits = nativeLibsCompressionVariantGenerator.generate( createSingleLibraryModule("testModule", "x86", "lib/x86/libnoname.so")); assertThat(splits).isEmpty(); }
public static Builder builder() { return new AutoValue_ApkGenerationConfiguration.Builder() .setForInstantAppVariants(false) .setEnableNativeLibraryCompressionSplitter(false) .setEnableDexCompressionSplitter(false) .setInclude64BitLibs(true) .setAbisForPlaceholderLibs(ImmutableSet.of()) .setOptimizationDimensions(ImmutableSet.of()); }
@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 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)); }
private static ApkGenerationConfiguration withDisabled64BitLibs() { return ApkGenerationConfiguration.builder() .setInclude64BitLibs(false) .setOptimizationDimensions(ImmutableSet.of(ABI)) .build(); } }
private static ApkGenerationConfiguration withOptimizationDimensions( ImmutableSet<OptimizationDimension> optimizationDimensions) { return ApkGenerationConfiguration.builder() .setOptimizationDimensions(optimizationDimensions) .build(); }
public ImmutableList<ModuleSplit> generateApexSplits(ImmutableList<BundleModule> modules) { BundleSharder bundleSharder = new BundleSharder(tempDir, bundleVersion, generate64BitShards); ImmutableList<ModuleSplit> shardedApexApks = bundleSharder.shardApexBundle(getOnlyElement(modules)); return setVariantTargetingAndSplitType(shardedApexApks, splitType); }
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); }
private SplittingPipeline createDexSplittingPipeline() { ImmutableList.Builder<ModuleSplitSplitter> dexSplitters = ImmutableList.builder(); if (apkGenerationConfiguration.getEnableDexCompressionSplitter()) { dexSplitters.add(new DexCompressionSplitter()); } return new SplittingPipeline(dexSplitters.build()); }
private ImmutableList<BundleModuleVariantGenerator> getVariantGenerators() { return ImmutableList.of( new NativeLibsCompressionVariantGenerator(apkGenerationConfiguration), new DexCompressionVariantGenerator(apkGenerationConfiguration)); }
private SplittingPipeline createApexImagesSplittingPipeline() { // We always split APEX image files by MultiAbi, regardless of OptimizationDimension. return new SplittingPipeline(ImmutableList.of(new AbiApexImagesSplitter())); }
private static BundleModule createSingleLibraryModule(String moduleName, String architecture) throws Exception { return createSingleLibraryModule( moduleName, architecture, "lib/" + architecture + "/libnoname.so"); }
@Test public void variantsGeneration_withDexFile_generatesPVariant() throws Exception { DexCompressionVariantGenerator dexCompressionVariantGenerator = new DexCompressionVariantGenerator( ApkGenerationConfiguration.builder().setEnableDexCompressionSplitter(true).build()); ImmutableCollection<VariantTargeting> splits = dexCompressionVariantGenerator.generate(createModuleWithDexFile()); assertThat(splits).containsExactly(variantMinSdkTargeting(ANDROID_P_API_VERSION)); }
@Test public void variantsWithNativeLibs() throws Exception { NativeLibsCompressionVariantGenerator nativeLibsCompressionVariantGenerator = new NativeLibsCompressionVariantGenerator( ApkGenerationConfiguration.builder() .setEnableNativeLibraryCompressionSplitter(true) .build()); ImmutableCollection<VariantTargeting> splits = nativeLibsCompressionVariantGenerator.generate( createSingleLibraryModule("testModule", "x86", "lib/x86/libnoname.so")); assertThat(splits).containsExactly(variantMinSdkTargeting(ANDROID_M_API_VERSION)); }
/** Creates a {@link ModuleSplitSplitter} capable of splitting assets on the Graphics API. */ public static ModuleSplitSplitter create() { return AssetsDimensionSplitterFactory.createSplitter( AssetsDirectoryTargeting::getGraphicsApi, GraphicsApiAssetsSplitter::fromGraphicsApi, ApkTargeting::hasGraphicsApiTargeting); }
public static ModuleSplitSplitter create() { return AssetsDimensionSplitterFactory.createSplitter( AssetsDirectoryTargeting::getTextureCompressionFormat, TextureCompressionFormatAssetsSplitter::fromTextureCompressionFormat, ApkTargeting::hasTextureCompressionFormatTargeting); }