diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java index 2c2079e9..4cbde945 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java @@ -441,7 +441,7 @@ public class BytecodeViewer BytecodeViewer.viewer.updateBusyStatus(true); boolean noErrors = true; boolean actuallyTried = false; - + for (java.awt.Component c : BytecodeViewer.viewer.workPane.getLoadedViewers()) { if (c instanceof ClassViewer) @@ -455,11 +455,11 @@ public class BytecodeViewer if(noErrors && !cv.resourceViewPanel3.compile()) noErrors = false; - if(cv.resourceViewPanel1.textArea.isEditable()) + if(cv.resourceViewPanel1.textArea != null && cv.resourceViewPanel1.textArea.isEditable()) actuallyTried = true; - if(cv.resourceViewPanel2.textArea.isEditable()) + if(cv.resourceViewPanel2.textArea != null && cv.resourceViewPanel2.textArea.isEditable()) actuallyTried = true; - if(cv.resourceViewPanel3.textArea.isEditable()) + if(cv.resourceViewPanel3.textArea != null && cv.resourceViewPanel3.textArea.isEditable()) actuallyTried = true; } } @@ -476,7 +476,7 @@ public class BytecodeViewer BytecodeViewer.showMessage("You have no editable panes opened, make one editable and try again."); } } - + BytecodeViewer.viewer.updateBusyStatus(false); return true; } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/KrakatauAssembler.java b/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/KrakatauAssembler.java index f3b6af5d..b3bbf22d 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/KrakatauAssembler.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/KrakatauAssembler.java @@ -12,6 +12,7 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.Configuration; import the.bytecode.club.bytecodeviewer.Constants; import the.bytecode.club.bytecodeviewer.compilers.InternalCompiler; +import the.bytecode.club.bytecodeviewer.util.BCVFileUtils; import the.bytecode.club.bytecodeviewer.util.JarUtils; import the.bytecode.club.bytecodeviewer.util.MiscUtils; @@ -111,7 +112,7 @@ public class KrakatauAssembler extends InternalCompiler log.append(nl).append(nl).append("Exit Value is ").append(exitValue); System.err.println(log); - byte[] b = FileUtils.readFileToByteArray(Objects.requireNonNull(findFile(tempDirectory, ".class"))); + byte[] b = FileUtils.readFileToByteArray(Objects.requireNonNull(BCVFileUtils.findFile(tempDirectory, ".class"))); tempDirectory.delete(); tempJar.delete(); return b; @@ -124,30 +125,4 @@ public class KrakatauAssembler extends InternalCompiler return null; } - - /** - * Searches a directory until the extension is found - */ - public static File findFile(File basePath, String extension) - { - for(File f : basePath.listFiles()) - { - if(f.isDirectory()) - { - File child = findFile(f, extension); - - if(child != null) - return child; - - continue; - } - - if(f.getName().endsWith(extension)) - { - return f; - } - } - - return null; - } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/SmaliAssembler.java b/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/SmaliAssembler.java index 37d97411..119a5e4c 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/SmaliAssembler.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/compilers/impl/SmaliAssembler.java @@ -61,8 +61,10 @@ public class SmaliAssembler extends InternalCompiler } try { - com.googlecode.d2j.smali.SmaliCmd.main(new String[]{tempSmaliFolder.getAbsolutePath()});//, "-o", tempDex - // .getAbsolutePath()}); + com.googlecode.d2j.smali.SmaliCmd.main(new String[]{ + tempSmaliFolder.getAbsolutePath(), + //"-o", tempDex.getAbsolutePath() + }); } catch (Exception e) { e.printStackTrace(); //new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e); @@ -73,7 +75,9 @@ public class SmaliAssembler extends InternalCompiler Dex2Jar.dex2Jar(tempDex, tempJar); else if (BytecodeViewer.viewer.apkConversionGroup.isSelected(BytecodeViewer.viewer.apkConversionEnjarify.getModel())) Enjarify.apk2Jar(tempDex, tempJar); - + + System.out.println("Temporary dex: " + tempDex.getAbsolutePath()); + try { System.out.println("Unzipping to " + tempJarFolder.getAbsolutePath()); ZipUtils.unzipFilesToPath(tempJar.getAbsolutePath(), tempJarFolder.getAbsolutePath()); @@ -93,6 +97,8 @@ public class SmaliAssembler extends InternalCompiler found = true; } } + + System.out.println("Saved as: " + outputClass.getAbsolutePath()); return FileUtils.readFileToByteArray(outputClass); } catch (java.lang.NullPointerException ignored) { } @@ -100,6 +106,10 @@ public class SmaliAssembler extends InternalCompiler e.printStackTrace(); //new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e); } + finally + { + tempDex.delete(); + } return null; } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/ResourceViewPanel.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/ResourceViewPanel.java index 82076c1e..247f2ad4 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/ResourceViewPanel.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/ResourceViewPanel.java @@ -71,7 +71,7 @@ public class ResourceViewPanel public boolean compile() { - if(!textArea.isEditable()) + if(textArea == null || !textArea.isEditable()) return true; //WARNING: Any errors thrown will get swallowed by this class @@ -91,18 +91,16 @@ public class ResourceViewPanel try { ClassNode newNode = JarUtils.getNode(compiledClass); BytecodeViewer.updateNode(viewer.cn, newNode); + errConsole.finished(); + return true; } catch (Exception e) { e.printStackTrace(); } - - return true; - } - else - { - errConsole.pretty(); - errConsole.setVisible(true); - errConsole.finished(); - return false; } + + errConsole.pretty(); + errConsole.setVisible(true); + errConsole.finished(); + return false; } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/util/BCVFileUtils.java b/src/main/java/the/bytecode/club/bytecodeviewer/util/BCVFileUtils.java new file mode 100644 index 00000000..92bffa8f --- /dev/null +++ b/src/main/java/the/bytecode/club/bytecodeviewer/util/BCVFileUtils.java @@ -0,0 +1,36 @@ +package the.bytecode.club.bytecodeviewer.util; + +import java.io.File; + +/** + * @author Konloch + * @since 7/4/2021 + */ +public class BCVFileUtils +{ + /** + * Searches a directory until the extension is found + */ + public static File findFile(File basePath, String extension) + { + for(File f : basePath.listFiles()) + { + if(f.isDirectory()) + { + File child = findFile(f, extension); + + if(child != null) + return child; + + continue; + } + + if(f.getName().endsWith(extension)) + { + return f; + } + } + + return null; + } +}