Java tutorial
/* * 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())); } } }