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()); }
!apkGenerationConfiguration.isForInstantAppVariants() && targetsPreM(moduleSplit); createModuleSplit( moduleSplit, mergeAndSetCompression(libraryEntries, moduleSplit, shouldCompress),
@Test public void nativeCompressionSplitter_withM_withLibs() throws Exception { NativeLibrariesCompressionSplitter nativeLibrariesCompressionSplitter = new NativeLibrariesCompressionSplitter(); ImmutableCollection<ModuleSplit> splits = nativeLibrariesCompressionSplitter.split( ModuleSplit.forNativeLibraries( createSingleLibraryModule("testModule", "x86", "lib/x86/libnoname.so"), variantSdkTargeting(ANDROID_M_API_VERSION))); assertThat(splits).hasSize(1); ModuleSplit moduleSplit = Iterables.getOnlyElement(splits); assertThat(moduleSplit.getVariantTargeting()) .isEqualTo(variantSdkTargeting(ANDROID_M_API_VERSION)); assertThat(extractPaths(moduleSplit.getEntries())).containsExactly("lib/x86/libnoname.so"); assertThat(moduleSplit.isMasterSplit()).isTrue(); assertThat(getShouldCompress(moduleSplit, "lib/x86/libnoname.so")).isFalse(); assertThat(moduleSplit.getApkTargeting()).isEqualToDefaultInstance(); assertThat( compareManifestMutators( moduleSplit.getMasterManifestMutators(), withExtractNativeLibs(false))) .isTrue(); }
@Test public void nativeCompressionSplitter_preM_withLibs() throws Exception { NativeLibrariesCompressionSplitter nativeLibrariesCompressionSplitter = new NativeLibrariesCompressionSplitter(); ImmutableCollection<ModuleSplit> splits = nativeLibrariesCompressionSplitter.split( ModuleSplit.forNativeLibraries( createSingleLibraryModule("testModule", "x86", "lib/x86/libnoname.so"), lPlusVariantTargeting())); assertThat(splits).hasSize(1); ModuleSplit moduleSplit = Iterables.getOnlyElement(splits); assertThat(moduleSplit.getVariantTargeting()).isEqualTo(lPlusVariantTargeting()); assertThat(extractPaths(moduleSplit.getEntries())).containsExactly("lib/x86/libnoname.so"); assertThat(moduleSplit.isMasterSplit()).isTrue(); assertThat(getShouldCompress(moduleSplit, "lib/x86/libnoname.so")).isTrue(); assertThat(moduleSplit.getApkTargeting()).isEqualToDefaultInstance(); assertThat( compareManifestMutators( moduleSplit.getMasterManifestMutators(), withExtractNativeLibs(true))) .isTrue(); }
@Test public void nativeCompressionSplitter_withM_withoutLibs() throws Exception { NativeLibrariesCompressionSplitter nativeLibrariesCompressionSplitter = new NativeLibrariesCompressionSplitter(); BundleModule bundleModule = new BundleModuleBuilder("testModule") .addFile("dex/classes.dex") .setManifest(androidManifest("com.test.app")) .build(); ImmutableCollection<ModuleSplit> splits = nativeLibrariesCompressionSplitter.split( ModuleSplit.forModule(bundleModule, variantSdkTargeting(ANDROID_M_API_VERSION))); assertThat(splits).hasSize(1); ModuleSplit moduleSplit = Iterables.getOnlyElement(splits); assertThat(moduleSplit.getVariantTargeting()) .isEqualTo(variantSdkTargeting(ANDROID_M_API_VERSION)); assertThat(extractPaths(moduleSplit.getEntries())).containsExactly("dex/classes.dex"); assertThat(moduleSplit.isMasterSplit()).isTrue(); assertThat(getShouldCompress(moduleSplit, "dex/classes.dex")).isTrue(); assertThat(moduleSplit.getApkTargeting()).isEqualToDefaultInstance(); }
@Test public void splittingByCompression_preM_instantModule() throws Exception { NativeLibrariesCompressionSplitter nativeLibrariesCompressionSplitter = new NativeLibrariesCompressionSplitter( ApkGenerationConfiguration.builder().setForInstantAppVariants(true).build()); ImmutableCollection<ModuleSplit> splits = nativeLibrariesCompressionSplitter.split( ModuleSplit.forNativeLibraries( createSingleLibraryModule("testModule", "x86", "lib/x86/libnoname.so"), lPlusVariantTargeting())); assertThat(splits).hasSize(1); ModuleSplit moduleSplit = Iterables.getOnlyElement(splits); assertThat(moduleSplit.getVariantTargeting()).isEqualTo(lPlusVariantTargeting()); assertThat(extractPaths(moduleSplit.getEntries())).containsExactly("lib/x86/libnoname.so"); assertThat(moduleSplit.isMasterSplit()).isTrue(); assertThat(moduleSplit.getApkTargeting()).isEqualToDefaultInstance(); assertThat(getShouldCompress(moduleSplit, "lib/x86/libnoname.so")).isFalse(); assertThat( compareManifestMutators( moduleSplit.getMasterManifestMutators(), withExtractNativeLibs(false))) .isTrue(); }
@Test public void otherEntriesCompressionUnchanged() throws Exception { NativeLibrariesCompressionSplitter nativeLibrariesCompressionSplitter = new NativeLibrariesCompressionSplitter(); nativeLibrariesCompressionSplitter.split( ModuleSplit.forModule(bundleModule, variantSdkTargeting(ANDROID_M_API_VERSION)));