/** * Log low level diagnostic information. */ void diagnostic(String format, Object... args) { androidBuilder.getLogger().verbose( "External native generate JSON " + variantName + ": " + format, args); }
.getLogger() .warning( "\nA larger heap for the Gradle daemon is recommended for running "
checkNotNull(outFile, "outFile cannot be null."); checkNotNull(dexOptions, "dexOptions cannot be null."); getLogger().verbose("AndroidBuilder::preDexLibraryNoCache %1$s", inputFile.getAbsolutePath());
ProcessResult result = mJavaProcessExecutor.execute( javaProcessInfo, new LoggedProcessOutputHandler(getLogger())); result.rethrowFailure().assertNormalExitValue();
"Cannot call preDexLibrary() before setTargetInfo() is called."); getLogger().verbose("AndroidBuilder::preDexLibrary %1$s", inputFile.getAbsolutePath()); if (inputFile.isFile()) { PreDexCache.getCache().preDexLibrary(
/** * Sets the SdkInfo and the targetInfo on the builder. This is required to actually * build (some of the steps). * * @see com.android.builder.sdk.SdkLoader */ public void setTargetInfo(@NonNull TargetInfo targetInfo) { mTargetInfo = targetInfo; mDexByteCodeConverter = new DexByteCodeConverter( getLogger(), mTargetInfo, mJavaProcessExecutor, mVerboseExec); if (mTargetInfo.getBuildTools().getRevision().compareTo(MIN_BUILD_TOOLS_REV) < 0) { mErrorReporter.handleSyncError( MIN_BUILD_TOOLS_REV.toString(), SyncIssue.TYPE_BUILD_TOOLS_TOO_LOW, String.format( "The SDK Build Tools revision (%1$s) is too low for project '%2$s'. " + "Minimum required is %3$s", mTargetInfo.getBuildTools().getRevision(), mProjectId, MIN_BUILD_TOOLS_REV)); } }
/** * Execute an external process and log the result in the case of a process exceptions. * Returns the info part of the log so that it can be parsed by ndk-build parser; * @throws BuildCommandException when the build failed. */ @NonNull public static String executeBuildProcessAndLogError( @NonNull AndroidBuilder androidBuilder, @NonNull ProcessInfoBuilder process, boolean logStdioToInfo) throws BuildCommandException, IOException { ProgressiveLoggingProcessOutputHandler handler = new ProgressiveLoggingProcessOutputHandler(androidBuilder.getLogger(), logStdioToInfo); try { // Log the command to execute but only in verbose (ie --info) androidBuilder.getLogger().verbose(process.toString()); androidBuilder.executeProcess(process.createProcess(), handler) .rethrowFailure().assertNormalExitValue(); return handler.getStandardOutputString(); } catch (ProcessException e) { // Also, add process output to the process exception so that it can be analyzed by // caller. Use combined stderr stdout instead of just stdout because compiler errors // go to stdout. String combinedMessage = String.format("%s\n%s", e.getMessage(), handler.getCombinedOutputString()); throw new BuildCommandException(combinedMessage); } }
try { Optional<JackProvider> jackProvider = buildToolServiceLoader .getSingleService(getLogger(), BuildToolsServiceLoader.JACK); if (jackProvider.isPresent()) { Api01Config config; getLogger().warning("Cannot load Jack APIs v01 " + e.getMessage()); getLogger().warning("Reverting to native process invocation");
ProcessOutputHandler handler = new LoggedProcessOutputHandler(getBuilder().getLogger()); getBuilder().executeProcess(builder.createProcess(), handler) .rethrowFailure().assertNormalExitValue();
private static Aapt makeAapt( BuildToolInfo buildToolInfo, AaptGeneration aaptGeneration, AndroidBuilder builder, boolean crunchPng, MergingLog blameLog) { ProcessOutputHandler teeOutputHandler = new TeeProcessOutputHandler( blameLog != null ? new ParsingProcessOutputHandler( new ToolOutputParser( aaptGeneration == AaptGeneration.AAPT_V1 ? new AaptOutputParser() : new Aapt2OutputParser(), builder.getLogger()), new MergingLogRewriter(blameLog::find, builder.getErrorReporter())) : new LoggedProcessOutputHandler( new AaptGradleFactory.FilteringLogger(builder.getLogger())), new LoggedProcessOutputHandler(new AaptGradleFactory.FilteringLogger(builder.getLogger()))); return new AaptV1( builder.getProcessExecutor(), teeOutputHandler, buildToolInfo, new AaptGradleFactory.FilteringLogger(builder.getLogger()), crunchPng ? AaptV1.PngProcessMode.ALL : AaptV1.PngProcessMode.NO_CRUNCH, 0); }
new TeeProcessOutputHandler( outputHandler, new LoggedProcessOutputHandler(new FilteringLogger(builder.getLogger()))); buildTools, intermediateDir, new FilteringLogger(builder.getLogger())); } else { AaptV1.PngProcessMode processMode; teeOutputHandler, buildTools, new FilteringLogger(builder.getLogger()), processMode, cruncherProcesses);
multiDex); ILogger logger = builder.getLogger(); logger.verbose("preDexLibrary : %1$s", itemKey); Pair<Item, Boolean> pair = getItem(logger, itemKey);
private void runJack(@NonNull TransformInvocation transformInvocation) throws ProcessException, IOException, JackToolchain.ToolchainException, ClassNotFoundException { TransformOutputProvider outputProvider = transformInvocation.getOutputProvider(); checkNotNull(outputProvider); final File outDirectory = outputProvider.getContentLocation( "main", getOutputTypes(), getScopes(), Format.DIRECTORY); options.setDexOutputDirectory(outDirectory); options.setClasspaths( TransformInputUtil.getAllFiles(transformInvocation.getReferencedInputs())); options.setImportFiles(TransformInputUtil.getAllFiles(transformInvocation.getInputs())); options.setInputFiles(getSourceFiles()); JackToolchain toolchain = new JackToolchain( androidBuilder.getTargetInfo().getBuildTools(), androidBuilder.getLogger(), androidBuilder.getErrorReporter()); toolchain.convert(options, androidBuilder.getJavaProcessExecutor(), jackInProcess); }
/** * Creates a new {@link Aapt} instance based on project configuration. * * @param builder the android builder project model * @param crunchPng should PNGs be crunched? * @param scope the scope of the variant to use {@code aapt2} with * @param intermediateDir intermediate directory for aapt to use * @return the newly-created instance */ @NonNull public static Aapt make( @NonNull AndroidBuilder builder, boolean crunchPng, @NonNull VariantScope scope, @NonNull File intermediateDir) { return make( builder, new LoggedProcessOutputHandler(new FilteringLogger(builder.getLogger())), crunchPng, scope.getGlobalScope().getProject(), scope.getVariantConfiguration().getType(), intermediateDir, scope.getGlobalScope().getExtension().getAaptOptions().getCruncherProcesses()); }