Search in sources :

Example 1 with Sanitizer

use of com.android.bundle.Targeting.Sanitizer in project bundletool by google.

the class SanitizerNativeLibrariesSplitter method split.

/**
 * Generates {@link ModuleSplit} objects dividing the native libraries by sanitizer.
 */
@Override
public ImmutableCollection<ModuleSplit> split(ModuleSplit moduleSplit) {
    if (!moduleSplit.getNativeConfig().isPresent()) {
        return ImmutableList.of(moduleSplit);
    }
    Set<ZipPath> hwasanDirs = new HashSet<>();
    for (TargetedNativeDirectory dir : moduleSplit.getNativeConfig().get().getDirectoryList()) {
        if (!dir.getTargeting().hasSanitizer()) {
            continue;
        }
        if (dir.getTargeting().getSanitizer().getAlias().equals(SanitizerAlias.HWADDRESS)) {
            hwasanDirs.add(ZipPath.create(dir.getPath()));
        }
    }
    List<ModuleEntry> hwasanEntries = moduleSplit.getEntries().stream().filter(entry -> hwasanDirs.contains(entry.getPath().subpath(0, 2))).collect(toImmutableList());
    if (hwasanEntries.isEmpty()) {
        return ImmutableList.of(moduleSplit);
    }
    List<ModuleEntry> nonHwasanEntries = moduleSplit.getEntries().stream().filter(entry -> !hwasanDirs.contains(entry.getPath().subpath(0, 2))).collect(toImmutableList());
    ModuleSplit hwasanSplit = moduleSplit.toBuilder().setApkTargeting(moduleSplit.getApkTargeting().toBuilder().setSanitizerTargeting(SanitizerTargeting.newBuilder().addValue(Sanitizer.newBuilder().setAlias(SanitizerAlias.HWADDRESS))).build()).setMasterSplit(false).setEntries(hwasanEntries).build();
    ModuleSplit nonHwasanSplit = moduleSplit.toBuilder().setEntries(nonHwasanEntries).build();
    return ImmutableList.of(hwasanSplit, nonHwasanSplit);
}
Also used : ZipPath(com.android.tools.build.bundletool.model.ZipPath) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) Sanitizer(com.android.bundle.Targeting.Sanitizer) ImmutableCollection(com.google.common.collect.ImmutableCollection) Set(java.util.Set) SanitizerTargeting(com.android.bundle.Targeting.SanitizerTargeting) HashSet(java.util.HashSet) List(java.util.List) SanitizerAlias(com.android.bundle.Targeting.Sanitizer.SanitizerAlias) ModuleSplit(com.android.tools.build.bundletool.model.ModuleSplit) ImmutableList(com.google.common.collect.ImmutableList) ModuleEntry(com.android.tools.build.bundletool.model.ModuleEntry) TargetedNativeDirectory(com.android.bundle.Files.TargetedNativeDirectory) TargetedNativeDirectory(com.android.bundle.Files.TargetedNativeDirectory) ModuleEntry(com.android.tools.build.bundletool.model.ModuleEntry) ModuleSplit(com.android.tools.build.bundletool.model.ModuleSplit) ZipPath(com.android.tools.build.bundletool.model.ZipPath) HashSet(java.util.HashSet)

Example 2 with Sanitizer

use of com.android.bundle.Targeting.Sanitizer in project bundletool by google.

the class ModuleSplit method getSuffix.

/**
 * Returns the split suffix base name based on the targeting.
 *
 * <p>The split suffix cannot contain dashes as they are not allowed by the Android Framework. We
 * replace them with underscores instead.
 */
public String getSuffix() {
    if (isMasterSplit()) {
        return "";
    }
    StringJoiner suffixJoiner = new StringJoiner("_");
    // The dimensions below should be ordered by their priority.
    AbiTargeting abiTargeting = getApkTargeting().getAbiTargeting();
    if (!abiTargeting.getValueList().isEmpty()) {
        abiTargeting.getValueList().forEach(value -> suffixJoiner.add(formatAbi(value)));
    } else if (!abiTargeting.getAlternativesList().isEmpty()) {
        suffixJoiner.add("other_abis");
    }
    MultiAbiTargeting multiAbiTargeting = getApkTargeting().getMultiAbiTargeting();
    for (MultiAbi value : multiAbiTargeting.getValueList()) {
        suffixJoiner.add(MULTI_ABI_SUFFIX_JOINER.join(value.getAbiList().stream().map(ModuleSplit::formatAbi).collect(toImmutableList())));
    }
    // Alternatives without values are not supported for MultiAbiTargeting.
    SanitizerTargeting sanitizerTargeting = getApkTargeting().getSanitizerTargeting();
    for (Sanitizer sanitizer : sanitizerTargeting.getValueList()) {
        if (sanitizer.getAlias().equals(SanitizerAlias.HWADDRESS)) {
            suffixJoiner.add("hwasan");
        } else {
            throw new IllegalArgumentException("Unknown sanitizer");
        }
    }
    LanguageTargeting languageTargeting = getApkTargeting().getLanguageTargeting();
    if (!languageTargeting.getValueList().isEmpty()) {
        languageTargeting.getValueList().forEach(suffixJoiner::add);
    } else if (!languageTargeting.getAlternativesList().isEmpty()) {
        suffixJoiner.add("other_lang");
    }
    getApkTargeting().getScreenDensityTargeting().getValueList().forEach(value -> suffixJoiner.add(SCREEN_DENSITY_TO_PROTO_VALUE_MAP.inverse().get(value.getDensityAlias()).replace('-', '_')));
    TextureCompressionFormatTargeting textureFormatTargeting = getApkTargeting().getTextureCompressionFormatTargeting();
    if (!textureFormatTargeting.getValueList().isEmpty()) {
        textureFormatTargeting.getValueList().forEach(value -> suffixJoiner.add(Ascii.toLowerCase(value.getAlias().name())));
    } else if (!textureFormatTargeting.getAlternativesList().isEmpty()) {
        suffixJoiner.add("other_tcf");
    }
    getApkTargeting().getDeviceTierTargeting().getValueList().forEach(value -> suffixJoiner.add("tier_" + value.getValue()));
    return suffixJoiner.toString();
}
Also used : LanguageTargeting(com.android.bundle.Targeting.LanguageTargeting) MultiAbiTargeting(com.android.bundle.Targeting.MultiAbiTargeting) AbiTargeting(com.android.bundle.Targeting.AbiTargeting) TextureCompressionFormatTargeting(com.android.bundle.Targeting.TextureCompressionFormatTargeting) SanitizerTargeting(com.android.bundle.Targeting.SanitizerTargeting) Sanitizer(com.android.bundle.Targeting.Sanitizer) MultiAbi(com.android.bundle.Targeting.MultiAbi) StringJoiner(java.util.StringJoiner) MultiAbiTargeting(com.android.bundle.Targeting.MultiAbiTargeting)

Aggregations

Sanitizer (com.android.bundle.Targeting.Sanitizer)2 SanitizerTargeting (com.android.bundle.Targeting.SanitizerTargeting)2 TargetedNativeDirectory (com.android.bundle.Files.TargetedNativeDirectory)1 AbiTargeting (com.android.bundle.Targeting.AbiTargeting)1 LanguageTargeting (com.android.bundle.Targeting.LanguageTargeting)1 MultiAbi (com.android.bundle.Targeting.MultiAbi)1 MultiAbiTargeting (com.android.bundle.Targeting.MultiAbiTargeting)1 SanitizerAlias (com.android.bundle.Targeting.Sanitizer.SanitizerAlias)1 TextureCompressionFormatTargeting (com.android.bundle.Targeting.TextureCompressionFormatTargeting)1 ModuleEntry (com.android.tools.build.bundletool.model.ModuleEntry)1 ModuleSplit (com.android.tools.build.bundletool.model.ModuleSplit)1 ZipPath (com.android.tools.build.bundletool.model.ZipPath)1 ImmutableCollection (com.google.common.collect.ImmutableCollection)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableList.toImmutableList (com.google.common.collect.ImmutableList.toImmutableList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1 StringJoiner (java.util.StringJoiner)1