@Test public void apkMultiAbiTargeting_byMultipleAbisAndAlternatives() { ApkTargeting expectedTargeting = ApkTargeting.newBuilder().setMultiAbiTargeting(MULTI_ABI_WITH_ALTERNATIVES).build(); assertThat( TargetingUtils.apkMultiAbiTargeting( ImmutableSet.of(ImmutableSet.of(X86), ImmutableSet.of(ARMEABI_V7A, ARM64_V8A)), ImmutableSet.of(ImmutableSet.of(X86_64)))) .ignoringRepeatedFieldOrder() .isEqualTo(expectedTargeting); }
@Test public void apkMultiAbiTargetingFromAllTergeting() { ImmutableSet<ImmutableSet<AbiAlias>> allTargeting = ImmutableSet.of( ImmutableSet.of(ARMEABI_V7A), ImmutableSet.of(ARM64_V8A), ImmutableSet.of(X86)); ApkTargeting expectedTargeting = ApkTargeting.newBuilder().setMultiAbiTargeting(SINGLE_ABI_WITH_ALTERNATIVES).build(); assertThat( TargetingUtils.apkMultiAbiTargetingFromAllTargeting(ImmutableSet.of(X86), allTargeting)) .ignoringRepeatedFieldOrder() .isEqualTo(expectedTargeting); }
@Test public void apkMultiAbiTargeting_byAbiAliasAndAlternativesSet() { ApkTargeting expectedTargeting = ApkTargeting.newBuilder().setMultiAbiTargeting(SINGLE_ABI_WITH_ALTERNATIVES).build(); assertThat( TargetingUtils.apkMultiAbiTargeting( AbiAlias.X86, ImmutableSet.of(ARMEABI_V7A, ARM64_V8A))) .ignoringRepeatedFieldOrder() .isEqualTo(expectedTargeting); }
private static ModuleSplit createModuleSplit( String moduleName, String splitId, boolean masterSplit, SplitType splitType, @Nullable LanguageTargeting languageTargeting) { return ModuleSplit.builder() .setAndroidManifest( AndroidManifest.create(androidManifest(PACKAGE_NAME)) .toEditor() .setSplitId(splitId) .save()) .setEntries(ImmutableList.of()) .setMasterSplit(masterSplit) .setSplitType(splitType) .setModuleName(BundleModuleName.create(moduleName)) .setApkTargeting( languageTargeting == null ? ApkTargeting.getDefaultInstance() : ApkTargeting.newBuilder().setLanguageTargeting(languageTargeting).build()) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build(); } }
/** * 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(); }
@Test public void notPossibleToTargetMultipleDimensions() { String fakeAssetPath = "testModule/assets/secret.txt"; ModuleSplit.Builder builder = ModuleSplit.builder() .setModuleName(BundleModuleName.create("testModule")) .setEntries(ImmutableList.of(InMemoryModuleEntry.ofFile(fakeAssetPath, DUMMY_CONTENT))) .setVariantTargeting(lPlusVariantTargeting()) .setApkTargeting( ApkTargeting.newBuilder() .setAbiTargeting( AbiTargeting.newBuilder().addValue(Abi.newBuilder().setAlias(AbiAlias.X86))) .setScreenDensityTargeting( ScreenDensityTargeting.newBuilder() .addValue( ScreenDensity.newBuilder().setDensityAlias(DensityAlias.HDPI))) .build()); assertThrows(IllegalStateException.class, () -> builder.build()); }
private static ApkTargeting fromLanguage(LanguageTargeting targeting) { return ApkTargeting.newBuilder().setLanguageTargeting(targeting).build(); }
public static ApkTargeting apkGraphicsTargeting(GraphicsApiTargeting graphicsTargeting) { return ApkTargeting.newBuilder().setGraphicsApiTargeting(graphicsTargeting).build(); }
public static ApkTargeting apkLanguageTargeting(LanguageTargeting languageTargeting) { return ApkTargeting.newBuilder().setLanguageTargeting(languageTargeting).build(); }
public static ApkTargeting apkDensityTargeting(ScreenDensityTargeting screenDensityTargeting) { return ApkTargeting.newBuilder().setScreenDensityTargeting(screenDensityTargeting).build(); }
private static ApkTargeting fromGraphicsApi(GraphicsApiTargeting targeting) { return ApkTargeting.newBuilder().setGraphicsApiTargeting(targeting).build(); }
/** Builds APK targeting, of multi-Abi targeting only. */ public static ApkTargeting apkMultiAbiTargeting(MultiAbiTargeting multiAbiTargeting) { return ApkTargeting.newBuilder().setMultiAbiTargeting(multiAbiTargeting).build(); }
private static ApkTargeting fromTextureCompressionFormat( TextureCompressionFormatTargeting targeting) { return ApkTargeting.newBuilder().setTextureCompressionFormatTargeting(targeting).build(); }
public static ApkTargeting apkAbiTargeting(AbiTargeting abiTargeting) { return ApkTargeting.newBuilder().setAbiTargeting(abiTargeting).build(); }
public static ApkTargeting apkSdkTargeting(SdkVersion sdkVersion) { return ApkTargeting.newBuilder() .setSdkVersionTargeting(SdkVersionTargeting.newBuilder().addValue(sdkVersion)) .build(); }
@Test public void apkMultiAbiTargeting_byAbiAlias() { ApkTargeting expectedTargeting = ApkTargeting.newBuilder().setMultiAbiTargeting(SINGLE_ABI_NO_ALTERNATIVES).build(); assertThat(TargetingUtils.apkMultiAbiTargeting(X86)).isEqualTo(expectedTargeting); }
public static ApkTargeting apkTextureTargeting( TextureCompressionFormatTargeting textureCompressionFormatTargeting) { return ApkTargeting.newBuilder() .setTextureCompressionFormatTargeting(textureCompressionFormatTargeting) .build(); }
@Test public void mergeShardTargetings_firstAbiSecondDensity_ok() throws Exception { ApkTargeting targeting1 = apkAbiTargeting(AbiAlias.X86); ApkTargeting targeting2 = apkDensityTargeting(DensityAlias.HDPI); ApkTargeting merged = MergingUtils.mergeShardTargetings(targeting1, targeting2); assertThat(merged) .isEqualTo( ApkTargeting.newBuilder() .setAbiTargeting(abiTargeting(AbiAlias.X86)) .setScreenDensityTargeting(screenDensityTargeting(DensityAlias.HDPI)) .build()); }
@Test public void apkMultiAbiTargeting_byMultiAbiTargeting() { ApkTargeting expectedTargeting = ApkTargeting.newBuilder().setMultiAbiTargeting(MULTI_ABI_WITH_ALTERNATIVES).build(); assertThat(TargetingUtils.apkMultiAbiTargeting(MULTI_ABI_WITH_ALTERNATIVES)) .ignoringRepeatedFieldOrder() .isEqualTo(expectedTargeting); }