public void baksmaliClass(DexClassNode n, BufferedWriter writer) { baksmaliClass(n, new BaksmaliDumpOut(writer)); }
public void baksmaliMethod(DexMethodNode m, BufferedWriter writer) { baksmaliMethod(m, new BaksmaliDumpOut(writer)); }
@Override public void visitEnd() { super.visitEnd(); Path smaliFile = dir .resolve(rebuildFileName(className.substring(1, className.length() - 1)) + ".smali"); try { Path parent = smaliFile.getParent(); if (parent != null && !Files.exists(parent)) { Files.createDirectories(parent); } } catch (IOException e) { throw new RuntimeException(e); } try (BufferedWriter writer = Files.newBufferedWriter(smaliFile, StandardCharsets.UTF_8)) { BaksmaliDumpOut out = new BaksmaliDumpOut(writer); bs.baksmaliClass(this, out); writer.flush(); } catch (IOException e) { throw new RuntimeException(e); } } };
private static String pbaksmali(DexClassNode dcn) throws IOException { StringWriter bufWriter = new StringWriter(); BufferedWriter w = new BufferedWriter(bufWriter); new BaksmaliDumper(true, true).baksmaliClass(dcn, new BaksmaliDumpOut(w)); w.flush(); bufWriter.flush(); return bufWriter.toString(); }
public static String toStd(DexClassNode expected) throws IOException { StringWriter stringWriter = new StringWriter(); BufferedWriter bufferedWriter = new BufferedWriter(stringWriter); BaksmaliDumpOut out = new BaksmaliDumpOut(bufferedWriter); final BaksmaliDumper bs = new BaksmaliDumper(true, false); bs.baksmaliClass(expected, out); bufferedWriter.close(); return stringWriter.toString(); } }
@Test public void test() throws IOException { DexFileNode dfn = new DexFileNode(); try (InputStream is = SmaliTest.class.getResourceAsStream("/a.smali")) { Smali.smaliFile("a.smali", is, dfn); } for (DexClassNode dcn : dfn.clzs) { BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out)); new BaksmaliDumper(true, true).baksmaliClass(dcn, new BaksmaliDumpOut(w)); w.flush(); } }