proguardgui.java

来自「proguard 一个java的混淆器」· Java 代码 · 共 1,239 行 · 第 1/5 页

JAVA
1,239
字号
        }    }    /**     * Returns the ProGuard configuration that reflects the current GUI settings.     */    private Configuration getProGuardConfiguration()    {        Configuration configuration = new Configuration();        // Get the input and output jars and directories.        configuration.programJars = programPanel.getClassPath();        configuration.libraryJars = libraryPanel.getClassPath();        List keep = new ArrayList();        // Collect the additional keep options.        List additionalKeep = additionalKeepPanel.getClassSpecifications();        if (additionalKeep != null)        {            keep.addAll(additionalKeep);        }        // Collect the additional keep names options.        List additionalKeepNames = additionalKeepNamesPanel.getClassSpecifications();        if (additionalKeepNames != null)        {            keep.addAll(additionalKeepNames);        }        // Collect the boilerplate keep options.        for (int index = 0; index < boilerplateKeep.length; index++)        {            if (boilerplateKeepCheckBoxes[index].isSelected())            {                keep.add(classSpecification(boilerplateKeep[index],                                            boilerplateKeepTextFields[index].getText()));            }        }        // Collect the boilerplate keep names options.        for (int index = 0; index < boilerplateKeepNames.length; index++)        {            if (boilerplateKeepNamesCheckBoxes[index].isSelected())            {                keep.add(classSpecification(boilerplateKeepNames[index],                                            boilerplateKeepNamesTextFields[index].getText()));            }        }        // Put the list of keep specifications in the configuration.        if (keep.size() > 0)        {            configuration.keep = keep;        }        // Collect the boilerplate "no side effect methods" options.        List noSideEffectMethods = new ArrayList();        for (int index = 0; index < boilerplateNoSideEffectMethods.length; index++)        {            if (boilerplateNoSideEffectMethodCheckBoxes[index].isSelected())            {                noSideEffectMethods.add(boilerplateNoSideEffectMethods[index]);            }        }        // Collect the additional "no side effect methods" options.        List additionalNoSideEffectOptions = additionalNoSideEffectsPanel.getClassSpecifications();        if (additionalNoSideEffectOptions != null)        {            noSideEffectMethods.addAll(additionalNoSideEffectOptions);        }        // Put the list of "no side effect methods" options in the configuration.        if (noSideEffectMethods.size() > 0)        {            configuration.assumeNoSideEffects = noSideEffectMethods;        }        // Collect the "why are you keeping" options.        configuration.whyAreYouKeeping = whyAreYouKeepingPanel.getClassSpecifications();        // Get the other options.        configuration.shrink                           = shrinkCheckBox                          .isSelected();        configuration.printUsage                       = printUsageCheckBox                      .isSelected() ? new File(printUsageTextField                       .getText()) : null;        configuration.optimize                         = optimizeCheckBox                        .isSelected();        configuration.optimizationPasses               = ((SpinnerNumberModel)optimizationPassesSpinner.getModel()).getNumber().intValue();        configuration.allowAccessModification          = allowAccessModificationCheckBox         .isSelected();        configuration.obfuscate                        = obfuscateCheckBox                       .isSelected();        configuration.printMapping                     = printMappingCheckBox                    .isSelected() ? new File(printMappingTextField                                .getText()) : null;        configuration.applyMapping                     = applyMappingCheckBox                    .isSelected() ? new File(applyMappingTextField                                .getText()) : null;        configuration.obfuscationDictionary            = obfuscationDictionaryCheckBox           .isSelected() ? new File(obfuscationDictionaryTextField                       .getText()) : null;        configuration.overloadAggressively             = overloadAggressivelyCheckBox            .isSelected();        configuration.useUniqueClassMemberNames        = useUniqueClassMemberNamesCheckBox       .isSelected();        configuration.useMixedCaseClassNames           = useMixedCaseClassNamesCheckBox          .isSelected();        configuration.flattenPackageHierarchy          = flattenPackageHierarchyCheckBox         .isSelected() ? ClassUtil.externalClassName(flattenPackageHierarchyTextField  .getText()) : null;        configuration.repackageClasses                 = repackageClassesCheckBox                .isSelected() ? ClassUtil.externalClassName(repackageClassesTextField         .getText()) : null;        configuration.keepAttributes                   = keepAttributesCheckBox                  .isSelected() ? ListUtil.commaSeparatedList(keepAttributesTextField           .getText()) : null;        configuration.newSourceFileAttribute           = newSourceFileAttributeCheckBox          .isSelected() ? newSourceFileAttributeTextField                               .getText()  : null;        configuration.adaptResourceFileNames           = adaptResourceFileNamesCheckBox          .isSelected() ? ListUtil.commaSeparatedList(adaptResourceFileNamesTextField   .getText()) : null;        configuration.adaptResourceFileContents        = adaptResourceFileContentsCheckBox       .isSelected() ? ListUtil.commaSeparatedList(adaptResourceFileContentsTextField.getText()) : null;        configuration.preverify                        = preverifyCheckBox                       .isSelected();        configuration.microEdition                     = microEditionCheckBox                    .isSelected();        configuration.targetClassVersion               = targetCheckBox                          .isSelected() ? ClassUtil.internalClassVersion(targetComboBox.getSelectedItem().toString()) : 0;        configuration.verbose                          = verboseCheckBox                         .isSelected();        configuration.note                             = noteCheckBox                            .isSelected();        configuration.warn                             = warnCheckBox                            .isSelected();        configuration.ignoreWarnings                   = ignoreWarningsCheckBox                  .isSelected();        configuration.skipNonPublicLibraryClasses      = skipNonPublicLibraryClassesCheckBox     .isSelected();        configuration.skipNonPublicLibraryClassMembers = skipNonPublicLibraryClassMembersCheckBox.isSelected();        configuration.lastModified                     = forceProcessingCheckBox                 .isSelected() ? Long.MAX_VALUE : System.currentTimeMillis();        configuration.printSeeds                       = printSeedsCheckBox                      .isSelected() ? new File(printSeedsTextField                                .getText()) : null;        configuration.printConfiguration               = printConfigurationCheckBox              .isSelected() ? new File(printConfigurationTextField                        .getText()) : null;        configuration.dump                             = dumpCheckBox                            .isSelected() ? new File(dumpTextField                                      .getText()) : null;        return configuration;    }    /**     * Looks in the given list for a class specification that is identical to     * the given template. Returns true if it is found, and removes the matching     * class specification as a side effect.     */    private boolean findClassSpecification(ClassSpecification classSpecificationTemplate,                                           List                classSpecifications)    {        if (classSpecifications == null)        {            return false;        }        for (int index = 0; index < classSpecifications.size(); index++)        {            if (classSpecificationTemplate.equals(classSpecifications.get(index)))            {                // Remove the matching option as a side effect.                classSpecifications.remove(index);                return true;            }        }        return false;    }    /**     * Returns the subset of the given list of keep specifications, with     * matching shrinking flag.     */    private List filteredKeepSpecifications(List    keepSpecifications,                                            boolean allowShrinking)    {        List filteredKeepSpecifications = new ArrayList();        for (int index = 0; index < keepSpecifications.size(); index++)        {            KeepSpecification keepSpecification =                (KeepSpecification)keepSpecifications.get(index);            if (keepSpecification.allowShrinking == allowShrinking)            {                filteredKeepSpecifications.add(keepSpecification);            }        }        return filteredKeepSpecifications;    }    /**     * Looks in the given list for keep specifications that match the given     * template. Returns a comma-separated string of class names from     * matching keep specifications, and removes the matching keep     * specifications as a side effect.     */    private String findMatchingKeepSpecifications(KeepSpecification keepSpecificationTemplate,                                                  List              keepSpecifications)    {        if (keepSpecifications == null)        {            return null;        }        StringBuffer buffer = null;        for (int index = 0; index < keepSpecifications.size(); index++)        {            KeepSpecification listedKeepSpecification =                (KeepSpecification)keepSpecifications.get(index);            String className = listedKeepSpecification.className;            keepSpecificationTemplate.className = className;            if (keepSpecificationTemplate.equals(listedKeepSpecification))            {                if (buffer == null)                {                    buffer = new StringBuffer();                }                else                {                    buffer.append(',');                }                buffer.append(className == null ? "*" : ClassUtil.externalClassName(className));                // Remove the matching option as a side effect.                keepSpecifications.remove(index--);            }        }        return buffer == null ? null : buffer.toString();    }    /**     * Returns a class specification or keep specification, based on the given     * template and the class name to be filled in.     */    private ClassSpecification classSpecification(ClassSpecification classSpecificationTemplate,                                                  String             className)    {        // Create a copy of the template.        ClassSpecification classSpecification =            (ClassSpecification)classSpecificationTemplate.clone();        // Set the class name in the copy.        classSpecification.className =            className.equals("") ||            className.equals("*") ?                null :                ClassUtil.internalClassName(className);        // Return the modified copy.        return classSpecification;    }    // Methods and internal cl

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?