/** Returns master splits, i.e splits without ABI or Density targeting. */ private static ImmutableSet<ModuleSplit> getMasterSplits(ImmutableList<ModuleSplit> splits) { ImmutableSet<ModuleSplit> masterSplits = splits.stream() .filter( split -> !split.getApkTargeting().hasScreenDensityTargeting() && !split.getApkTargeting().hasAbiTargeting()) .collect(toImmutableSet()); checkState( masterSplits.size() >= 1, "Expecting at least one master split, got %s.", masterSplits.size()); checkState( masterSplits.stream() .allMatch(split -> split.getApkTargeting().equals(ApkTargeting.getDefaultInstance())), "Master splits are expected to have default targeting."); return masterSplits; }
@Test public void mergeShardTargetings_defaultInstances_ok() throws Exception { ApkTargeting targeting = ApkTargeting.getDefaultInstance(); ApkTargeting merged = MergingUtils.mergeShardTargetings(targeting, targeting); assertThat(merged).isEqualTo(targeting); assertThat(merged.hasAbiTargeting()).isFalse(); assertThat(merged.hasScreenDensityTargeting()).isFalse(); }
assertThat(densitySplit.getApkTargeting().hasScreenDensityTargeting()).isTrue(); switch (densitySplit .getApkTargeting()
.containsResource("com.test.app:drawable/title_image") .withConfigSize(1); assertThat(densitySplit.getApkTargeting().hasScreenDensityTargeting()).isTrue(); switch (densitySplit .getApkTargeting()
/** * Merges two targetings into targeting of an APK shard. * * <p>Expects that the input targetings have only ABI and/or screen density targeting. * * <p>If both targetings target a common dimension, then the targeted universe in that dimension * must be the same. */ public static ApkTargeting mergeShardTargetings( ApkTargeting targeting1, ApkTargeting targeting2) { checkHasOnlyAbiAndDensityTargeting(targeting1); checkHasOnlyAbiAndDensityTargeting(targeting2); ApkTargeting.Builder merged = ApkTargeting.newBuilder(); if (targeting1.hasAbiTargeting() || targeting2.hasAbiTargeting()) { merged.setAbiTargeting(mergeAbiTargetingsOf(targeting1, targeting2)); } if (targeting1.hasScreenDensityTargeting() || targeting2.hasScreenDensityTargeting()) { merged.setScreenDensityTargeting(mergeDensityTargetingsOf(targeting1, targeting2)); } return merged.build(); }
private static VariantTargeting standaloneApkVariantTargeting(ModuleSplit standaloneApk) { ApkTargeting apkTargeting = standaloneApk.getApkTargeting(); VariantTargeting.Builder variantTargeting = VariantTargeting.newBuilder(); if (apkTargeting.hasAbiTargeting()) { variantTargeting.setAbiTargeting(apkTargeting.getAbiTargeting()); } if (apkTargeting.hasScreenDensityTargeting()) { variantTargeting.setScreenDensityTargeting(apkTargeting.getScreenDensityTargeting()); } if (apkTargeting.hasMultiAbiTargeting()) { variantTargeting.setMultiAbiTargeting(apkTargeting.getMultiAbiTargeting()); } variantTargeting.setSdkVersionTargeting(sdkVersionTargeting(standaloneApk)); return variantTargeting.build(); }
@Test public void mergeShardTargetings_equalAbis_ok() throws Exception { ApkTargeting targeting = apkAbiTargeting(AbiAlias.X86); ApkTargeting merged = MergingUtils.mergeShardTargetings(targeting, targeting); assertThat(merged).isEqualTo(targeting); assertThat(merged.hasScreenDensityTargeting()).isFalse(); }