.getApkTargeting() .toBuilder() .setAbiTargeting( AbiTargeting.newBuilder() .addValue(targeting.getAbi()) Sets.difference( abisToGenerate, ImmutableSet.of(targeting.getAbi())))) .build()) .setMasterSplit(false) .addMasterManifestMutator(withSplitsRequired(true))
.getApkTargeting() .toBuilder() .setLanguageTargeting( .build()) .setMasterSplit(split.isMasterSplit() && language.isEmpty()) .build();
.getApkTargeting() .toBuilder() .setMultiAbiTargeting( MultiAbiTargeting.newBuilder() .addAllValue(targeting) .addAllAlternatives( Sets.difference(allTargeting, ImmutableSet.copyOf(targeting)))) .build()) .setMasterSplit(false) .setEntries(ImmutableList.of(entry));
.getApkTargeting() .toBuilder() .setScreenDensityTargeting( ScreenDensityTargeting.newBuilder() .addValue(toScreenDensity(density)) .map(ScreenDensityResourcesSplitter::toScreenDensity) .collect(toImmutableList()))) .build()) .setMasterSplit(false) .addMasterManifestMutator(withSplitsRequired(true))
/** * Adds L+ targeting to the Apk targeting of module split. If SDK targeting already exists, it's * not overridden but checked that it targets no L- devices. */ private ModuleSplit addLPlusApkTargeting(ModuleSplit split) { if (split.getApkTargeting().hasSdkVersionTargeting()) { checkState( split.getApkTargeting().getSdkVersionTargeting().getValue(0).getMin().getValue() >= ANDROID_L_API_VERSION, "Module Split should target SDK versions above L."); return split; } return split .toBuilder() .setApkTargeting( split .getApkTargeting() .toBuilder() .setSdkVersionTargeting( SdkVersionTargeting.newBuilder() .addValue( SdkVersion.newBuilder() .setMin(Int32Value.newBuilder().setValue(ANDROID_L_API_VERSION)))) .build()) .build(); }
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()); }
public ModuleSplit build() { ModuleSplit moduleSplit = autoBuild(); if (moduleSplit.isMasterSplit()) { checkState( moduleSplit .getApkTargeting() .toBuilder() .clearSdkVersionTargeting() .build() .equals(ApkTargeting.getDefaultInstance()), "Master split cannot have any targeting other than SDK version."); } return moduleSplit; } }
public static ApkTargeting apkGraphicsTargeting(GraphicsApiTargeting graphicsTargeting) { return ApkTargeting.newBuilder().setGraphicsApiTargeting(graphicsTargeting).build(); }
private static ApkTargeting fromGraphicsApi(GraphicsApiTargeting targeting) { return ApkTargeting.newBuilder().setGraphicsApiTargeting(targeting).build(); }
private static ApkTargeting fromLanguage(LanguageTargeting targeting) { return ApkTargeting.newBuilder().setLanguageTargeting(targeting).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(); }
/** 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(); }
@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 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); }
@Test public void apkMultiAbiTargeting_byAbiAlias() { ApkTargeting expectedTargeting = ApkTargeting.newBuilder().setMultiAbiTargeting(SINGLE_ABI_NO_ALTERNATIVES).build(); assertThat(TargetingUtils.apkMultiAbiTargeting(X86)).isEqualTo(expectedTargeting); }