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 + -
显示快捷键?