blob: e82a522f3e0bae4fa57f6fe9a2515e997fd96b31 [file] [log] [blame]
// Copyright 2017 The Bazel Authors. All rights reserved.
//
// 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.
// Copyright 2017 The Bazel Authors. All rights reserved.
package com.google.devtools.build.android.aapt2;
import com.android.repository.Revision;
import com.google.devtools.build.android.Converters.ExistingPathConverter;
import com.google.devtools.build.android.Converters.RevisionConverter;
import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
import com.google.devtools.common.options.OptionEffectTag;
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.TriState;
import java.nio.file.Path;
import java.util.List;
/** Aapt2 specific configuration options. */
public class Aapt2ConfigOptions extends OptionsBase {
@Option(
name = "aapt2",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
converter = ExistingPathConverter.class,
category = "tool",
help = "Aapt2 tool location for resource compilation.")
public Path aapt2;
@Option(
name = "buildToolsVersion",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
converter = RevisionConverter.class,
category = "config",
help = "Version of the build tools (e.g. aapt) being used, e.g. 23.0.2")
public Revision buildToolsVersion;
@Option(
name = "androidJar",
defaultValue = "null",
converter = ExistingPathConverter.class,
category = "tool",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "Path to the android jar for resource packaging and building apks.")
public Path androidJar;
@Option(
name = "useAaptCruncher",
defaultValue = "auto",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help =
"Use the legacy aapt cruncher, defaults to true for non-LIBRARY packageTypes. "
+ " LIBRARY packages do not benefit from the additional processing as the resources"
+ " will need to be reprocessed during the generation of the final apk. See"
+ " https://code.google.com/p/android/issues/detail?id=67525 for a discussion of the"
+ " different png crunching methods.")
public TriState useAaptCruncher;
@Option(
name = "conditionalKeepRules",
defaultValue = "auto",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "Have AAPT2 produce conditional keep rules.")
public TriState conditionalKeepRules;
@Option(
name = "uncompressedExtensions",
defaultValue = "",
converter = CommaSeparatedOptionListConverter.class,
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "A list of file extensions not to compress.")
public List<String> uncompressedExtensions;
@Option(
name = "debug",
defaultValue = "false",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "Indicates if it is a debug build.")
public boolean debug;
@Option(
name = "resourceConfigs",
defaultValue = "",
converter = CommaSeparatedOptionListConverter.class,
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "A list of resource config filters to pass to aapt.")
public List<String> resourceConfigs;
private static final String ANDROID_SPLIT_DOCUMENTATION_URL =
"https://developer.android.com/guide/topics/resources/providing-resources.html"
+ "#QualifierRules";
@Option(
name = "split",
defaultValue = "null",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
allowMultiple = true,
help =
"An individual split configuration to pass to aapt."
+ " Each split is a list of configuration filters separated by commas."
+ " Configuration filters are lists of configuration qualifiers separated by dashes,"
+ " as used in resource directory names and described on the Android developer site: "
+ ANDROID_SPLIT_DOCUMENTATION_URL
+ " For example, a split might be 'en-television,en-xxhdpi', containing English"
+ " assets which either are for TV screens or are extra extra high resolution."
+ " Multiple splits can be specified by passing this flag multiple times."
+ " Each split flag will produce an additional output file, named by replacing the"
+ " commas in the split specification with underscores, and appending the result to"
+ " the output package name following an underscore.")
public List<String> splits;
// TODO(b/136572475, b/112848607): remove this option
@Option(
name = "useCompiledResourcesForMerge",
defaultValue = "true",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "Use compiled resources for merging rather than parsed symbols binary.",
deprecationWarning = "cannot be disabled")
public boolean useCompiledResourcesForMerge;
@Option(
name = "resourceTableAsProto",
defaultValue = "false",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "Generate the resource table as a protocol buffer.")
public boolean resourceTableAsProto;
@Option(
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
name = "generatePseudoLocale",
defaultValue = "true",
category = "config",
help = "Whether to generate pseudo locales during compilation.")
public boolean generatePseudoLocale;
@Option(
name = "useDataBindingAndroidX",
defaultValue = "false",
category = "config",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help = "Indicates whether databinding generated files should depend on AndroidX.")
public boolean useDataBindingAndroidX;
}