/** * Check for user requested ABIs that aren't valid. Give a SyncIssue. */ private static void checkForRequestedButUnknownAbis ( @NonNull Collection<String> availableAbis, @NonNull Collection<String> userRequestedAbis, @NonNull AndroidBuilder androidBuilder, @NonNull String variantName) { List<String> requestedButNotAvailable = Lists.newArrayList(); for (String abiName : userRequestedAbis) { if (!availableAbis.contains(abiName)) { requestedButNotAvailable.add(abiName); } } if (!requestedButNotAvailable.isEmpty()) { androidBuilder.getErrorReporter().handleSyncError( variantName, SyncIssue.TYPE_EXTERNAL_NATIVE_BUILD_CONFIGURATION, String.format("ABIs [%s] are not available for platform and will be " + "excluded from building and packaging. Available ABIs are [%s].", Joiner.on(", ").join(requestedButNotAvailable), Joiner.on(", ").join(availableAbis))); } }
public void build(boolean forceJsonGeneration) { try { diagnostic("building json with force flag %s", forceJsonGeneration); buildAndPropagateException(forceJsonGeneration); } catch (@NonNull IOException | GradleException e ) { androidBuilder.getErrorReporter().handleSyncError( variantName, SyncIssue.TYPE_EXTERNAL_NATIVE_BUILD_CONFIGURATION, e.getMessage()); } catch (ProcessException e) { androidBuilder.getErrorReporter().handleSyncError( e.getMessage(), SyncIssue.TYPE_EXTERNAL_NATIVE_BUILD_PROCESS_EXCEPTION, String.format("executing external native build for %s %s", getNativeBuildSystem().getName(), makefile)); } }
@Override @NonNull public BaseVariantData createVariantData( @NonNull GradleVariantConfiguration variantConfiguration, @NonNull TaskManager taskManager, @NonNull Recorder recorder) { return new AtomVariantData( extension, taskManager, variantConfiguration, androidBuilder.getErrorReporter(), recorder); }
@NonNull @Override public BaseVariantData createVariantData( @NonNull GradleVariantConfiguration variantConfiguration, @NonNull TaskManager taskManager, @NonNull Recorder recorder) { InstantAppVariantData variant = new InstantAppVariantData( extension, taskManager, variantConfiguration, androidBuilder.getErrorReporter(), recorder); variant.createOutput(OutputFile.OutputType.MAIN, Collections.<FilterData>emptyList()); return variant; }
@Override @NonNull public BaseVariantData createVariantData( @NonNull GradleVariantConfiguration variantConfiguration, @NonNull TaskManager taskManager, @NonNull Recorder recorder) { return new LibraryVariantData( extension, taskManager, variantConfiguration, androidBuilder.getErrorReporter(), recorder); }
androidBuilder.getErrorReporter().handleSyncWarning( scope.getFullVariantName(), SyncIssue.TYPE_EXTERNAL_NATIVE_BUILD_CONFIGURATION,
if (Boolean.TRUE.equals(unbundledWearApp)) { if (hasWearAppDependency(variantData)) { androidBuilder.getErrorReporter().handleSyncError( scope.getFullVariantName(), SyncIssue.TYPE_DEPENDENCY_WEAR_APK_WITH_UNBUNDLED, androidBuilder.getErrorReporter().handleSyncError( configName, SyncIssue.TYPE_DEPENDENCY_WEAR_APK_TOO_MANY,
variantScope.getGlobalScope().getAndroidBuilder().getErrorReporter().handleSyncError( null, SyncIssue.TYPE_GENERIC,
public void createExternalNativeBuildJsonGenerators(@NonNull VariantScope scope) { CoreExternalNativeBuild externalNativeBuild = extension.getExternalNativeBuild(); ExternalNativeBuildTaskUtils.ExternalNativeBuildProjectPathResolution pathResolution = ExternalNativeBuildTaskUtils.getProjectPath(externalNativeBuild); if (pathResolution.errorText != null) { androidBuilder.getErrorReporter().handleSyncError( scope.getVariantConfiguration().getFullName(), SyncIssue.TYPE_EXTERNAL_NATIVE_BUILD_CONFIGURATION, pathResolution.errorText); return; } if (pathResolution.makeFile == null) { // No project return; } scope.setExternalNativeJsonGenerator(ExternalNativeJsonGenerator.create( project.getProjectDir(), pathResolution.buildSystem, pathResolution.makeFile, androidBuilder, sdkHandler, scope )); }
new ToolOutputParser(new DexParser(), Message.Kind.ERROR, getILogger()), new ToolOutputParser(new DexParser(), getILogger()), getBuilder().getErrorReporter()); DexOptions dexOptions = DefaultDexOptions.copyOf( scope.getGlobalScope().getExtension().getDexOptions());
testVariantConfig, (TestedVariantData) testedVariantData, androidBuilder.getErrorReporter(), recorder);
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); }
.resolveAndGetAnnotationProcessorClassPath( annotationProcessorOptions.getIncludeCompileClasspath(), androidBuilder.getErrorReporter())); options.setAnnotationProcessorClassPath(processorPath); options.setAnnotationProcessorNames(annotationProcessorOptions.getClassNames()); .getVariantDependency() .resolveAndGetJackPluginClassPath( androidBuilder.getErrorReporter())); options.setJackPluginClassPath(pluginClassPath); options.setJackPluginNames(config.getJackOptions().getPluginNames());
/** * Creates the task for creating *.class files using javac. These tasks are created regardless * of whether Jack is used or not, but assemble will not depend on them if it is. They are * always used when running unit tests. */ public AndroidTask<? extends JavaCompile> createJavacTask( @NonNull final TaskFactory tasks, @NonNull final VariantScope scope) { final BaseVariantData<? extends BaseVariantOutputData> variantData = scope.getVariantData(); AndroidTask<IncrementalSafeguard> javacIncrementalSafeguard = androidTasks.create(tasks, new IncrementalSafeguard.ConfigAction(scope)); AndroidTask<JavaPreCompileTask> preCompileTask = androidTasks.create(tasks, new JavaPreCompileTask.ConfigAction(scope)); final AndroidTask<? extends JavaCompile> javacTask = androidTasks.create( tasks, new JavaCompileConfigAction(scope, androidBuilder.getErrorReporter())); scope.setJavacTask(javacTask); javacTask.dependsOn(tasks, javacIncrementalSafeguard, preCompileTask); setupCompileTaskDependencies(tasks, scope, javacTask); // Create jar task for uses by external modules. if (variantData.getVariantDependency().getClassesConfiguration() != null) { AndroidTask<Jar> packageJarArtifact = androidTasks.create(tasks, new PackageJarArtifactConfigAction(scope)); packageJarArtifact.dependsOn(tasks, javacTask); } return javacTask; }
androidBuilder.getErrorReporter().handleSyncError( null, SyncIssue.TYPE_GENERIC,
@Override public void doFullTaskAction() throws IOException { AndroidBuilder builder = getBuilder(); MergingLog mergingLog = new MergingLog(getMergeBlameLogFolder()); ProcessOutputHandler processOutputHandler = new ParsingProcessOutputHandler( new ToolOutputParser(new AaptOutputParser(), getILogger()), new MergingLogRewriter(mergingLog, builder.getErrorReporter())); try { Aapt aapt = AaptGradleFactory.make( getBuilder(), processOutputHandler, true, variantScope.getGlobalScope().getProject(), VariantType.INSTANTAPP, FileUtils.mkdirs(new File(getIncrementalFolder(), "aapt-temp")), aaptOptions.getCruncherProcesses()); AaptPackageConfig.Builder config = new AaptPackageConfig.Builder() .setManifestFile(getManifestFile()) .setOptions(getAaptOptions()) .setResourceOutputApk(getOutputResourcePackage()) .setVariantType(getType()) .setDebuggable(getDebuggable()) .setPseudoLocalize(getPseudoLocalesEnabled()) .setBaseFeature(getBaseAtomResourcePackage()) .setPreviousFeatures(getAtomResourcePackages()); builder.processResources(aapt, config, true); } catch (IOException | InterruptedException | ProcessException e) { throw new RuntimeException(e); } }
.resolveAndGetAnnotationProcessorClassPath( annotationProcessorOptions.getIncludeCompileClasspath(), scope.getGlobalScope().getAndroidBuilder().getErrorReporter()));
ProcessOutputHandler processOutputHandler = new ParsingProcessOutputHandler( new ToolOutputParser(new AaptOutputParser(), getILogger()), new MergingLogRewriter(mergingLog, builder.getErrorReporter()));
ErrorReporter errorReporter = androidBuilder.getErrorReporter();
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); }