com.facebook.buck.parser.AndroidBinaryBuildRuleFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.parser.AndroidBinaryBuildRuleFactory.java

Source

/*
 * Copyright 2012-present Facebook, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package com.facebook.buck.parser;

import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.rules.AbstractBuildRuleBuilder;
import com.facebook.buck.android.AndroidBinaryRule;
import com.facebook.buck.util.ZipSplitter;
import com.google.common.base.Optional;
import com.google.common.base.Strings;

import java.util.List;

public class AndroidBinaryBuildRuleFactory extends AbstractBuildRuleFactory {

    @Override
    public AndroidBinaryRule.Builder newBuilder() {
        return AndroidBinaryRule.newAndroidBinaryRuleBuilder();
    }

    @Override
    protected void amendBuilder(AbstractBuildRuleBuilder abstractBuilder, BuildRuleFactoryParams params)
            throws NoSuchBuildTargetException {
        AndroidBinaryRule.Builder builder = ((AndroidBinaryRule.Builder) abstractBuilder);

        // manifest
        String manifestAttribute = params.getRequiredStringAttribute("manifest");
        String manifestPath = params.resolveFilePathRelativeToBuildFileDirectory(manifestAttribute);
        builder.setManifest(manifestPath);

        // target
        String target = params.getRequiredStringAttribute("target");
        builder.setTarget(target);

        // keystore_properties
        String keystoreProperties = params.getRequiredStringAttribute("keystore_properties");
        String keystorePropertiesPath = params.resolveFilePathRelativeToBuildFileDirectory(keystoreProperties);
        builder.setKeystorePropertiesPath(keystorePropertiesPath);

        // package_type
        // Note that it is not required for the user to supply this attribute, but buck.py should
        // supply 'debug' if the user has not supplied a value.
        String packageType = params.getRequiredStringAttribute("package_type");
        builder.setPackageType(packageType);

        // no_dx
        ParseContext buildFileParseContext = ParseContext.forBaseName(params.target.getBaseName());
        for (String noDx : params.getOptionalListAttribute("no_dx")) {
            BuildTarget buildTarget = params.buildTargetParser.parse(noDx, buildFileParseContext);
            builder.addBuildRuleToExcludeFromDex(buildTarget.getFullyQualifiedName());
        }

        // use_split_dex
        boolean useSplitDex = params.getBooleanAttribute("use_split_dex");

        ZipSplitter.DexSplitStrategy dexSplitStrategy = params.getBooleanAttribute("minimize_primary_dex_size")
                ? ZipSplitter.DexSplitStrategy.MINIMIZE_PRIMARY_DEX_SIZE
                : ZipSplitter.DexSplitStrategy.MAXIMIZE_PRIMARY_DEX_SIZE;

        builder.setDexSplitMode(new AndroidBinaryRule.DexSplitMode(useSplitDex, dexSplitStrategy));

        // use_android_proguard_config_with_optimizations
        boolean useAndroidProguardConfigWithOptimizations = params
                .getBooleanAttribute("use_android_proguard_config_with_optimizations");
        builder.setUseAndroidProguardConfigWithOptimizations(useAndroidProguardConfigWithOptimizations);

        // proguard_config
        Optional<String> proguardConfig = params.getOptionalStringAttribute("proguard_config");
        if (proguardConfig.isPresent()) {
            String proguardConfigPath = params.resolveFilePathRelativeToBuildFileDirectory(proguardConfig.get());
            builder.setProguardConfig(proguardConfigPath);
        }

        // compress_resources
        boolean compressResources = params.getBooleanAttribute("compress_resources");
        builder.setCompressResources(compressResources);

        // primary_dex_substrings
        List<String> primaryDexSubstrings = params.getOptionalListAttribute("primary_dex_substrings");
        builder.addPrimaryDexSubstrings(primaryDexSubstrings);

        // resource_filter
        Optional<String> resourceFilter = params.getOptionalStringAttribute("resource_filter");
        if (resourceFilter.isPresent()) {
            builder.setResourceFilter(Strings.emptyToNull(resourceFilter.get().trim()));
        }
    }

}