private void dexInProcess( @NonNull final DexProcessBuilder builder, @NonNull final DexOptions dexOptions, @NonNull final ProcessOutputHandler outputHandler) throws IOException, ProcessException { final String submission = Joiner.on(',').join(builder.getInputs()); mLogger.verbose("Dexing in-process : %1$s", submission); try { sDexExecutorService.submit(() -> { Stopwatch stopwatch = Stopwatch.createStarted(); ProcessResult result = DexWrapper.run(builder, dexOptions, outputHandler); result.assertNormalExitValue(); mLogger.verbose("Dexing %1$s took %2$s.", submission, stopwatch.toString()); return null; }).get(); } catch (Exception e) { throw new ProcessException(e); } }
/** * Runs the dex command. * * @return the integer return code of com.android.dx.command.dexer.Main.run() */ public static ProcessResult run( @NonNull DexProcessBuilder processBuilder, @NonNull DexOptions dexOptions, @NonNull ProcessOutputHandler outputHandler) throws IOException, ProcessException { ProcessOutput output = outputHandler.createOutput(); int res; try { DxContext dxContext = new DxContext(output.getStandardOutput(), output.getErrorOutput()); Main.Arguments args = buildArguments(processBuilder, dexOptions, dxContext); res = new Main(dxContext).run(args); } finally { output.close(); } outputHandler.handleOutput(output); return new DexProcessResult(res); }