public JadxArgs getArgs() { return decompiler.getArgs(); } }
public void openFile(File file) { this.openFile = file; try { this.decompiler = new JadxDecompiler(settings.toJadxArgs()); this.decompiler.getArgs().setInputFiles(Collections.singletonList(file)); this.decompiler.load(); } catch (Exception e) { LOG.error("Error load file: {}", file, e); } }
@Override public void run() { try { decompiler.getArgs().setRootDir(dir); ThreadPoolExecutor ex = (ThreadPoolExecutor) decompiler.getSaveExecutor(); ex.shutdown(); while (ex.isTerminating()) { long total = ex.getTaskCount(); long done = ex.getCompletedTaskCount(); progressMonitor.setProgress((int) (done * 100.0 / (double) total)); Thread.sleep(500); } progressMonitor.close(); LOG.info("decompilation complete, freeing memory ..."); decompiler.getClasses().forEach(JavaClass::unload); LOG.info("done"); } catch (InterruptedException e) { LOG.error("Save interrupted", e); Thread.currentThread().interrupt(); } } };
private void processByPatterns(JadxDecompiler jadx, Pattern clsPattern, @Nullable Pattern mthPattern) { List<IDexTreeVisitor> passes = Jadx.getPassesList(jadx.getArgs()); RootNode root = JadxInternalAccess.getRoot(jadx); int processed = 0; for (ClassNode classNode : root.getClasses(true)) { String clsFullName = classNode.getClassInfo().getFullName(); if (clsPattern.matcher(clsFullName).matches()) { if (processCls(mthPattern, passes, classNode)) { processed++; } } } assertThat("No classes processed", processed, greaterThan(0)); }
private List<IDexTreeVisitor> getPassesList(JadxDecompiler jadx) { RootNode root = JadxInternalAccess.getRoot(jadx); List<IDexTreeVisitor> passesList = Jadx.getPassesList(jadx.getArgs()); passesList.forEach(pass -> { try { pass.init(root); } catch (JadxException e) { e.printStackTrace(); fail(e.getMessage()); } }); return passesList; }