Class DexDecompilerExporter

java.lang.Object
com.pnfsoftware.jeb.core.units.code.DecompilerExporter
com.pnfsoftware.jeb.core.units.code.android.DexDecompilerExporter

public class DexDecompilerExporter extends DecompilerExporter
Helper class used to decompile and export to *.java files all or a subset of classes or methods of a Dex unit.

Example: export all top-level classes to an output folder:

 IDexDecompilerUnit dexdec = ...; // retrieve from the current IRuntimeProject
 File outdir = ...;
 DexDecompilerExporter exp = dexdec.getExporter();
 exp.setOutputFolder(outdir, false);
 exp.setMethodTimeout(60_000L);  // safety
 exp.setTotalTimeout(15 * 60_000L);  // safety
 exp.setCallback(new ProgressCallbackAdapter() {
     @Override
     public void message(String msg) {
         System.out.println(msg);
     }
 });
 boolean success = exp.processTopLevelClasses();
 System.out.println("Errors: " + exp.getErrors());
 
  • Constructor Details

  • Method Details

    • process

      public boolean process()
      Description copied from class: DecompilerExporter
      Decompile and export all meaningful elements. This is the recommended method to call. Top-level classes and their constituents will be exported; orphaned methods and other items will be exported as well.

      If an output folder was specified, the resulting source files will be stored in a folder hierarchy that matches their namespace or package name.

      Specified by:
      process in class DecompilerExporter
      Returns:
      true if no error occurred; false if some errors occurred
    • customizeOptions

      protected void customizeOptions(boolean decompilingClasses, DecompilationOptions.Builder optbld)
      Description copied from class: DecompilerExporter
      Optional method used to customize the options of the decompilation context. The custom implementation may modify or set new options. The default implementation does nothing.
      Overrides:
      customizeOptions in class DecompilerExporter
      Parameters:
      decompilingClasses - true if the exporter will decompile classes; false if it will decompile methods
      optbld - the current option builder
    • setSignaturePattern

      public void setSignaturePattern(Pattern pattern)
      The strings that will be provided to the matcher are jvm (canonical) class or method signatures, e.g. Lcom/abc/Foo; or Lcom/foo/Bar;->m1([I)Ljava/lang/String;.
      Overrides:
      setSignaturePattern in class DecompilerExporter
      Parameters:
      pattern - a regex pattern
    • generateMethodFileName

      protected String generateMethodFileName(String msig)
      Overrides:
      generateMethodFileName in class DecompilerExporter
    • generateClassFileName

      protected String generateClassFileName(String csig)
      Overrides:
      generateClassFileName in class DecompilerExporter