Processor Reference
nativify's GUI (and its headless mode) ships a library of bytecode processors — self-contained transformations you can run over a JAR/APK individually or chain together. Each processor declares a category, a one-line description, and a set of tags that warn you about its behaviour (e.g. whether it may break code or shrink the file).
List every processor available in your build at any time:
Run one (or several, in order):
dist/bin/nativify-gui --headless \
--input app.jar --output app-out.jar \
--processor "Remove Attributes" \
--processor "Remove Unnecessary"
Tag legend
Tags appear next to each processor below. They describe what to expect, not what the processor does:
| Tag | Meaning |
|---|---|
| Native | Compiles selected methods to native code via LLVM. |
| Bytecode transform | Rewrites bytecode directly (no native step). |
| Stronger protection | Provides stronger protection against reversing. |
| Analysis resistant | Makes static analysis harder. |
| Shrink | Reduces file size. |
| Runnable | Output is expected to remain executable. |
| Possible damage | Code can possibly become inexecutable — verify output. |
| Possible verify error | Output could throw VerifyError. |
| Slow | Processing may take a long time. |
| Uses internet | Requires a network connection. |
Obfuscation
Processors that make your code harder to understand and reverse-engineer.
| Processor | What it does | Tags |
|---|---|---|
| Native Code Obfuscation | Compiles methods to native and applies LLVM-level obfuscation passes — control-flow flattening, bogus control flow, and instruction substitution. This is nativify's core feature. | Native · Stronger protection · Analysis resistant · Possible damage |
Configuration: Native Code Obfuscation is configurable (method selection, annotation gating, complexity thresholds). See the Usage Guide for the headless defaults and how to select methods.
Optimization
Processors that clean up and shrink bytecode. Safe to run as a pre- or post-pass.
| Processor | What it does | Tags |
|---|---|---|
| Inline Methods | Inlines trivial methods that only return or throw. | Runnable · Shrink |
| Remove Attributes | Removes unnecessary class attributes. | Runnable · Shrink |
| Remove Unnecessary | Removes unnecessary instructions and dead code. | Runnable · Shrink |
| Remove Unused Variables | Removes unused local variables. | Runnable · Shrink |
| Simplify Bit Operations | Simplifies bitwise operations. | Runnable |
Analysis & Deobfuscation
Processors that undo common obfuscation patterns or recover readable structure — useful when analysing third-party code or cleaning up already-obfuscated input.
| Processor | What it does | Tags |
|---|---|---|
| Reobfuscate Class Names | Generates human-readable names for obfuscated classes. | Possible damage · Runnable |
| Reobfuscate Members | Renames obfuscated methods and fields. | Possible damage · Runnable |
| Reobfuscate Variable Names | Renames obfuscated local variable names. | Runnable |
| Restore Source Files | Restores SourceFile attributes based on the class name. |
Runnable |
| Convert compare instructions | Converts compare instructions to simpler forms. | Runnable |
| Remove predictable conditional jumps | Removes conditional jumps whose outcome is predictable. | Possible verify error · Runnable |
| Fix obfuscated access | Removes synthetic and bridge access flags. | Runnable |
| Remove try-catch obfuscation | Removes try-catch blocks that catch exceptions that can never be thrown. | Possible damage · Runnable |
| Remove Monitors | Removes all monitor (monitorenter/monitorexit) instructions. |
Possible damage · Runnable |
| Remove Try-Catch Blocks | Removes all try-catch blocks. | Possible damage · Runnable |
Tools
General-purpose utilities for compatibility, debugging, and class housekeeping.
| Processor | What it does | Tags |
|---|---|---|
| Add Line Numbers | Adds line-number debug information to methods. | Runnable |
| Isolate Possibly Malicious | Isolates calls to potentially malicious code. | Possible damage · Runnable |
| Java 7 Compatibility | Downgrades class version to Java 7. | Possible damage · Runnable |
| Java 8 Compatibility | Ensures Java 8 compatibility. | Runnable |
| Log All Exceptions | Adds logging to all catch blocks. | Runnable |
| Remove Maxs | Resets maxLocals/maxStack to force recalculation. |
Runnable |
Choosing processors
- Just want native obfuscation? Use Native Code Obfuscation alone — or the
CLI, which wraps the same engine with
@Nativifyannotation support. - Shrinking a JAR? Chain the Optimization processors (Remove Attributes → Remove Unnecessary → Remove Unused Variables).
- Analysing obfuscated input? Start with the Analysis & Deobfuscation group.
- Processors tagged Possible damage / Possible verify error can produce non-runnable output — always test the result before shipping.
Processors run in the exact order you list them, so order your chain so that cleanup/optimization runs before obfuscation.