core: fix warning from dx library

This commit is contained in:
Skylot
2016-03-19 18:21:52 +03:00
parent d95d268ec5
commit 0fff1a6754
2 changed files with 17 additions and 2 deletions
@@ -121,7 +121,8 @@ public class InputFile {
byte[] ba = j2d.convert(jarFile.getAbsolutePath());
if (ba.length == 0) {
throw new JadxException(j2d.isError() ? j2d.getDxErrors() : "Empty dx output");
} else if (j2d.isError()) {
}
if (j2d.isError()) {
LOG.warn("dx message: {}", j2d.getDxErrors());
}
return new Dex(ba);
@@ -5,6 +5,7 @@ import jadx.core.utils.exceptions.JadxException;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import com.android.dx.command.DxConsole;
import com.android.dx.command.dexer.Main;
@@ -23,6 +24,8 @@ public class JavaToDex {
optimize = true;
localInfo = true;
coreLibrary = true;
debug = true;
}
}
@@ -40,6 +43,7 @@ public class JavaToDex {
try {
System.setOut(new PrintStream(baos, true, CHARSET_NAME));
DxArgs args = new DxArgs("-", new String[]{javaFile});
resetOutDexVar();
Main.run(args);
baos.close();
} catch (Throwable e) {
@@ -56,11 +60,21 @@ public class JavaToDex {
return baos.toByteArray();
}
private void resetOutDexVar() throws JadxException {
try {
Field outputDex = Main.class.getDeclaredField("outputDex");
outputDex.setAccessible(true);
outputDex.set(null, null);
} catch (Exception e) {
throw new JadxException("Failed to reset outputDex field", e);
}
}
public String getDxErrors() {
return dxErrors;
}
public boolean isError() {
return dxErrors != null && dxErrors.length() > 0;
return dxErrors != null && !dxErrors.isEmpty();
}
}