JADX Plugins Guide
Jadx Plugins Guide
Prerequisites
- Java/Kotlin development environment
jadx-coredependency (version must match target jadx version)- Knowledge of Java ServiceLoader pattern (for plugin discovery)
Dependency Setup
Add jadx-core as compileOnly to reduce plugin JAR size — at runtime jadx provides it from its own classpath:
1compileOnly("io.github.skylot:jadx-core:1.5.3")
Plugin Entry Point
The plugin main class must implement jadx.api.plugins.JadxPlugin:
1import jadx.api.plugins.JadxPlugin;
2import jadx.api.plugins.JadxPluginContext;
3import jadx.api.plugins.JadxPluginInfo;
4
5public class JadxExamplePlugin implements JadxPlugin {
6 public static final String PLUGIN_ID = "example-plugin";
7
8 @Override
9 public JadxPluginInfo getPluginInfo() {
10 return JadxPluginInfoBuilder.pluginId(PLUGIN_ID)
11 .name("Jadx example plugin")
12 .description("Add jadx watermark comment to every class")
13 .homepage("https://github.com/jadx-decompiler/jadx-example-plugin")
14 .requiredJadxVersion("1.5.3, r2504")
15 .build();
16 }
17
18 @Override
19 public void init(JadxPluginContext context) {
20 // plugin init code
21 }
22}
Plugin Discovery (ServiceLoader)
Create the file resources/META-INF/services/jadx.api.plugins.JadxPlugin containing the fully qualified class name of your plugin class. This enables auto-discovery via Java’s ServiceLoader mechanism.
Version Compatibility
Use requiredJadxVersion to prevent runtime errors when the plugin uses APIs added in newer jadx versions.
Format: "<release-version>, r<revision-number>"
<release-version>— 3-part semver, e.g.1.5.2<revision-number>— numeric revision for unstable builds
Stable release mapping:
jadx-core version | requiredJadxVersion string |
|---|---|
| 1.5.3 | "1.5.3, r2504" |
| 1.5.2 | "1.5.2, r2472" |
| 1.5.1 | "1.5.1, r2333" |
For snapshot builds: set release version to snapshot + 0.0.1, and revision to the latest unstable build number.
Example: jadx-core 1.5.2-SNAPSHOT → use "1.5.3, r2475"
Get revision number from git: git rev-list --count HEAD
Note: jadx searches the 10 most recent plugin releases to find a compatible version when installing a plugin for an unstable jadx build.
Plugin API
Root API object: JadxPluginContext — available in the init(context) method.
Key methods on JadxPluginContext:
| Method | Purpose |
|---|---|
addPass | Insert custom logic into the decompilation pipeline |
registerOptions | Declare custom options accessible from jadx-cli and jadx-gui |
getGuiContext | Returns JadxGuiContext for UI customization when running in jadx-gui |
Warning: getGuiContext() returns null in jadx-cli and during jadx-gui option collection for preferences. Always null-check before use:
1JadxGuiContext guiCtx = context.getGuiContext();
2if (guiCtx != null) {
3 // UI customization code
4}
Use cases enabled by the plugin system:
- Custom rename policies
- Code modifications (decryption, deobfuscation)
- Custom input format support (XAPK, split APK, etc.)
- jadx-gui UI extensions
Installation
After packaging the plugin as a JAR:
- jadx-cli:
jadx plugins --install-jar jadx-example-plugin.jar - jadx-gui: Menu →
Plugins→Install plugin→ select JAR
GitHub Release Distribution
JAR artifact naming convention: <repo-name>-<version>.jar
Example: jadx-example-plugin-0.1.1.jar
The <version> segment is displayed in the UI. Semantic versioning (major.minor.patch) is recommended.
Install by location ID:
- jadx-cli:
jadx plugins --install "github:<owner>:<plugin-repo>" - jadx-gui: Preferences → Plugins →
Install plugin
Discovering Installed / Available Plugins
- jadx-cli:
jadx plugins --available - jadx-gui: Preferences → Plugins →
Availablelist
Plugins listed in the community registry at https://github.com/jadx-decompiler/jadx-plugins-list appear in these views automatically.
Reference
- Example plugin source: https://github.com/jadx-decompiler/jadx-example-plugin
JadxPluginContextinterface:jadx-core/src/main/java/jadx/api/plugins/JadxPluginContext.javaJadxGuiContextinterface:jadx-core/src/main/java/jadx/api/plugins/gui/JadxGuiContext.java- Supported install methods:
jadx-plugins-tools/src/main/java/jadx/plugins/tools/resolvers/README.md