diff --git a/config/config.properties b/config/config.properties index 84cff53..b56cffa 100644 --- a/config/config.properties +++ b/config/config.properties @@ -12,5 +12,5 @@ keyAlias=test keyPassword=qqqqqq # apk path -apkFile=config/tnews.apk -outFile=tnews-out.apk +apkFile=/Users/xxx/Downloads/tianmao.apk +outFile=/Users/xxx/Downloads/tianmao-out.apk diff --git a/src/ApkCrack.java b/src/ApkCrack.java index 3cfd18f..a4ac832 100644 --- a/src/ApkCrack.java +++ b/src/ApkCrack.java @@ -197,6 +197,8 @@ private void addNetConfig(String outFile) throws Exception { StreamResult consoleResult = new StreamResult(tmp); transformer.transform(domSource, consoleResult); File out = new File(outFile); + File parent = out.getParentFile(); + if (!parent.exists()) parent.mkdirs(); if (out.exists()) out.delete(); tmp.renameTo(out); } diff --git a/src/ApkProcessDialog.java b/src/ApkProcessDialog.java index fc84f42..112f2da 100644 --- a/src/ApkProcessDialog.java +++ b/src/ApkProcessDialog.java @@ -1,4 +1,5 @@ import javax.swing.*; +import javax.swing.text.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -11,6 +12,7 @@ public class ApkProcessDialog extends JDialog { private JTextArea detailLabel; private JProgressBar progressBar; private JScrollPane scrollPane; + private Document document; public void setApkFile(String apkFile) { this.apkFile = apkFile; @@ -34,6 +36,8 @@ public ApkProcessDialog(Frame owner) { detailLabel = new JTextArea(""); detailLabel.setLineWrap(true); detailLabel.setWrapStyleWord(true); + document = new DefaultStyledDocument(); + detailLabel.setDocument(document); scrollPane.setViewportView(detailLabel); panel.add(top, BorderLayout.NORTH); panel.add(scrollPane, BorderLayout.CENTER); @@ -67,21 +71,34 @@ public void start() { apkCrack.setDebuggable(true); setVisible(true); processThread = new Thread(() -> { + ProgressUtil.init(); apkCrack.start(); }); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } processThread.start(); } + private StringBuilder sb = new StringBuilder(); + private void setProgressHandler() { ProgressUtil.setMsgHandler(new ProgressUtil.ProgressHandler() { @Override public void progress(String msg1, String msg2, float progress) { + SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (msg1 != null) { - String oldText = detailLabel.getText(); - detailLabel.setText(oldText + "\n" + msg1); + SimpleAttributeSet attrs = new SimpleAttributeSet(); + try { + document.insertString(document.getLength(), msg1 + "\n", attrs); + } catch (BadLocationException e) { + e.printStackTrace(); + } } if (msg2 != null) { mainLabel.setText(msg2); diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF index 5ee19cb..9d44d93 100644 --- a/src/META-INF/MANIFEST.MF +++ b/src/META-INF/MANIFEST.MF @@ -1,3 +1,3 @@ Manifest-Version: 1.0 -Main-Class: Main +Main-Class: MainUI diff --git a/src/Main.java b/src/Main.java index bf9557b..94425ca 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,6 +1,7 @@ public class Main { public static void main(String[] args) { - new ApkCrack().start(); + ProgressUtil.init(); + new ApkCrack().start(); } } diff --git a/src/ProgressUtil.java b/src/ProgressUtil.java index 63c7343..077c2ba 100644 --- a/src/ProgressUtil.java +++ b/src/ProgressUtil.java @@ -1,6 +1,8 @@ import brut.androlib.Androlib; import brut.androlib.res.AndrolibResources; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.logging.Handler; import java.util.logging.LogRecord; import java.util.logging.Logger; @@ -51,29 +53,45 @@ public interface ProgressHandler { void progress(String msg1, String msg2, float progress); } - public static void setMsgHandler(ProgressHandler progressHandler) { + private static ProgressHandler progressHandler; + + private static ProgressHandler getHandler() { + return progressHandler; + } + + private static Executor executor = Executors.newSingleThreadExecutor(); + + + public static void init() { for (Class cls : LoggerClasses) { Logger logger = Logger.getLogger(cls.getName()); logger.addHandler(new Handler() { @Override public void publish(LogRecord record) { - String msg = record.getMessage(); - String msg2 = null; - float progress = 0f; - - for (int i = 0; i < detailMsgs.length; i++) { - if (msg.startsWith(detailMsgs[i])) { - progress = (i + 1f) / detailMsgs.length; - break; - } - } - for (String m : msgs) { - if (msg.startsWith(m)) { - msg2 = msg; - break; + System.out.println(record.getMessage()); + executor.execute(new Runnable() { + @Override + public void run() { + if (getHandler() == null) return; + String msg = record.getMessage(); + String msg2 = null; + float progress = 0f; + + for (int i = 0; i < detailMsgs.length; i++) { + if (msg.startsWith(detailMsgs[i])) { + progress = (i + 1f) / detailMsgs.length; + break; + } + } + for (String m : msgs) { + if (msg.startsWith(m)) { + msg2 = msg; + break; + } + } + getHandler().progress(msg, msg2, progress); } - } - progressHandler.progress(msg, msg2, progress); + }); } @Override @@ -88,4 +106,18 @@ public void close() throws SecurityException { }); } } + + public static void setMsgHandler(ProgressHandler h) { + progressHandler = h; + } + + public static void main(String[] args) { + setMsgHandler(new ProgressHandler() { + @Override + public void progress(String msg1, String msg2, float progress) { + System.out.println(msg1 + "," + msg2 + "," + progress); + } + }); + Logger.getLogger(Androlib.class.getName()).info("test"); + } }