| /* |
| * ProGuard -- shrinking, optimization, obfuscation, and preverification |
| * of Java bytecode. |
| * |
| * Copyright (c) 2002-2019 Guardsquare NV |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License as published by the Free |
| * Software Foundation; either version 2 of the License, or (at your option) |
| * any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with this program; if not, write to the Free Software Foundation, Inc., |
| * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| package proguard; |
| |
| import java.io.File; |
| import java.net.URL; |
| import java.util.*; |
| |
| /** |
| * The ProGuard configuration. |
| * |
| * @see ProGuard |
| * |
| * @author Eric Lafortune |
| */ |
| public class Configuration |
| { |
| public static final File STD_OUT = new File(""); |
| |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // Input and output options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * A list of input and output entries (jars, wars, ears, jmods, zips, and directories). |
| */ |
| public ClassPath programJars; |
| |
| /** |
| * A list of library entries (jars, wars, ears, jmods, zips, and directories). |
| */ |
| public ClassPath libraryJars; |
| |
| /** |
| * Specifies whether to skip non-public library classes while reading |
| * library jars. |
| */ |
| public boolean skipNonPublicLibraryClasses = false; |
| |
| /** |
| * Specifies whether to skip non-public library class members while reading |
| * library classes. |
| */ |
| public boolean skipNonPublicLibraryClassMembers = true; |
| |
| /** |
| * A list of <code>String</code>s specifying directories to be kept in |
| * the output directories or the output jars. A <code>null</code> list |
| * means no directories. An empty list means all directories. The directory |
| * names may contain "**", "*", or "?" wildcards, and they may be preceded |
| * by the "!" negator. |
| */ |
| public List keepDirectories; |
| |
| /** |
| * Specifies the version number of the output classes, or 0 if the version |
| * number can be left unchanged. |
| */ |
| public int targetClassVersion; |
| |
| /** |
| * Specifies the last modification time of this configuration. This time |
| * is necessary to check whether the input has to be processed. Setting it |
| * to Long.MAX_VALUE forces processing, even if the modification times |
| * of the output appear more recent than the modification times of the |
| * input. |
| */ |
| public long lastModified = 0L; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // Keep options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * A list of {@link KeepClassSpecification} instances, whose class names and |
| * class member names are to be kept from shrinking, optimization, and/or |
| * obfuscation. |
| */ |
| public List keep; |
| |
| /** |
| * An optional output file for listing the kept seeds. |
| * An empty file name means the standard output. |
| */ |
| public File printSeeds; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // Shrinking options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * Specifies whether the code should be shrunk. |
| */ |
| public boolean shrink = true; |
| |
| /** |
| * An optional output file for listing the unused classes and class |
| * members. An empty file name means the standard output. |
| */ |
| public File printUsage; |
| |
| /** |
| * A list of {@link ClassSpecification} instances, for which an explanation |
| * is to be printed, why they are kept in the shrinking step. |
| */ |
| public List whyAreYouKeeping; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // Optimization options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * Specifies whether the code should be optimized. |
| */ |
| public boolean optimize = true; |
| |
| /** |
| * A list of <code>String</code>s specifying the optimizations to be |
| * performed. A <code>null</code> list means all optimizations. The |
| * optimization names may contain "*" or "?" wildcards, and they may |
| * be preceded by the "!" negator. |
| */ |
| public List optimizations; |
| |
| /** |
| * Specifies the number of optimization passes. |
| */ |
| public int optimizationPasses = 1; |
| |
| /** |
| * A list of {@link ClassSpecification} instances, whose methods are |
| * assumed to have no side effects. |
| */ |
| public List assumeNoSideEffects; |
| |
| /** |
| * A list of {@link ClassSpecification} instances, whose methods are |
| * assumed to have no side external effects (that is, outside of 'this'). |
| */ |
| public List assumeNoExternalSideEffects; |
| |
| /** |
| * A list of {@link ClassSpecification} instances, whose methods are |
| * assumed not to let any reference parameters escape (including 'this'). |
| */ |
| public List assumeNoEscapingParameters; |
| |
| /** |
| * A list of {@link ClassSpecification} instances, whose methods are |
| * assumed not to return any external references (only parameters and new |
| * instances). |
| */ |
| public List assumeNoExternalReturnValues; |
| |
| /** |
| * A list of {@link ClassSpecification} instances, with fields and methods |
| * that have specified fixed primitive values. |
| */ |
| public List assumeValues; |
| |
| /** |
| * Specifies whether the access of class members can be modified. |
| */ |
| public boolean allowAccessModification = false; |
| |
| /** |
| * Specifies whether interfaces may be merged aggressively. |
| */ |
| public boolean mergeInterfacesAggressively = false; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // Obfuscation options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * Specifies whether the code should be obfuscated. |
| */ |
| public boolean obfuscate = true; |
| |
| /** |
| * An optional output file for listing the obfuscation mapping. |
| * An empty file name means the standard output. |
| */ |
| public File printMapping; |
| |
| /** |
| * An optional input file for reading an obfuscation mapping. |
| */ |
| public File applyMapping; |
| |
| /** |
| * An optional name of a file containing obfuscated class member names. |
| */ |
| public URL obfuscationDictionary; |
| |
| /** |
| * An optional name of a file containing obfuscated class names. |
| */ |
| public URL classObfuscationDictionary; |
| |
| /** |
| * An optional name of a file containing obfuscated package names. |
| */ |
| public URL packageObfuscationDictionary; |
| |
| /** |
| * Specifies whether to apply aggressive name overloading on class members. |
| */ |
| public boolean overloadAggressively = false; |
| |
| /** |
| * Specifies whether to generate globally unique class member names. |
| */ |
| public boolean useUniqueClassMemberNames = false; |
| |
| /** |
| * Specifies whether obfuscated packages and classes can get mixed-case names. |
| */ |
| public boolean useMixedCaseClassNames = true; |
| |
| /** |
| * A list of <code>String</code>s specifying package names to be kept. |
| * A <code>null</code> list means no names. An empty list means all |
| * names. The package names may contain "**", "*", or "?" wildcards, and |
| * they may be preceded by the "!" negator. |
| */ |
| public List keepPackageNames; |
| |
| /** |
| * An optional base package if the obfuscated package hierarchy is to be |
| * flattened, <code>null</code> otherwise. |
| */ |
| public String flattenPackageHierarchy; |
| |
| /** |
| * An optional base package if the obfuscated classes are to be repackaged |
| * into a single package, <code>null</code> otherwise. |
| */ |
| public String repackageClasses; |
| |
| /** |
| * A list of <code>String</code>s specifying optional attributes to be kept. |
| * A <code>null</code> list means no attributes. An empty list means all |
| * attributes. The attribute names may contain "*" or "?" wildcards, and |
| * they may be preceded by the "!" negator. |
| */ |
| public List keepAttributes; |
| |
| /** |
| * Specifies whether method parameter names and types should be kept for |
| * methods that are not obfuscated. This is achieved by keeping partial |
| * "LocalVariableTable" and "LocalVariableTypeTable" attributes. |
| */ |
| public boolean keepParameterNames = false; |
| |
| /** |
| * An optional replacement for all SourceFile attributes. |
| */ |
| public String newSourceFileAttribute; |
| |
| /** |
| * A list of <code>String</code>s specifying a filter for classes whose |
| * string constants are to be adapted, based on corresponding obfuscated |
| * class names. |
| */ |
| public List adaptClassStrings; |
| |
| /** |
| * A list of <code>String</code>s specifying a filter for files whose |
| * names are to be adapted, based on corresponding obfuscated class names. |
| */ |
| public List adaptResourceFileNames; |
| |
| /** |
| * A list of <code>String</code>s specifying a filter for files whose |
| * contents are to be adapted, based on obfuscated class names. |
| */ |
| public List adaptResourceFileContents; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // Preverification options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * Specifies whether the code should be preverified. |
| */ |
| public boolean preverify = true; |
| |
| /** |
| * Specifies whether the code should be preverified for Java Micro Edition |
| * (creating StackMap attributes) instead of for Java Standard Edition |
| * (creating StackMapTable attributes). |
| */ |
| public boolean microEdition = false; |
| |
| /** |
| * Specifies whether the code should be targeted at the Android platform. |
| */ |
| public boolean android = false; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // General options. |
| /////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * Specifies whether to print verbose messages. |
| */ |
| public boolean verbose = false; |
| |
| /** |
| * A list of <code>String</code>s specifying a filter for the classes for |
| * which not to print notes, if there are noteworthy potential problems. |
| * A <code>null</code> list means all classes. The class names may contain |
| * "**", "*", or "?" wildcards, and they may be preceded by the "!" negator. |
| */ |
| public List note = null; |
| |
| /** |
| * A list of <code>String</code>s specifying a filter for the classes for |
| * which not to print warnings, if there are any problems. |
| * A <code>null</code> list means all classes. The class names may contain |
| * "**", "*", or "?" wildcards, and they may be preceded by the "!" negator. |
| */ |
| public List warn = null; |
| |
| /** |
| * Specifies whether to ignore any warnings. |
| */ |
| public boolean ignoreWarnings = false; |
| |
| /** |
| * An optional output file for printing out the configuration that ProGuard |
| * is using (with included files and replaced variables). |
| * An empty file name means the standard output. |
| */ |
| public File printConfiguration; |
| |
| /** |
| * An optional output file for printing out the processed code in a more |
| * or less readable form. An empty file name means the standard output. |
| */ |
| public File dump; |
| |
| /** |
| * Specifies whether to add logging to reflection code, providing suggestions |
| * on the ProGuard configuration. |
| */ |
| public boolean addConfigurationDebugging; |
| |
| /** |
| * Specifies whether to backporting of class files to another |
| * targetClassVersion shall be enabled. |
| */ |
| public boolean backport = false; |
| |
| } |