public static ApkGenerationConfiguration getDefaultInstance() { return ApkGenerationConfiguration.builder().build(); }
@VisibleForTesting VariantGenerator(BundleModule module) { this(module, ApkGenerationConfiguration.getDefaultInstance()); }
public ModuleSplitter( BundleModule module, Version bundleVersion, ApkGenerationConfiguration apkGenerationConfiguration, VariantTargeting variantTargeting, ImmutableSet<String> allModuleNames, Predicate<ResourceTableEntry> pinResourceToMaster) { this.module = checkNotNull(module); this.bundleVersion = checkNotNull(bundleVersion); this.apkGenerationConfiguration = checkNotNull(apkGenerationConfiguration); this.variantTargeting = checkNotNull(variantTargeting); this.abiPlaceholderInjector = new AbiPlaceholderInjector(apkGenerationConfiguration.getAbisForPlaceholderLibs()); this.allModuleNames = allModuleNames; this.pinResourceToMaster = pinResourceToMaster; }
private SplittingPipeline createNativeLibrariesSplittingPipeline() { ImmutableList.Builder<ModuleSplitSplitter> nativeSplitters = ImmutableList.builder(); if (apkGenerationConfiguration.getEnableNativeLibraryCompressionSplitter()) { nativeSplitters.add(new NativeLibrariesCompressionSplitter(apkGenerationConfiguration)); } if (apkGenerationConfiguration .getOptimizationDimensions() .contains(OptimizationDimension.ABI)) { nativeSplitters.add( new AbiNativeLibrariesSplitter(apkGenerationConfiguration.getInclude64BitLibs())); } return new SplittingPipeline(nativeSplitters.build()); }
@Override public ImmutableCollection<VariantTargeting> generate(BundleModule module) { if (!apkGenerationConfiguration.getEnableNativeLibraryCompressionSplitter() || apkGenerationConfiguration.isForInstantAppVariants() || !module.getNativeConfig().isPresent()) { return ImmutableList.of(); } return ImmutableList.of( variantTargeting(sdkVersionTargeting(sdkVersionFrom(ANDROID_M_API_VERSION)))); } }
@Override public ImmutableCollection<VariantTargeting> generate(BundleModule module) { if (!apkGenerationConfiguration.getEnableDexCompressionSplitter() || apkGenerationConfiguration.isForInstantAppVariants()) { return ImmutableList.of(); } ImmutableSet<ModuleEntry> dexEntries = module.getEntries().stream() .filter(entry -> entry.getPath().startsWith(DEX_DIRECTORY)) .collect(toImmutableSet()); if (dexEntries.isEmpty()) { return ImmutableList.of(); } return ImmutableList.of( variantTargeting(sdkVersionTargeting(sdkVersionFrom(ANDROID_P_API_VERSION)))); } }
private SplittingPipeline createResourcesSplittingPipeline() { ImmutableList.Builder<ModuleSplitSplitter> resourceSplitters = ImmutableList.builder(); if (apkGenerationConfiguration .getOptimizationDimensions() .contains(OptimizationDimension.SCREEN_DENSITY)) { resourceSplitters.add(new ScreenDensityResourcesSplitter(bundleVersion, pinResourceToMaster)); } if (apkGenerationConfiguration .getOptimizationDimensions() .contains(OptimizationDimension.LANGUAGE)) { resourceSplitters.add(new LanguageResourcesSplitter(pinResourceToMaster)); } return new SplittingPipeline(resourceSplitters.build()); }
public ImmutableList<ModuleSplit> splitModule() { if (apkGenerationConfiguration.isForInstantAppVariants()) { // Returns the list of module splits, ready for use as an instant app. return splitModuleInternal().stream() .map(this::makeInstantManifestChanges) .map(moduleSplit -> moduleSplit.toBuilder().setSplitType(SplitType.INSTANT).build()) .collect(toImmutableList()); } else { return splitModuleInternal().stream() .map(this::removeSplitName) .map(this::addPlaceHolderNativeLibsToBaseModule) .collect(toImmutableList()); } }
private SplittingPipeline createDexSplittingPipeline() { ImmutableList.Builder<ModuleSplitSplitter> dexSplitters = ImmutableList.builder(); if (apkGenerationConfiguration.getEnableDexCompressionSplitter()) { dexSplitters.add(new DexCompressionSplitter()); } return new SplittingPipeline(dexSplitters.build()); }
ApkGenerationConfiguration instantApkGenerationCofiguration = commonApkGenerationConfiguration .toBuilder() .setForInstantAppVariants(true)
private SplittingPipeline createAssetsSplittingPipeline() { ImmutableList.Builder<ModuleSplitSplitter> assetsSplitters = ImmutableList.builder(); if (apkGenerationConfiguration .getOptimizationDimensions() .contains(OptimizationDimension.LANGUAGE)) { assetsSplitters.add(LanguageAssetsSplitter.create()); } return new SplittingPipeline(assetsSplitters.build()); } }
!apkGenerationConfiguration.isForInstantAppVariants() && targetsPreM(moduleSplit);
private static ApkGenerationConfiguration withOptimizationDimensions( ImmutableSet<OptimizationDimension> optimizationDimensions) { return ApkGenerationConfiguration.builder() .setOptimizationDimensions(optimizationDimensions) .build(); }
@VisibleForTesting NativeLibrariesCompressionSplitter() { this(ApkGenerationConfiguration.getDefaultInstance()); }
private SplittingPipeline createAssetsSplittingPipeline() { ImmutableList.Builder<ModuleSplitSplitter> assetsSplitters = ImmutableList.builder(); if (apkGenerationConfiguration .getOptimizationDimensions() .contains(OptimizationDimension.LANGUAGE)) { assetsSplitters.add(LanguageAssetsSplitter.create()); } return new SplittingPipeline(assetsSplitters.build()); }
private ModuleSplit addPlaceHolderNativeLibsToBaseModule(ModuleSplit moduleSplit) { if (!apkGenerationConfiguration.getAbisForPlaceholderLibs().isEmpty() && moduleSplit.isBaseModuleSplit() && moduleSplit.isMasterSplit()) { return abiPlaceholderInjector.addPlaceholderNativeEntries(moduleSplit); } else { return moduleSplit; } }
private static ApkGenerationConfiguration withDisabled64BitLibs() { return ApkGenerationConfiguration.builder() .setInclude64BitLibs(false) .setOptimizationDimensions(ImmutableSet.of(ABI)) .build(); } }
@VisibleForTesting ModuleSplitter(BundleModule module, Version bundleVersion) { this( module, bundleVersion, ApkGenerationConfiguration.getDefaultInstance(), lPlusVariantTargeting(), ImmutableSet.of(), /* pinResourceToMaster= */ Predicates.alwaysFalse()); }
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(); }
@Test public void variantsWithNativeLibs_nativeLibsOptimizationDisabled() throws Exception { NativeLibsCompressionVariantGenerator nativeLibsCompressionVariantGenerator = new NativeLibsCompressionVariantGenerator(ApkGenerationConfiguration.getDefaultInstance()); ImmutableCollection<VariantTargeting> splits = nativeLibsCompressionVariantGenerator.generate( createSingleLibraryModule("testModule", "x86", "lib/x86/libnoname.so")); assertThat(splits).isEmpty(); }