The PreEmptive Protection™ DashO™ graphical user interface (GUI) is where you create, configure, and build your DashO projects. This article explains the parts of the GUI, how to create a project with the New Project Wizard, and how to set the options that apply across your projects: startup behavior, user preferences, Customer Feedback options, user properties, and global processing exclusions.
Prerequisites
- DashO installed and activated. For more information, see Installation and Activation.
GUI Layout
When you launch DashO, it displays the main GUI. It shows the Standard Mode GUI by default, and the Android Mode GUI when you open an Android Mode project.
The GUI has five areas:
| Area | Location | Purpose |
|---|---|---|
| Menu bar | Top | Menus for project, build, tool, and help commands. |
| Toolbar | Below the menu bar | Icons for frequent actions. |
| Navigation tree | Left, below the toolbar | Organizes the project's settings pages. |
| Configuration area | Center, taking up most of the window | Shows the settings page you select in the navigation tree. |
| Console | Bottom | A scrollable pane that shows output. |
Standard Mode GUI
Android Mode GUI
Toolbar Actions
The toolbar provides quick access to core project management tasks:
| Icon | Button | What it does | Availability |
|---|---|---|---|
| New Project | Creates a new project with the New Project Wizard. | — | |
| Open Project | Opens an existing project. | — | |
| Save Project | Saves a new or changed project. | — | |
| Project Save As | Saves the project with a different name, location, or both. | — | |
| Reload Class List | Refreshes the class list after you add new inputs. | — | |
| Build Project | Protects the project. | Standard Mode only | |
| Cancel Build | Cancels a build in progress. | Standard Mode only | |
| Help | Opens the user guide. | — |
Navigation Tree
The navigation tree organizes the project's settings pages. Select a page to show it in the configuration area. In the Standard Mode GUI, the tree contains:
| Node | Pages under it | See |
|---|---|---|
| Input | Support, Non-Class Files, Options | Manage Inputs |
| Global Exclude | — | Exclude Classes from All Processing |
| Entry Points | Special Classes | Configure Entry Points |
| Properties | — | Define User Properties |
| Removal | Exclude, Classes, Method Calls | Configure Removal |
| Control Flow | Include, Exclude | Configure Control Flow |
| Renaming | Exclude, Map Files | Configure Renaming |
| String Encryption | Include, Exclude, Custom | Configure String Encryption |
| Make Synthetic | Exclude | Configure Make Synthetic |
| Optimization | Include, Exclude | Configure Optimization |
| PreMark | — | Configure Watermarking |
| Checks | Debug, Emulator, Hook, Root, Shelf Life, Tamper | Runtime Protection Overview |
| Output | APK, Reports, Preverification, Signing | Output and Build Results |
| Results | — | Review Your Build Results |
Configuration Area
The configuration area shows the page you select in the navigation tree. It takes up most of the window, and is where you configure all project settings.
Console
The console has two tabs:
| Tab | Shows |
| Console | The progress of project creation and builds, with a count of errors, warnings, and informational messages. |
| Problems | All informational, warning, error, and fatal messages from project creation and obfuscation. |
Understanding Standard vs. Android Modes
The DashO user interface is dynamic. While it provides a comprehensive set of features in Standard Mode, it automatically simplifies the interface into a streamlined Android Mode when you open a project configured with the DashO Gradle Plugin for Android.
| Feature | Standard Mode | Android Mode |
|---|---|---|
| Project Types | Non-Android projects (Java, Spring, Web) and legacy Android APK projects. | Projects using the DashO Gradle Plugin for Android. |
| Navigation Tree | Displays all available commands and specifications. | Shows only the applicable areas for Android protection. |
| Build Actions | Includes Build Project and Cancel Build buttons. | These buttons are hidden; builds are managed via Gradle build. |
| Console Pane | Features Console and Problems tabs to track build progress and errors. | Streamlined to show only issues related to loading or saving the project. |
Create Your First Project
The New Project Wizard is the most efficient way to start a new configuration. It examines your application, determines the appropriate protection settings, and generates a DashO project file automatically.
How to Use the Wizard
- Select the New Project icon in the toolbar or select File > New > Project....
- Select Next.
- Choose the application type that best characterizes your project: Android, Android Artifacts, Library, Desktop App, or Web. You can also migrate an existing project.
- Follow the prompts to specify your input files and output destination.
- Review the generated settings in the Configuration Area.
Application Types
| Application type | Use it for | See |
|---|---|---|
| Android (Most projects) | Android apps and libraries built with Gradle. | Android |
| Android Artifacts (APK/AAB) | APK or AAB files you’ve already built. | |
| Library | Java libraries. | Java |
| Desktop App | Java desktop applications. | Java |
| Web | Web applications and services (.war). |
Web Applications |
Set Startup Options
Choose what DashO shows when it starts:
| Option | DashO starts with |
|---|---|
| Last Project | The last project you opened. |
| Wizard | The New Project Wizard. |
| New Standard project | A new Standard Mode project. |
- Go to Window > Preferences….
- Go to the General tab.
- Select an option for On startup, open.
Set User Preferences
User preferences configure parts of the DashO GUI, and pass options to the obfuscation engine. DashO doesn't save them in project files. They apply to every project DashO loads.
- Go to Window > Preferences.... On macOS, go to PreEmptive Protection DashO X.y > Preferences....
- Set the general and DashO Engine options.
- Select OK to save the preferences.
General Options
| Option | Description |
| Text editor | The application DashO uses to open the project file and reports. You can use property references in this value. |
| On startup, open | Choose what DashO shows when it starts. For more information, see Set Startup Options. |
| Auto update check | Checks for a newer version of DashO at startup. |
DashO Engine Options
| Option | Description |
| Logging Level | The amount of detail in DashO's output. Any level other than Normal is the same as passing --quiet, --verbose, or --debug to the DashO command line. |
| Print Stack Traces | The same as passing --printStackTraces to the DashO command line. |
Set Customer Feedback Options
DashO reports application usage through the Customer Feedback Program. PreEmptive uses this data to guide the development of new and existing features. DashO gathers only high-level usage data. It doesn’t collect configuration details.
If you don’t specify a feedback option, you’re opted in by default.
Change Your Feedback Option in the GUI
- Go to Help > Customer Feedback Options....
- Choose your feedback option:
- Yes, I am willing to participate in the Customer Feedback Program
- No, I choose to not participate
DashO saves your choice in your user preferences. You can change it at any time.
Change Your Feedback Option with an Environment Variable
Set the PREEMPTIVE_TELEMETRY_OPT_OUT environment variable:
PREEMPTIVE_TELEMETRY_OPT_OUT |
Result |
true |
Opted out |
false |
Opted in |
How DashO Chooses Your Feedback Option
- If
PREEMPTIVE_TELEMETRY_OPT_OUTis set, DashO uses it. - Otherwise, if your user preferences specify a feedback option, DashO uses it.
- Otherwise, you’re opted in.
Define User Properties
User properties are named values you can reference anywhere in your project. They let you create a project that works as a template. A property can:
- Be defined in terms of other properties.
- Change the value of other properties.
- Provide default values.
A property value can contain one or more property references, including references to environment variables. References can include default values, indirection, or substitution syntax. See Property References.
- In the navigation tree, select Properties. The User Properties page opens.
- Select New to add a property.
- Enter its name and value. For a file path, you can click the file browser button to select the file.
- Select OK.
- Save your project.
For how DashO stores properties in the project file, see the <propertylist> element.
Exclude Classes from All Processing
Use the Global Processing Exclusions page to exclude classes or packages from most or all processing. The page uses the DashO rules editor. For details on creating, editing, and previewing rules, see Graphical Rules Editor.
- In the navigation tree, select Global Exclude.
- Create rules for the classes or packages to exclude.
- For each rule, set Update References to choose whether DashO excludes the matched classes from all processing, or still updates their references to classes, methods, and fields it processes.
- Save your project. Then reload the class list to update the other pages.
Classes that match these rules are also excluded from:
- Being a string decrypter candidate.
- The Constant Pool Tag and SourceFile Tag additions. See Configure the Output Format.
For details, see the <globalProcessingExclude> element.
Examples and Use Cases
| Goal | What to do |
| Get more detail to troubleshoot a build | Set Logging Level to Verbose or Debug, and select Print Stack Traces. |
| Reopen your last project at startup | Set the startup option to Last Project. |
| Point a project at a JDK without hard-coding the path | Define a JDK_HOME user property. Manage Inputs uses ${JDK_HOME:-} as the default Include JDK value. |
| Opt out of the Customer Feedback Program on a build server | Set PREEMPTIVE_TELEMETRY_OPT_OUT to true on the server. |
| Keep a third-party package out of every protection | Add a rule for it on the Global Exclude page. |
Limitations and Troubleshooting
| Issue | Resolution |
| Build Project isn't available. | Your project is in Android Mode. Build Android Mode projects with Gradle. |
| Preferences... or Exit is missing on macOS. | They're in the PreEmptive Protection DashO X.y menu. Exit is named Quit PreEmptive Protection DashO. |
| A class is missing from the class lists. | It may match a Global Processing Exclusions rule. |
| The console has no Problems tab. | Your project is in Android Mode, where the console shows only load and save issues. |
| The wizard doesn't open at startup. | Select Show wizard on startup in the preferences, or open it from File > Project Wizard…. |
| Your Customer Feedback choice in the GUI has no effect. | The PREEMPTIVE_TELEMETRY_OPT_OUT environment variable is set, and it takes precedence. Change or remove it. |
| A user property causes a recursion error. | Remove the recursive definition. |