mirror of
https://github.com/revanced/Apktool.git
synced 2025-01-07 10:35:52 +01:00
Write output to separate streams (error and output)
This will allow to write errors and output to the console handler as usual, but will help to handle errors from external binaries (such as aapt, executed by exec method) in all initialized logger handlers, not only console, but text handler, for ex.
This commit is contained in:
parent
47076ebaba
commit
74e0aa0bd2
@ -19,6 +19,7 @@ package brut.util;
|
|||||||
import brut.common.BrutException;
|
import brut.common.BrutException;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
@ -26,6 +27,9 @@ import org.apache.commons.io.IOUtils;
|
|||||||
* @author Ryszard Wiśniewski <brut.alll@gmail.com>
|
* @author Ryszard Wiśniewski <brut.alll@gmail.com>
|
||||||
*/
|
*/
|
||||||
public class OS {
|
public class OS {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = Logger.getLogger("");
|
||||||
|
|
||||||
public static void rmdir(File dir) throws BrutException {
|
public static void rmdir(File dir) throws BrutException {
|
||||||
if (! dir.exists()) {
|
if (! dir.exists()) {
|
||||||
return;
|
return;
|
||||||
@ -80,21 +84,19 @@ public class OS {
|
|||||||
|
|
||||||
public static void exec(String[] cmd) throws BrutException {
|
public static void exec(String[] cmd) throws BrutException {
|
||||||
Process ps = null;
|
Process ps = null;
|
||||||
|
int exitValue = -99;
|
||||||
try {
|
try {
|
||||||
ps = Runtime.getRuntime().exec(cmd);
|
ProcessBuilder builder = new ProcessBuilder(cmd);
|
||||||
|
ps = builder.start();
|
||||||
new StreamForwarder(ps.getInputStream(), System.err).start();
|
new StreamForwarder(ps.getErrorStream(), "ERROR").start();
|
||||||
new StreamForwarder(ps.getErrorStream(), System.err).start();
|
new StreamForwarder(ps.getInputStream(), "OUTPUT").start();
|
||||||
if (ps.waitFor() != 0) {
|
exitValue = ps.waitFor();
|
||||||
throw new BrutException(
|
if (exitValue != 0)
|
||||||
"could not exec command: " + Arrays.toString(cmd));
|
throw new BrutException("could not exec (exit code = " + exitValue + "): " + Arrays.toString(cmd));
|
||||||
}
|
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
throw new BrutException(
|
throw new BrutException("could not exec: " + Arrays.toString(cmd), ex);
|
||||||
"could not exec command: " + Arrays.toString(cmd), ex);
|
|
||||||
} catch (InterruptedException ex) {
|
} catch (InterruptedException ex) {
|
||||||
throw new BrutException(
|
throw new BrutException("could not exec : " + Arrays.toString(cmd), ex);
|
||||||
"could not exec command: " + Arrays.toString(cmd), ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,30 +117,29 @@ public class OS {
|
|||||||
|
|
||||||
static class StreamForwarder extends Thread {
|
static class StreamForwarder extends Thread {
|
||||||
|
|
||||||
public StreamForwarder(InputStream in, OutputStream out) {
|
StreamForwarder(InputStream is, String type) {
|
||||||
mIn = in;
|
mIn = is;
|
||||||
mOut = out;
|
mType = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
BufferedReader in = new BufferedReader(
|
BufferedReader br = new BufferedReader(new InputStreamReader(mIn));
|
||||||
new InputStreamReader(mIn));
|
|
||||||
BufferedWriter out = new BufferedWriter(
|
|
||||||
new OutputStreamWriter(mOut));
|
|
||||||
String line;
|
String line;
|
||||||
while ((line = in.readLine()) != null) {
|
while ((line = br.readLine()) != null) {
|
||||||
out.write(line);
|
if (mType.equals("OUTPUT")) {
|
||||||
out.newLine();
|
LOGGER.info(line);
|
||||||
|
} else {
|
||||||
|
LOGGER.warning(line);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
out.flush();
|
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final InputStream mIn;
|
private final InputStream mIn;
|
||||||
private final OutputStream mOut;
|
private final String mType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user