📄 proguardgui.java
字号:
panelButtons = null; addBorder(programPanel, "programJars" ); addBorder(libraryPanel, "libraryJars" ); JPanel inputOutputPanel = new JPanel(layout); inputOutputPanel.add(programPanel, stretchPanelConstraints); inputOutputPanel.add(libraryPanel, stretchPanelConstraints); // Load the boiler plate options. loadBoilerplateConfiguration(); // Create the boiler plate keep panels. boilerplateKeepCheckBoxes = new JCheckBox[boilerplateKeep.length]; boilerplateKeepTextFields = new JTextField[boilerplateKeep.length]; JButton printUsageBrowseButton = createBrowseButton(printUsageTextField, msg("selectUsageFile")); JPanel shrinkingOptionsPanel = new JPanel(layout); addBorder(shrinkingOptionsPanel, "options"); shrinkingOptionsPanel.add(shrinkCheckBox, constraintsLastStretch); shrinkingOptionsPanel.add(printUsageCheckBox, constraints); shrinkingOptionsPanel.add(printUsageTextField, constraintsStretch); shrinkingOptionsPanel.add(printUsageBrowseButton, constraintsLast); JPanel shrinkingPanel = new JPanel(layout); shrinkingPanel.add(shrinkingOptionsPanel, panelConstraints); addClassSpecifications(boilerplateKeep, shrinkingPanel, boilerplateKeepCheckBoxes, boilerplateKeepTextFields); addBorder(additionalKeepPanel, "keepAdditional"); shrinkingPanel.add(additionalKeepPanel, stretchPanelConstraints); // Create the boiler plate keep names panels. boilerplateKeepNamesCheckBoxes = new JCheckBox[boilerplateKeepNames.length]; boilerplateKeepNamesTextFields = new JTextField[boilerplateKeepNames.length]; JButton printMappingBrowseButton = createBrowseButton(printMappingTextField, msg("selectPrintMappingFile")); JButton applyMappingBrowseButton = createBrowseButton(applyMappingTextField, msg("selectApplyMappingFile")); JButton obfucationDictionaryBrowseButton = createBrowseButton(obfuscationDictionaryTextField, msg("selectObfuscationDictionaryFile")); JPanel obfuscationOptionsPanel = new JPanel(layout); addBorder(obfuscationOptionsPanel, "options"); obfuscationOptionsPanel.add(obfuscateCheckBox, constraintsLastStretch); obfuscationOptionsPanel.add(printMappingCheckBox, constraints); obfuscationOptionsPanel.add(printMappingTextField, constraintsStretch); obfuscationOptionsPanel.add(printMappingBrowseButton, constraintsLast); obfuscationOptionsPanel.add(applyMappingCheckBox, constraints); obfuscationOptionsPanel.add(applyMappingTextField, constraintsStretch); obfuscationOptionsPanel.add(applyMappingBrowseButton, constraintsLast); obfuscationOptionsPanel.add(obfuscationDictionaryCheckBox, constraints); obfuscationOptionsPanel.add(obfuscationDictionaryTextField, constraintsStretch); obfuscationOptionsPanel.add(obfucationDictionaryBrowseButton, constraintsLast); obfuscationOptionsPanel.add(overloadAggressivelyCheckBox, constraintsLastStretch); obfuscationOptionsPanel.add(defaultPackageCheckBox, constraints); obfuscationOptionsPanel.add(defaultPackageTextField, constraintsLastStretch); obfuscationOptionsPanel.add(useMixedCaseClassNamesCheckBox, constraintsLastStretch); obfuscationOptionsPanel.add(keepAttributesCheckBox, constraints); obfuscationOptionsPanel.add(keepAttributesTextField, constraintsLastStretch); obfuscationOptionsPanel.add(newSourceFileAttributeCheckBox, constraints); obfuscationOptionsPanel.add(newSourceFileAttributeTextField, constraintsLastStretch); JPanel obfuscationPanel = new JPanel(layout); obfuscationPanel.add(obfuscationOptionsPanel, panelConstraints); addClassSpecifications(boilerplateKeepNames, obfuscationPanel, boilerplateKeepNamesCheckBoxes, boilerplateKeepNamesTextFields); addBorder(additionalKeepNamesPanel, "keepNamesAdditional"); obfuscationPanel.add(additionalKeepNamesPanel, stretchPanelConstraints); // Create the boiler plate "no side effect methods" panels. boilerplateNoSideEffectMethodCheckBoxes = new JCheckBox[boilerplateNoSideEffectMethods.length]; JPanel optimizationOptionsPanel = new JPanel(layout); addBorder(optimizationOptionsPanel, "options"); optimizationOptionsPanel.add(optimizeCheckBox, constraintsLastStretch); optimizationOptionsPanel.add(allowAccessModificationCheckBox, constraintsLastStretch); JPanel optimizationPanel = new JPanel(layout); optimizationPanel.add(optimizationOptionsPanel, panelConstraints); addClassSpecifications(boilerplateNoSideEffectMethods, optimizationPanel, boilerplateNoSideEffectMethodCheckBoxes, null); addBorder(additionalNoSideEffectsPanel, "assumeNoSideEffectsAdditional"); optimizationPanel.add(additionalNoSideEffectsPanel, stretchPanelConstraints); // Create the options panel. JButton printSeedsBrowseButton = createBrowseButton(printSeedsTextField, msg("selectSeedsFile")); JPanel consistencyPanel = new JPanel(layout); addBorder(consistencyPanel, "consistencyAndCorrectness"); consistencyPanel.add(printSeedsCheckBox, constraints); consistencyPanel.add(printSeedsTextField, constraintsStretch); consistencyPanel.add(printSeedsBrowseButton, constraintsLast); consistencyPanel.add(verboseCheckBox, constraintsLastStretch); consistencyPanel.add(noteCheckBox, constraintsLastStretch); consistencyPanel.add(warnCheckBox, constraintsLastStretch); consistencyPanel.add(ignoreWarningsCheckBox, constraintsLastStretch); consistencyPanel.add(skipNonPublicLibraryClassesCheckBox, constraintsLastStretch); consistencyPanel.add(skipNonPublicLibraryClassMembersCheckBox, constraintsLastStretch); // Collect all components that are followed by text fields and make // sure they are equally sized. That way the text fields start at the // same horizontal position. setCommonPreferredSize(Arrays.asList(new JComponent[] { printMappingCheckBox, applyMappingCheckBox, defaultPackageCheckBox, newSourceFileAttributeCheckBox, })); JPanel optionsPanel = new JPanel(layout); optionsPanel.add(consistencyPanel, panelConstraints); // Create the process panel. consoleTextArea.setOpaque(false); consoleTextArea.setEditable(false); consoleTextArea.setLineWrap(false); consoleTextArea.setWrapStyleWord(false); JScrollPane consoleScrollPane = new JScrollPane(consoleTextArea); consoleScrollPane.setBorder(new EmptyBorder(1, 1, 1, 1)); addBorder(consoleScrollPane, "processingConsole"); JPanel processPanel = new JPanel(layout); processPanel.add(consoleScrollPane, stretchPanelConstraints); // Create the load, save, and process buttons. JButton loadButton = new JButton(msg("loadConfiguration")); loadButton.addActionListener(new MyLoadConfigurationActionListener()); JButton viewButton = new JButton(msg("viewConfiguration")); viewButton.addActionListener(new MyViewConfigurationActionListener()); JButton saveButton = new JButton(msg("saveConfiguration")); saveButton.addActionListener(new MySaveConfigurationActionListener()); JButton processButton = new JButton(msg("process")); processButton.addActionListener(new MyProcessActionListener()); // Create the ReTrace panel. JPanel reTraceSettingsPanel = new JPanel(layout); addBorder(reTraceSettingsPanel, "reTraceSettings"); JButton reTraceMappingBrowseButton = createBrowseButton(reTraceMappingTextField, msg("selectApplyMappingFile")); JLabel reTraceMappingLabel = new JLabel(msg("mappingFile")); reTraceMappingLabel.setForeground(reTraceVerboseCheckBox.getForeground()); reTraceSettingsPanel.add(reTraceMappingLabel, constraints); reTraceSettingsPanel.add(reTraceMappingTextField, constraintsStretch); reTraceSettingsPanel.add(reTraceMappingBrowseButton, constraintsLast); reTraceSettingsPanel.add(reTraceVerboseCheckBox, constraintsLastStretch); stackTraceTextArea.setOpaque(true); stackTraceTextArea.setEditable(true); stackTraceTextArea.setLineWrap(false); stackTraceTextArea.setWrapStyleWord(true); JScrollPane stackTraceScrollPane = new JScrollPane(stackTraceTextArea); addBorder(stackTraceScrollPane, "obfuscatedStackTrace"); reTraceTextArea.setOpaque(false); reTraceTextArea.setEditable(false); reTraceTextArea.setLineWrap(true); reTraceTextArea.setWrapStyleWord(true); JScrollPane reTraceScrollPane = new JScrollPane(reTraceTextArea); reTraceScrollPane.setBorder(new EmptyBorder(1, 1, 1, 1)); addBorder(reTraceScrollPane, "deobfuscatedStackTrace"); JPanel reTracePanel = new JPanel(layout); reTracePanel.add(reTraceSettingsPanel, panelConstraints); reTracePanel.add(stackTraceScrollPane, panelConstraints); reTracePanel.add(reTraceScrollPane, stretchPanelConstraints); // Create the load button. JButton loadStackTraceButton = new JButton(msg("loadStackTrace")); loadStackTraceButton.addActionListener(new MyLoadStackTraceActionListener()); JButton reTraceButton = new JButton(msg("reTrace")); reTraceButton.addActionListener(new MyReTraceActionListener()); // Create the main tabbed pane. TabbedPane tabs = new TabbedPane(); tabs.add(msg("proGuardTab"), proGuardPanel); tabs.add(msg("inputOutputTab"), inputOutputPanel); tabs.add(msg("shrinkingTab"), shrinkingPanel); tabs.add(msg("obfuscationTab"), obfuscationPanel); tabs.add(msg("optimizationTab"), optimizationPanel); tabs.add(msg("informationTab"), optionsPanel); tabs.add(msg("processTab"), processPanel); tabs.add(msg("reTraceTab"), reTracePanel); tabs.addImage(Toolkit.getDefaultToolkit().getImage( this.getClass().getResource(TITLE_IMAGE_FILE))); // Add the bottom buttons to each panel. proGuardPanel .add(Box.createGlue(), glueConstraints); proGuardPanel .add(loadButton, bottomButtonConstraints); proGuardPanel .add(createNextButton(tabs), lastBottomButtonConstraints); inputOutputPanel .add(Box.createGlue(), glueConstraints); inputOutputPanel .add(createPreviousButton(tabs), bottomButtonConstraints); inputOutputPanel .add(createNextButton(tabs), lastBottomButtonConstraints); shrinkingPanel .add(Box.createGlue(), glueConstraints); shrinkingPanel .add(createPreviousButton(tabs), bottomButtonConstraints); shrinkingPanel .add(createNextButton(tabs), lastBottomButtonConstraints); obfuscationPanel .add(Box.createGlue(), glueConstraints); obfuscationPanel .add(createPreviousButton(tabs), bottomButtonConstraints); obfuscationPanel .add(createNextButton(tabs), lastBottomButtonConstraints); optimizationPanel .add(Box.createGlue(), glueConstraints); optimizationPanel .add(createPreviousButton(tabs), bottomButtonConstraints); optimizationPanel .add(createNextButton(tabs), lastBottomButtonConstraints); optionsPanel .add(Box.createGlue(), glueConstraints); optionsPanel .add(createPreviousButton(tabs), bottomButtonConstraints); optionsPanel .add(createNextButton(tabs), lastBottomButtonConstraints); processPanel .add(Box.createGlue(), glueConstraints); processPanel .add(createPreviousButton(tabs), bottomButtonConstraints); processPanel .add(viewButton, bottomButtonConstraints); processPanel .add(saveButton, bottomButtonConstraints); processPanel .add(processButton, lastBottomButtonConstraints); reTracePanel .add(Box.createGlue(), glueConstraints); reTracePanel .add(loadStackTraceButton, bottomButtonConstraints); reTracePanel .add(reTraceButton, lastBottomButtonConstraints); // Initialize the GUI settings to reasonable defaults. loadConfiguration(this.getClass().getResource(DEFAULT_CONFIGURATION)); // Add the main tabs to the frame and pack it. getContentPane().add(tabs); } public void startSplash() { splashPanel.start(); } public void skipSplash() { splashPanel.stop(); } /** * Loads the boilerplate keep class file options from the boilerplate file * into the boilerplate array. */ private void loadBoilerplateConfiguration() { try { // Parse the boilerplate configuration file. ConfigurationParser parser = new ConfigurationParser( this.getClass().getResource(BOILERPLATE_CONFIGURATION)); Configuration configuration = new Configuration(); parser.parse(configuration); // We're interested in the keep options. boilerplateKeep = new ClassSpecification[configuration.keep.size()]; configuration.keep.toArray(boilerplateKeep);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -