private ConfigurationSizes getSizeStandaloneVariant() { checkState( !getSizeRequest.getInstant(), "Standalone Variants cant be selected when instant flag is set"); // When modules are specified we ignore standalone variants. if (getSizeRequest.getModules().isPresent()) { return ConfigurationSizes.create(ImmutableMap.of(), ImmutableMap.of()); } VariantTargeting variantTargeting = variant.getTargeting(); SizeConfiguration sizeConfiguration = mergeWithDeviceSpec( getSizeConfiguration( variantTargeting.getSdkVersionTargeting(), variantTargeting.getAbiTargeting(), variantTargeting.getScreenDensityTargeting(), LanguageTargeting.getDefaultInstance()), getSizeRequest.getDeviceSpec()); // Variants of standalone APKs have only one APK each. long compressedSize = sizeByApkPaths.get( Iterables.getOnlyElement( Iterables.getOnlyElement(variant.getApkSetList()).getApkDescriptionList()) .getPath()); ImmutableMap<SizeConfiguration, Long> sizeConfigurationMap = ImmutableMap.of(sizeConfiguration, compressedSize); return ConfigurationSizes.create(sizeConfigurationMap, sizeConfigurationMap); }
@Test public void apkMatch_withModuleNameFiltering_instantApks_checksModuleName_isEmpty() { DeviceSpec device = deviceWithSdk(21); ZipPath apk = ZipPath.create("master-de-fr.apk"); BuildApksResult buildApksResult = buildApksResult( createVariant( VariantTargeting.getDefaultInstance(), splitApkSet( /* moduleName= */ "base", splitApkDescription(ApkTargeting.getDefaultInstance(), apk)))); Optional<ImmutableSet<String>> allModules = Optional.empty(); assertThat(new ApkMatcher(device, allModules, MATCH_INSTANT).getMatchingApks(buildApksResult)) .isEmpty(); Optional<ImmutableSet<String>> baseModuleOnly = Optional.of(ImmutableSet.of("base")); assertThat( new ApkMatcher(device, baseModuleOnly, MATCH_INSTANT).getMatchingApks(buildApksResult)) .isEmpty(); Optional<ImmutableSet<String>> featureModuleOnly = Optional.of(ImmutableSet.of("feature")); // No matching instant variant assertThat( new ApkMatcher(device, featureModuleOnly, MATCH_INSTANT) .getMatchingApks(buildApksResult)) .isEmpty(); }
/** * Given a set of potentially overlapping variant targetings generate smallest set of disjoint * variant targetings covering all of them. * * <p>Assumption: All Variants only support sdk targeting. */ public static ImmutableSet<VariantTargeting> generateAllVariantTargetings( ImmutableSet<VariantTargeting> variantTargetings) { if (variantTargetings.size() <= 1) { return variantTargetings; } ImmutableList<SdkVersionTargeting> sdkVersionTargetings = generateAllSdkTargetings( variantTargetings .stream() .map(variantTargeting -> variantTargeting.getSdkVersionTargeting()) .collect(toImmutableList())); return sdkVersionTargetings .stream() .map( sdkVersionTargeting -> VariantTargeting.newBuilder().setSdkVersionTargeting(sdkVersionTargeting).build()) .collect(toImmutableSet()); }
.distinct() .collect(toImmutableSet())) .containsExactly(VariantTargeting.getDefaultInstance());
.distinct() .collect(toImmutableSet())) .containsExactly(VariantTargeting.getDefaultInstance());
.distinct() .collect(toImmutableSet())) .containsExactly(VariantTargeting.getDefaultInstance()); for (ModuleSplit shard : shards) { assertThat(extractPaths(shard.getEntries()))
.distinct() .collect(toImmutableSet())) .containsExactly(VariantTargeting.getDefaultInstance()); ImmutableSet<AbiAlias> x64X86Set = ImmutableSet.of(X86_64, X86); ImmutableSet<AbiAlias> x64ArmSet = ImmutableSet.of(X86_64, ARMEABI_V7A);
.distinct() .collect(toImmutableSet())) .containsExactly(VariantTargeting.getDefaultInstance());
.addVariant( createVariant( VariantTargeting.getDefaultInstance(), createSplitApkSet( /* moduleName= */ "base",
.distinct() .collect(toImmutableSet())) .containsExactly(VariantTargeting.getDefaultInstance());
.addVariant( createVariant( VariantTargeting.getDefaultInstance(), createSplitApkSet( /* moduleName= */ "base",
buildApksResult( createVariant( VariantTargeting.getDefaultInstance(), splitApkSet( /* moduleName= */ "base",
BuildApksResult result = extractTocFromApkSetFile(apkSetFile, outputDir); assertThat(standaloneApkVariants(result)).hasSize(1); assertThat(standaloneApkVariants(result).get(0).getTargeting().getAbiTargeting()) .isEqualTo(abiTargeting(ARMEABI_V7A)); assertThat(splitApkVariants(result)).hasSize(1);
buildApksResult( createVariant( VariantTargeting.getDefaultInstance(), splitApkSet( /* moduleName= */ "base",
buildApksResult( createVariant( VariantTargeting.getDefaultInstance(), splitApkSet( /* moduleName= */ "base",
.addVariant( createVariant( VariantTargeting.getDefaultInstance(), createSplitApkSet( "base",
Map<SizeConfiguration, Long> maxSizeByConfiguration = new HashMap<>(); SdkVersionTargeting sdkVersionTargeting = variant.getTargeting().getSdkVersionTargeting(); for (AbiTargeting abiTargeting : abiTargetingOptions) { for (ScreenDensityTargeting screenDensityTargeting : screenDensityTargetingOptions) {
.setMasterSplit(false) .setAndroidManifest(AndroidManifest.create(androidManifest("com.test.app"))) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build(); ModuleSplit assetsSplit2 = .setMasterSplit(false) .setAndroidManifest(AndroidManifest.create(androidManifest("com.test.app"))) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build(); BundleModule bundleModule =
.setModuleName(BundleModuleName.create("base")) .setApkTargeting(ApkTargeting.getDefaultInstance()) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build(); ModuleSplit assetSlice = .setModuleName(BundleModuleName.create("some_assets")) .setApkTargeting(ApkTargeting.getDefaultInstance()) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build();
.setMasterSplit(false) .setAndroidManifest(AndroidManifest.create(androidManifest("com.test.app"))) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build(); ModuleSplit assetsSplit2 =