Search in sources :

Example 71 with Task

use of org.gradle.api.Task in project atlas by alibaba.

the class MtlTaskInjector method findTask.

protected List<Task> findTask(Class<Task> clazz, String variantName) {
    Task[] androidTasks = project.getTasks().withType(clazz).toArray(new Task[0]);
    List<Task> taskList = new ArrayList();
    for (Task task : androidTasks) {
        if (task.getName().endsWith("TestJavaWithJavac")) {
            continue;
        }
        if (variantName.contains("-")) {
            variantName = variantName.replace("-", "");
        }
        if (task instanceof DefaultAndroidTask) {
            if (variantName.toLowerCase().equals(((DefaultAndroidTask) task).getVariantName().toLowerCase())) {
                taskList.add(task);
            }
        } else {
            String name = task.getName();
            if (name.toLowerCase().contains(variantName.toLowerCase())) {
                taskList.add(task);
            }
        }
    }
    return taskList;
}
Also used : DefaultAndroidTask(com.android.build.gradle.internal.tasks.DefaultAndroidTask) BaseTask(com.android.build.gradle.internal.tasks.BaseTask) Task(org.gradle.api.Task) DefaultAndroidTask(com.android.build.gradle.internal.tasks.DefaultAndroidTask) ArrayList(java.util.ArrayList)

Example 72 with Task

use of org.gradle.api.Task in project atlas by alibaba.

the class AtlasAppTaskManager method runTask.

@Override
public void runTask() {
    appExtension.getApplicationVariants().forEach(new Consumer<ApplicationVariant>() {

        @Override
        public void accept(ApplicationVariant applicationVariant) {
            AppVariantContext appVariantContext = AtlasBuildContext.sBuilderAdapter.appVariantContextFactory.getAppVariantContext(project, applicationVariant);
            if (!AtlasBuildContext.atlasMainDexHelperMap.containsKey(appVariantContext.getVariantName())) {
                AtlasBuildContext.atlasMainDexHelperMap.put(appVariantContext.getVariantName(), new AtlasMainDexHelper());
            }
            TransformReplacer transformReplacer = new TransformReplacer(appVariantContext);
            repalceAndroidBuilder(applicationVariant);
            List<MtlTaskContext> mtlTaskContextList = new ArrayList<MtlTaskContext>();
            mtlTaskContextList.add(new MtlTaskContext(appVariantContext.getVariantData().preBuildTask));
            mtlTaskContextList.add(new MtlTaskContext(BuildAtlasEnvTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(ScanDupResTask.ConfigActon.class, null));
            mtlTaskContextList.add(new MtlTaskContext(LogDependenciesTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(PrepareAPTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(appVariantContext.getVariantData().mergeAssetsTask));
            mtlTaskContextList.add(new MtlTaskContext(RenderscriptCompile.class));
            mtlTaskContextList.add(new MtlTaskContext(StandardizeLibManifestTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(PrepareBundleInfoTask.ConfigAction.class, null));
            if (!atlasExtension.getTBuildConfig().getClassInject() && atlasExtension.isAtlasEnabled()) {
                mtlTaskContextList.add(new MtlTaskContext(GenerateAtlasSourceTask.ConfigAction.class, null));
            }
            mtlTaskContextList.add(new MtlTaskContext(PreparePackageIdsTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(PrepareAaptTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(AidlCompile.class));
            mtlTaskContextList.add(new MtlTaskContext(GenerateBuildConfig.class));
            mtlTaskContextList.add(new MtlTaskContext(MergeResAwbsConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(MergeAssetAwbsConfigAction.class, null));
            if (null != androidExtension.getDataBinding() && androidExtension.getDataBinding().isEnabled() && !appVariantContext.getAtlasExtension().getTBuildConfig().getAllBundlesToMdex()) {
                // mtlTaskContextList.add(
                // new MtlTaskContext(AwbDataBindingProcessLayoutTask.ConfigAction.class, null));
                mtlTaskContextList.add(new MtlTaskContext(AwbDataBindingExportBuildInfoTask.ConfigAction.class, null));
                mtlTaskContextList.add(new MtlTaskContext(AwbDataBindingMergeArtifactsTask.ConfigAction.class, null));
            }
            mtlTaskContextList.add(new MtlTaskContext(MergeManifests.class));
            mtlTaskContextList.add(new MtlTaskContext(MergeManifestAwbsConfigAction.class, null));
            // mtlTaskContextList.add(new MtlTaskContext(MergeResV4Dir.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(ProcessAndroidResources.class));
            ProcessAndroidResources processAndroidResources = appVariantContext.getScope().getProcessResourcesTask().get(new TaskContainerAdaptor(appVariantContext.getProject().getTasks()));
            if (processAndroidResources.isAapt2Enabled()) {
                processAndroidResources.doLast(new Action<Task>() {

                    @Override
                    public void execute(Task task) {
                        File processResourcePackageOutputDirectory = appVariantContext.getScope().getProcessResourcePackageOutputDirectory();
                        File[] files = processResourcePackageOutputDirectory.listFiles((file, name) -> name.endsWith(SdkConstants.DOT_RES));
                        for (File file : files) {
                            try {
                                ResourcePatch.makePatchable(file);
                            } catch (IOException e) {
                                throw new UncheckedIOException(e);
                            }
                        }
                    }
                });
            }
            mtlTaskContextList.add(new MtlTaskContext(ProcessResAwbsTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(JavacAwbsTask.ConfigAction.class, null));
            if (null != androidExtension.getDataBinding() && androidExtension.getDataBinding().isEnabled() && !appVariantContext.getAtlasExtension().getTBuildConfig().getAllBundlesToMdex()) {
                mtlTaskContextList.add(new MtlTaskContext(AwbDataBindingRenameTask.ConfigAction.class, null));
            }
            mtlTaskContextList.add(new MtlTaskContext(TransformTask.class));
            mtlTaskContextList.add(new MtlTaskContext(PackageAwbsTask.ConfigAction.class, null));
            if (appVariantContext.getAtlasExtension().getTBuildConfig().isIncremental() && (appVariantContext.getBuildType().getPatchConfig() == null || !appVariantContext.getBuildType().getPatchConfig().isCreateTPatch())) {
                // mtlTaskContextList.add(new MtlTaskContext(PrepareBaseApkTask.ConfigAction.class, null));
                final TaskFactory tasks = new TaskContainerAdaptor(project.getTasks());
                VariantScope variantScope = appVariantContext.getVariantData().getScope();
                // create the stream generated from this task
                variantScope.getTransformManager().addStream(OriginalStream.builder(project, applicationVariant.getName()).addContentType(QualifiedContent.DefaultContentType.RESOURCES).addScope(QualifiedContent.Scope.PROJECT).setFolders(new Supplier<Collection<File>>() {

                    @Override
                    public Collection<File> get() {
                        return ImmutableList.of(new File(appVariantContext.apContext.getBaseApk() + "_"));
                    }
                }).build());
            }
            final TaskFactory tasks = new TaskContainerAdaptor(project.getTasks());
            VariantScope variantScope = appVariantContext.getVariantData().getScope();
            mtlTaskContextList.add(new MtlTaskContext(PackageApplication.class));
            if (appVariantContext.getAtlasExtension().isInstantAppEnabled()) {
                mtlTaskContextList.add(new MtlTaskContext(AtlasBundleInstantApp.ConfigAction.class, null));
            }
            mtlTaskContextList.add(new MtlTaskContext(ApBuildTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(DiffBundleInfoTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(TPatchDiffResAPBuildTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(TPatchDiffApkBuildTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext(TPatchTask.ConfigAction.class, null));
            mtlTaskContextList.add(new MtlTaskContext("assemble"));
            new MtlTaskInjector(appVariantContext).injectTasks(mtlTaskContextList, tAndroidBuilder);
            List<MtlTransformContext> mtlTransformContextList = new ArrayList<MtlTransformContext>();
            if (atlasExtension.getTBuildConfig().getClassInject()) {
                mtlTransformContextList.add(new MtlTransformContext(ClassInjectTransform.class, ProGuardTransform.class, DexTransform.class));
            }
            if (variantScope.getInstantRunBuildContext().isInInstantRunMode() && appVariantContext.getVariantConfiguration().getBuildType().isMinifyEnabled()) {
                mtlTransformContextList.add(new MtlTransformContext(DelegateProguardTransform.class, ExtractJarsTransform.class, InstantRunTransform.class));
            }
            if (!mtlTransformContextList.isEmpty()) {
                new MtlTransformInjector(appVariantContext).injectTasks(mtlTransformContextList);
            }
            Collection<BaseVariantOutput> baseVariantOutputDataList = appVariantContext.getVariantOutputData();
            boolean multiDexEnabled = appVariantContext.getVariantData().getVariantConfiguration().isMultiDexEnabled();
            if (atlasExtension.getTBuildConfig().isAtlasMultiDex() && multiDexEnabled) {
                transformReplacer.replaceMultiDexListTransform();
            }
            transformReplacer.replaceProguardTransform();
            transformReplacer.disableCache();
            if (variantScope.getGlobalScope().getExtension().getDataBinding().isEnabled() && !appVariantContext.getAtlasExtension().getTBuildConfig().getAllBundlesToMdex()) {
                transformReplacer.replaceDataBindingMergeArtifactsTransform();
            }
            for (final BaseVariantOutput vod : baseVariantOutputDataList) {
                transformReplacer.replaceFixStackFramesTransform(vod);
                transformReplacer.replaceDesugarTransform(vod);
                transformReplacer.replaceDexArchiveBuilderTransform(vod);
                transformReplacer.replaceDexExternalLibMerge(vod);
                transformReplacer.replaceDexMerge(vod);
                transformReplacer.replaceDexTransform(appVariantContext, vod);
                transformReplacer.replaceShrinkResourcesTransform();
                transformReplacer.replaceMergeJavaResourcesTransform(appVariantContext, vod);
                transformReplacer.repalaceSomeInstantTransform(vod);
                if (atlasExtension.getTBuildConfig().isIncremental()) {
                    InstantRunPatchingPolicy patchingPolicy = variantScope.getInstantRunBuildContext().getPatchingPolicy();
                    BaseVariantOutputImpl variantOutput = (BaseVariantOutputImpl) vod;
                    ApkData data = ApkDataUtils.get(variantOutput);
                    AtlasDependencyTree atlasDependencyTree = AtlasBuildContext.androidDependencyTrees.get(variantScope.getFullVariantName());
                // 
                }
            }
            // Boolean includeCompileClasspath =
            // appVariantContext.getScope().getVariantConfiguration()
            // .getJavaCompileOptions()
            // .getAnnotationProcessorOptions()
            // .getIncludeCompileClasspath();
            // appVariantContext.getVariantData().javaCompilerTask.doFirst(task -> {
            // JavaCompile compile = (JavaCompile) task;
            // Set<File> mainDexFiles = new MainFilesCollection(appVariantContext.getVariantName()).getFiles();
            // FileCollection mainFiles = appVariantContext.getProject().files(mainDexFiles);
            // FileCollection files = appVariantContext.getScope().getArtifactFileCollection(ANNOTATION_PROCESSOR, ALL, JAR);
            // FileCollection bootFiles = appVariantContext.getProject().files(appVariantContext.getScope().getGlobalScope().getAndroidBuilder().getBootClasspath(false));
            // mainFiles = mainFiles.plus(bootFiles);
            // FileCollection fileCollection = compile.getClasspath();
            // File kotlinClasses = null;
            // for (File file : fileCollection) {
            // if (file.getAbsolutePath().contains("kotlin-classes")) {
            // mainFiles = mainFiles.plus(appVariantContext.getProject().files(file));
            // kotlinClasses = file;
            // break;
            // }
            // }
            // compile.setClasspath(mainFiles);
            // if (Boolean.TRUE.equals(includeCompileClasspath)) {
            // compile.getOptions().setAnnotationProcessorPath(files.plus(mainFiles));
            // }
            // });
            appVariantContext.getVariantData().javaCompilerTask.doLast(new Action<Task>() {

                @Override
                public void execute(Task task) {
                    JavaCompile compile = (JavaCompile) task;
                    AtlasBuildContext.atlasMainDexHelperMap.get(appVariantContext.getVariantName()).getInputDirs().add(compile.getDestinationDir());
                }
            });
            PackageAndroidArtifact packageAndroidArtifact = appVariantContext.getVariantData().getTaskByType(PackageAndroidArtifact.class);
            if (packageAndroidArtifact != null) {
                ReflectUtils.updateField(packageAndroidArtifact, "javaResourceFiles", new AbstractFileCollection() {

                    @Override
                    public String getDisplayName() {
                        return "java-merge-res.jar";
                    }

                    @Override
                    public Set<File> getFiles() {
                        if (AtlasBuildContext.atlasMainDexHelperMap.get(packageAndroidArtifact.getVariantName()).getMainJavaRes() == null) {
                            return Sets.newHashSet();
                        }
                        return Sets.newHashSet(AtlasBuildContext.atlasMainDexHelperMap.get(packageAndroidArtifact.getVariantName()).getMainJavaRes());
                    }
                });
            }
            TaskCollection<ExtractTryWithResourcesSupportJar> taskCollection = appVariantContext.getProject().getTasks().withType(ExtractTryWithResourcesSupportJar.class);
            for (ExtractTryWithResourcesSupportJar task : taskCollection) {
                task.doLast(new Action<Task>() {

                    @Override
                    public void execute(Task task) {
                        ConfigurableFileCollection fileCollection = variantScope.getTryWithResourceRuntimeSupportJar();
                        for (File file : fileCollection.getFiles()) {
                            if (file.exists()) {
                                AtlasBuildContext.atlasMainDexHelperMap.get(variantScope.getFullVariantName()).addMainDex(new BuildAtlasEnvTask.FileIdentity("runtime-deps-try-with-resources", file, false, false));
                                break;
                            }
                        }
                    }
                });
            }
        }
    });
}
Also used : TPatchDiffApkBuildTask(com.taobao.android.builder.tasks.tpatch.TPatchDiffApkBuildTask) AwbDataBindingMergeArtifactsTask(com.taobao.android.builder.tasks.app.databinding.AwbDataBindingMergeArtifactsTask) AwbDataBindingExportBuildInfoTask(com.taobao.android.builder.tasks.app.databinding.AwbDataBindingExportBuildInfoTask) PackageAwbsTask(com.taobao.android.builder.tasks.app.bundle.PackageAwbsTask) TransformTask(com.android.build.gradle.internal.pipeline.TransformTask) AwbDataBindingRenameTask(com.taobao.android.builder.tasks.app.databinding.AwbDataBindingRenameTask) PrepareAPTask(com.taobao.android.builder.tasks.PrepareAPTask) TPatchDiffResAPBuildTask(com.taobao.android.builder.tasks.tpatch.TPatchDiffResAPBuildTask) ProcessResAwbsTask(com.taobao.android.builder.tasks.app.bundle.ProcessResAwbsTask) TPatchTask(com.taobao.android.builder.tasks.tpatch.TPatchTask) BuildAtlasEnvTask(com.taobao.android.builder.tasks.app.BuildAtlasEnvTask) AbstractTask(org.gradle.api.internal.AbstractTask) PreparePackageIdsTask(com.taobao.android.builder.tasks.app.prepare.PreparePackageIdsTask) PrepareAaptTask(com.taobao.android.builder.tasks.app.prepare.PrepareAaptTask) Task(org.gradle.api.Task) JavacAwbsTask(com.taobao.android.builder.tasks.app.bundle.JavacAwbsTask) StandardizeLibManifestTask(com.taobao.android.builder.tasks.app.manifest.StandardizeLibManifestTask) PrepareBundleInfoTask(com.taobao.android.builder.tasks.app.prepare.PrepareBundleInfoTask) DiffBundleInfoTask(com.taobao.android.builder.tasks.tpatch.DiffBundleInfoTask) AwbDataBindingExportBuildInfoTask(com.taobao.android.builder.tasks.app.databinding.AwbDataBindingExportBuildInfoTask) ApplicationVariant(com.android.build.gradle.api.ApplicationVariant) TPatchTask(com.taobao.android.builder.tasks.tpatch.TPatchTask) ConfigurableFileCollection(org.gradle.api.file.ConfigurableFileCollection) UncheckedIOException(java.io.UncheckedIOException) ExtractTryWithResourcesSupportJar(com.android.build.gradle.internal.tasks.ExtractTryWithResourcesSupportJar) BaseVariantOutput(com.android.build.gradle.api.BaseVariantOutput) StandardizeLibManifestTask(com.taobao.android.builder.tasks.app.manifest.StandardizeLibManifestTask) MtlTaskContext(com.taobao.android.builder.tasks.manager.MtlTaskContext) PrepareAPTask(com.taobao.android.builder.tasks.PrepareAPTask) ImmutableList(com.google.common.collect.ImmutableList) TPatchDiffResAPBuildTask(com.taobao.android.builder.tasks.tpatch.TPatchDiffResAPBuildTask) BuildAtlasEnvTask(com.taobao.android.builder.tasks.app.BuildAtlasEnvTask) MtlTransformContext(com.taobao.android.builder.tasks.manager.transform.MtlTransformContext) AtlasMainDexHelper(com.taobao.android.builder.AtlasMainDexHelper) InstantRunPatchingPolicy(com.android.build.gradle.internal.incremental.InstantRunPatchingPolicy) AbstractFileCollection(org.gradle.api.internal.file.AbstractFileCollection) TaskCollection(org.gradle.api.tasks.TaskCollection) AbstractFileCollection(org.gradle.api.internal.file.AbstractFileCollection) ConfigurableFileCollection(org.gradle.api.file.ConfigurableFileCollection) FileCollection(org.gradle.api.file.FileCollection) AwbDataBindingRenameTask(com.taobao.android.builder.tasks.app.databinding.AwbDataBindingRenameTask) File(java.io.File) JavaCompile(org.gradle.api.tasks.compile.JavaCompile) Action(org.gradle.api.Action) PrepareBundleInfoTask(com.taobao.android.builder.tasks.app.prepare.PrepareBundleInfoTask) AwbDataBindingMergeArtifactsTask(com.taobao.android.builder.tasks.app.databinding.AwbDataBindingMergeArtifactsTask) TaskContainerAdaptor(com.android.build.gradle.internal.TaskContainerAdaptor) TPatchDiffApkBuildTask(com.taobao.android.builder.tasks.tpatch.TPatchDiffApkBuildTask) MtlTransformInjector(com.taobao.android.builder.tasks.manager.transform.MtlTransformInjector) TransformReplacer(com.taobao.android.builder.tasks.transform.TransformReplacer) PackageAwbsTask(com.taobao.android.builder.tasks.app.bundle.PackageAwbsTask) DiffBundleInfoTask(com.taobao.android.builder.tasks.tpatch.DiffBundleInfoTask) Supplier(com.google.common.base.Supplier) ApkData(com.android.ide.common.build.ApkData) JavacAwbsTask(com.taobao.android.builder.tasks.app.bundle.JavacAwbsTask) VariantScope(com.android.build.gradle.internal.scope.VariantScope) BaseVariantOutputImpl(com.android.build.gradle.internal.api.BaseVariantOutputImpl) AtlasBundleInstantApp(com.taobao.android.builder.tasks.instantapp.AtlasBundleInstantApp) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) MtlTaskInjector(com.taobao.android.builder.tasks.manager.MtlTaskInjector) AtlasDependencyTree(com.taobao.android.builder.dependency.AtlasDependencyTree) TaskCollection(org.gradle.api.tasks.TaskCollection) TaskFactory(com.android.build.gradle.internal.TaskFactory) PreparePackageIdsTask(com.taobao.android.builder.tasks.app.prepare.PreparePackageIdsTask) PrepareAaptTask(com.taobao.android.builder.tasks.app.prepare.PrepareAaptTask) ProcessResAwbsTask(com.taobao.android.builder.tasks.app.bundle.ProcessResAwbsTask) AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext)

Example 73 with Task

use of org.gradle.api.Task in project atlas by alibaba.

the class BuildAtlasEnvTask method generate.

@TaskAction
void generate() throws TransformException {
    Set<ResolvedArtifactResult> compileArtifacts = compileManifests.getArtifacts();
    Set<ResolvedArtifactResult> jarArtifacts = compileJars.getArtifacts();
    Set<ResolvedArtifactResult> nativeLibsArtifacts = nativeLibs.getArtifacts();
    Set<ResolvedArtifactResult> javaResourcesArtifacts = javaResources.getArtifacts();
    Set<ResolvedArtifactResult> androidRes = res.getArtifacts();
    Set<ResolvedArtifactResult> androidAssets = assets.getArtifacts();
    Set<ResolvedArtifactResult> androidRnames = symbolListWithPackageNames.getArtifacts();
    AtlasDependencyTree androidDependencyTree = AtlasBuildContext.androidDependencyTrees.get(getVariantName());
    List<AwbBundle> bundles = new ArrayList<>();
    bundles.add(androidDependencyTree.getMainBundle());
    bundles.addAll(androidDependencyTree.getAwbBundles());
    // this is no used ,if used in future add to transform!
    Set<ResolvedArtifactResult> nativeLibsArtifacts2 = nativeLibs2.getArtifacts();
    nativeLibsArtifacts.addAll(nativeLibsArtifacts2);
    AtlasBuildContext.localLibs = nativeLibs2.getArtifactFiles().getFiles();
    for (ResolvedArtifactResult resolvedArtifactResult : jarArtifacts) {
        ComponentIdentifier componentIdentifier = resolvedArtifactResult.getId().getComponentIdentifier();
        if (componentIdentifier instanceof DefaultModuleComponentIdentifier) {
            allJars.add(new FileIdentity(((DefaultModuleComponentIdentifier) componentIdentifier).getGroup() + ":" + ((DefaultModuleComponentIdentifier) componentIdentifier).getModule(), resolvedArtifactResult.getFile(), resolvedArtifactResult.getId().getDisplayName().startsWith("classes.jar") ? false : true, false));
        } else if (componentIdentifier instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allJars.add(new FileIdentity(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult.getFile(), resolvedArtifactResult.getId().getDisplayName().startsWith("classes.jar") ? false : true, true));
        } else if (componentIdentifier instanceof OpaqueComponentArtifactIdentifier) {
            if (resolvedArtifactResult.getFile().getAbsolutePath().contains("renderscript"))
                appLocalJars.add(new FileIdentity(componentIdentifier.getDisplayName(), resolvedArtifactResult.getFile(), true, false));
        }
    }
    for (ResolvedArtifactResult resolvedArtifactResult : compileArtifacts) {
        if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultModuleComponentIdentifier) {
            allManifests.put(((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getGroup() + ":" + ((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getModule(), resolvedArtifactResult.getFile());
        } else if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allManifests.put(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult.getFile());
        }
    }
    for (ResolvedArtifactResult resolvedArtifactResult : nativeLibsArtifacts) {
        if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultModuleComponentIdentifier) {
            allSolibs.put(((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getGroup() + ":" + ((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getModule(), resolvedArtifactResult.getFile());
        } else if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allSolibs.put(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult.getFile());
        }
    }
    for (ResolvedArtifactResult resolvedArtifactResult : javaResourcesArtifacts) {
        if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultModuleComponentIdentifier) {
            allJavaRes.put(((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getGroup() + ":" + ((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getModule(), resolvedArtifactResult.getFile());
        } else if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allJavaRes.put(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult.getFile());
        }
    }
    for (ResolvedArtifactResult resolvedArtifactResult : androidRes) {
        if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultModuleComponentIdentifier) {
            allAndroidRes.put(((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getGroup() + ":" + ((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getModule(), resolvedArtifactResult);
        } else if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allAndroidRes.put(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult);
        }
    }
    for (ResolvedArtifactResult resolvedArtifactResult : androidAssets) {
        if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultModuleComponentIdentifier) {
            allAndroidAssets.put(((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getGroup() + ":" + ((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getModule(), resolvedArtifactResult);
        } else if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allAndroidAssets.put(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult);
        }
    }
    for (ResolvedArtifactResult resolvedArtifactResult : androidRnames) {
        if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultModuleComponentIdentifier) {
            allAndroidRnames.put(((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getGroup() + ":" + ((DefaultModuleComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getModule(), resolvedArtifactResult);
        } else if (resolvedArtifactResult.getId().getComponentIdentifier() instanceof DefaultProjectComponentIdentifier) {
            String projectPath = ((DefaultProjectComponentIdentifier) resolvedArtifactResult.getId().getComponentIdentifier()).getProjectPath();
            allAndroidRnames.put(projectPath.substring(projectPath.lastIndexOf(":") + 1), resolvedArtifactResult);
        }
    }
    // app localJar is not support , this may course duplicate localjars
    appLocalJars.stream().forEach(fileIdentity -> AtlasBuildContext.atlasMainDexHelperMap.get(getVariantName()).addMainDex(fileIdentity));
    AtlasDependencyTree atlasDependencyTree = AtlasBuildContext.androidDependencyTrees.get(getVariantName());
    List<AndroidLibrary> androidLibraries = atlasDependencyTree.getAllAndroidLibrarys();
    androidLibraries.stream().forEach(androidLibrary -> {
        if (androidLibrary instanceof AtlasAndroidLibraryImpl) {
            AndroidDependency fakeAndroidLibrary = ((AtlasAndroidLibraryImpl) androidLibrary).getAndroidLibrary();
            File id = null;
            if ((id = allManifests.get(androidLibrary.getResolvedCoordinates().getGroupId() + ":" + androidLibrary.getResolvedCoordinates().getArtifactId())) == null) {
                id = allManifests.get(androidLibrary.getResolvedCoordinates().toString().split(":")[1]);
            }
            if (id == null) {
                getLogger().warn("id == null---------------------" + androidLibrary.getResolvedCoordinates().getGroupId() + ":" + androidLibrary.getResolvedCoordinates().getArtifactId());
                throw new GradleException("excute failed! ");
            }
            ReflectUtils.updateField(fakeAndroidLibrary, "extractedFolder", id.getParentFile());
            ReflectUtils.updateField(fakeAndroidLibrary, "jarsRootFolder", id.getParentFile());
            ((AtlasAndroidLibraryImpl) androidLibrary).setAndroidLibrary(AndroidDependency.createExplodedAarLibrary(null, androidLibrary.getResolvedCoordinates(), androidLibrary.getName(), ((AtlasAndroidLibraryImpl) androidLibrary).getPath(), id.getParentFile()));
            appVariantContext.manifestMap.put(androidLibrary.getManifest().getAbsolutePath(), appVariantContext.getModifyManifest(androidLibrary));
        }
    });
    List<AndroidLibrary> mainDexAndroidLibraries = atlasDependencyTree.getMainBundle().getAndroidLibraries();
    List<JavaLibrary> mainDexJarLibraries = atlasDependencyTree.getMainBundle().getJavaLibraries();
    List<SoLibrary> mainSoLibraries = atlasDependencyTree.getMainBundle().getSoLibraries();
    for (AndroidLibrary androidLibrary : mainDexAndroidLibraries) {
        String name = androidLibrary.getResolvedCoordinates().getGroupId() + ":" + androidLibrary.getResolvedCoordinates().getArtifactId();
        String moudleName = androidLibrary.getResolvedCoordinates().toString().split(":")[1];
        fillMainManifest(name, moudleName);
        fillMainJar(name, moudleName);
        fillAllJavaRes(name, moudleName);
        fillMainSolibs(name, moudleName);
    }
    for (JavaLibrary jarLibrary : mainDexJarLibraries) {
        String moudleName = jarLibrary.getName().split(":")[1];
        String name = jarLibrary.getResolvedCoordinates().getGroupId() + ":" + jarLibrary.getResolvedCoordinates().getArtifactId();
        fillMainJar(name, moudleName);
        fillAllJavaRes(name, moudleName);
    }
    for (SoLibrary soLibrary : mainSoLibraries) {
        String name = soLibrary.getResolvedCoordinates().getGroupId() + ":" + soLibrary.getResolvedCoordinates().getArtifactId();
        String moudleName = soLibrary.getResolvedCoordinates().toString().split(":")[1];
        fillMainSolibs(name, moudleName);
    }
    for (AwbBundle awbBundle : atlasDependencyTree.getAwbBundles()) {
        List<AndroidLibrary> awbAndroidLibraries = awbBundle.getAndroidLibraries();
        List<JavaLibrary> awbJarLibraries = awbBundle.getJavaLibraries();
        List<SoLibrary> awbSoLibraries = awbBundle.getSoLibraries();
        for (AndroidLibrary androidLibrary : awbAndroidLibraries) {
            String name = androidLibrary.getResolvedCoordinates().getGroupId() + ":" + androidLibrary.getResolvedCoordinates().getArtifactId();
            String moudleName = androidLibrary.getResolvedCoordinates().toString().split(":")[1];
            fillAwbManifest(name, moudleName, awbBundle);
            fillAwbJar(name, moudleName, awbBundle);
            fillAwbAllJavaRes(name, moudleName, awbBundle);
            fillAwbSolibs(name, moudleName, awbBundle);
            fillAwbAndroidRes(name, moudleName, awbBundle);
            fillAwbAndroidAssets(name, moudleName, awbBundle);
            fillAwbAndroidRs(name, moudleName, awbBundle);
        }
        for (JavaLibrary jarLibrary : awbJarLibraries) {
            String moudleName = jarLibrary.getName().split(":")[1];
            String name = jarLibrary.getResolvedCoordinates().getGroupId() + ":" + jarLibrary.getResolvedCoordinates().getArtifactId();
            fillAwbJar(name, moudleName, awbBundle);
        }
        for (SoLibrary soLibrary : awbSoLibraries) {
            String name = soLibrary.getResolvedCoordinates().getGroupId() + ":" + soLibrary.getResolvedCoordinates().getArtifactId();
            String moudleName = soLibrary.getResolvedCoordinates().toString().split(":")[1];
            fillAwbSolibs(name, moudleName, awbBundle);
        }
        String name = awbBundle.getResolvedCoordinates().getGroupId() + ":" + awbBundle.getResolvedCoordinates().getArtifactId();
        String moudleName = awbBundle.getResolvedCoordinates().toString().split(":")[1];
        fillAwbManifest(name, moudleName, awbBundle);
        fillAwbJar(name, moudleName, awbBundle);
        fillAwbAllJavaRes(name, moudleName, awbBundle);
        fillAwbSolibs(name, moudleName, awbBundle);
        fillAwbAndroidRes(name, moudleName, awbBundle);
        fillAwbAndroidAssets(name, moudleName, awbBundle);
        fillAwbAndroidRs(name, moudleName, awbBundle);
    }
    MergeResources mergeResources = appVariantContext.getScope().getMergeResourcesTask().get(new TaskContainerAdaptor(getProject().getTasks()));
    try {
        // mergeresources
        Field field = MergeResources.class.getDeclaredField("libraries");
        field.setAccessible(true);
        field.set(mergeResources, new MainArtifactsCollection((ArtifactCollection) field.get(mergeResources), getProject(), mergeResources.getVariantName()));
        appVariantOutputContext.getAwbTransformMap().values().stream().forEach(awbTransform -> {
            if (isMBundle(appVariantContext, awbTransform.getAwbBundle())) {
                try {
                    awbTransform.getAwbBundle().isMBundle = true;
                    awbTransform.getAwbBundle().bundleInfo.setIsMBundle(true);
                    field.set(mergeResources, new AppendMainArtifactsCollection(appVariantContext.getProject(), (ArtifactCollection) field.get(mergeResources), awbTransform.getAwbBundle(), ANDROID_RES));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        });
        mergeResources.doLast(task -> FileUtils.listFiles(((MergeResources) task).getOutputDir(), new String[] { "xml" }, true).parallelStream().forEach(file -> {
            if (!AppendMainArtifactsCollection.bundle2Map.containsKey(file.getName())) {
                return;
            }
            List<String> lines = null;
            List<String> newLines = new ArrayList<>();
            try {
                lines = FileUtils.readLines(file);
                lines.forEach(s -> {
                    String s1 = s;
                    if (s.contains("http://schemas.android.com/apk/res/" + AppendMainArtifactsCollection.bundle2Map.get(file.getName()))) {
                        s1 = s.replace("http://schemas.android.com/apk/res/" + AppendMainArtifactsCollection.bundle2Map.get(file.getName()), "http://schemas.android.com/apk/res-auto");
                    }
                    newLines.add(s1);
                });
                FileUtils.writeLines(file, newLines);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }));
        // mergeSourcesSets
        MergeSourceSetFolders mergeSourceSetFolders = appVariantContext.getScope().getMergeAssetsTask().get(new TaskContainerAdaptor(getProject().getTasks()));
        Field assetsField = MergeSourceSetFolders.class.getDeclaredField("libraries");
        assetsField.setAccessible(true);
        assetsField.set(mergeSourceSetFolders, new MainArtifactsCollection((ArtifactCollection) assetsField.get(mergeSourceSetFolders), getProject(), mergeSourceSetFolders.getVariantName()));
        appVariantOutputContext.getAwbTransformMap().values().stream().forEach(awbTransform -> {
            if (isMBundle(appVariantContext, awbTransform.getAwbBundle())) {
                try {
                    awbTransform.getAwbBundle().isMBundle = true;
                    awbTransform.getAwbBundle().bundleInfo.setIsMBundle(true);
                    assetsField.set(mergeSourceSetFolders, new AppendMainArtifactsCollection(appVariantContext.getProject(), (ArtifactCollection) assetsField.get(mergeSourceSetFolders), awbTransform.getAwbBundle(), ASSETS));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        });
        AtlasBuildContext.atlasMainDexHelperMap.get(getVariantName()).getMainSoFiles().put(appVariantContext.getScope().getMergeNativeLibsOutputDir().getAbsolutePath(), true);
    } catch (Exception e) {
    }
    // process resources
    ProcessAndroidResources processAndroidResources = appVariantContext.getScope().getProcessResourcesTask().get(new TaskContainerAdaptor(appVariantContext.getProject().getTasks()));
    FileCollection fileCollection = processAndroidResources.getSymbolListsWithPackageNames();
    Set<String> filesNames = new HashSet<>();
    for (String fileName : AtlasBuildContext.atlasMainDexHelperMap.get(getVariantName()).getMainManifestFiles().keySet()) {
        filesNames.add(fileName.substring(fileName.lastIndexOf(File.separatorChar) + 1));
    }
    FileCollection updateFileCollection = fileCollection.filter(element -> filesNames.contains(element.getParentFile().getParentFile().getName()));
    ReflectUtils.updateField(processAndroidResources, "symbolListsWithPackageNames", updateFileCollection);
    appVariantOutputContext.getAwbTransformMap().values().stream().forEach(awbTransform -> {
        if (isMBundle(appVariantContext, awbTransform.getAwbBundle())) {
            awbTransform.getAwbBundle().isMBundle = true;
            awbTransform.getAwbBundle().bundleInfo.setIsMBundle(true);
            FileCollection fc = new AppendMainArtifactsCollection(appVariantContext.getProject(), processAndroidResources.getSymbolListsWithPackageNames(), awbTransform.getAwbBundle(), SYMBOL_LIST_WITH_PACKAGE_NAME).getArtifactFiles();
            ReflectUtils.updateField(processAndroidResources, "symbolListsWithPackageNames", fc);
        }
    });
    appVariantContext.processResAwbsTask.mainDexSymbolFileCollection = updateFileCollection;
    // FileCollection fs = appVariantContext.getScope().getArtifactFileCollection(AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH,AndroidArtifacts.ArtifactScope.ALL,AndroidArtifacts.ArtifactType.CLASSES);
    // fs.getFiles().forEach(new Consumer<File>() {
    // @Override
    // public void accept(File file) {
    // if (file.exists()){
    // try {
    // JarFile jarFile = new JarFile(file);
    // Enumeration<JarEntry>enumeration = jarFile.entries();
    // while (enumeration.hasMoreElements()){
    // JarEntry jarEntry = enumeration.nextElement();
    // if (jarEntry.getName().endsWith(".class")){
    // ClassReader classReader = new ClassReader(jarFile.getInputStream(jarEntry));
    // String[]ss = classReader.getInterfaces();
    // if (ss!= null){
    // for (String s:ss){
    // if (s.contains("IExternalComponentGetter")||s.contains("IExternalComponentGetter.class")){
    // System.out.println("IExternalComponentGetter:"+jarEntry.getName());
    // }else if (s.contains("IExternalModuleGetter")||s.contains("IExternalModuleGetter.class")){
    // System.out.println("IExternalModuleGetter:"+jarEntry.getName());
    // }
    // }
    // }
    // 
    // }
    // }
    // } catch (IOException e) {
    // e.printStackTrace();
    // }
    // }
    // }
    // });
    allManifests.clear();
    allJavaRes.clear();
    allSolibs.clear();
    allJars.clear();
    allAndroidAssets.clear();
    allAndroidRes.clear();
// 
// try {
// duplicateClazzNote();
// } catch (IOException e) {
// e.printStackTrace();
// }
}
Also used : IOFileFilter(org.apache.commons.io.filefilter.IOFileFilter) AbstractFileCollection(org.gradle.api.internal.file.AbstractFileCollection) ProjectComponentIdentifier(org.gradle.api.artifacts.component.ProjectComponentIdentifier) ResourceType(com.android.resources.ResourceType) JarFile(java.util.jar.JarFile) MergeSourceSetFolders(com.android.build.gradle.tasks.MergeSourceSetFolders) AndroidDependency(com.android.builder.dependency.level2.AndroidDependency) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction) AtlasDependencyGraph(com.android.build.gradle.internal.ide.AtlasDependencyGraph) AtlasAndroidArtifacts(com.android.build.gradle.internal.publishing.AtlasAndroidArtifacts) com.android.ide.common.res2(com.android.ide.common.res2) AtlasDependencyTree(com.taobao.android.builder.dependency.AtlasDependencyTree) Task(org.gradle.api.Task) RUNTIME_CLASSPATH(com.android.build.gradle.internal.publishing.AndroidArtifacts.ConsumedConfigType.RUNTIME_CLASSPATH) JavaLibrary(com.android.builder.model.JavaLibrary) AtlasBuildContext(com.taobao.android.builder.AtlasBuildContext) DefaultModuleComponentIdentifier(org.gradle.internal.component.external.model.DefaultModuleComponentIdentifier) com.google.common.collect(com.google.common.collect) TrueFileFilter(org.apache.commons.io.filefilter.TrueFileFilter) AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext) TransformException(com.android.build.api.transform.TransformException) Project(org.gradle.api.Project) Nullable(com.android.annotations.Nullable) SoLibrary(com.taobao.android.builder.dependency.model.SoLibrary) AndroidArtifacts(com.android.build.gradle.internal.publishing.AndroidArtifacts) ALL(com.android.build.gradle.internal.publishing.AndroidArtifacts.ArtifactScope.ALL) ArtifactCollection(org.gradle.api.artifacts.ArtifactCollection) COMPILE_CLASSPATH(com.android.build.gradle.internal.publishing.AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH) AppVariantOutputContext(com.android.build.gradle.internal.api.AppVariantOutputContext) Spec(org.gradle.api.specs.Spec) ClassReader(org.objectweb.asm.ClassReader) NonNull(com.android.annotations.NonNull) FalseFileFilter(org.apache.commons.io.filefilter.FalseFileFilter) DocumentBuilderFactory(javax.xml.parsers.DocumentBuilderFactory) ResolvedArtifactResult(org.gradle.api.artifacts.result.ResolvedArtifactResult) NotNull(org.jetbrains.annotations.NotNull) AppendMainArtifactsCollection(com.taobao.android.builder.tasks.app.merge.AppendMainArtifactsCollection) MergeManifests(com.android.build.gradle.tasks.MergeManifests) FilenameFilter(java.io.FilenameFilter) BaseTask(com.android.build.gradle.internal.tasks.BaseTask) java.util(java.util) MainArtifactsCollection(com.taobao.android.builder.tasks.app.merge.MainArtifactsCollection) OpaqueComponentArtifactIdentifier(org.gradle.internal.component.local.model.OpaqueComponentArtifactIdentifier) BaseVariantOutput(com.android.build.gradle.api.BaseVariantOutput) AndroidLibrary(com.android.builder.model.AndroidLibrary) FileCollection(org.gradle.api.file.FileCollection) ComponentIdentifier(org.gradle.api.artifacts.component.ComponentIdentifier) JarEntry(java.util.jar.JarEntry) ANNOTATION_PROCESSOR(com.android.build.gradle.internal.publishing.AndroidArtifacts.ConsumedConfigType.ANNOTATION_PROCESSOR) AwbBundle(com.taobao.android.builder.dependency.model.AwbBundle) JavaCompile(org.gradle.api.tasks.compile.JavaCompile) ReflectUtils(com.taobao.android.builder.tools.ReflectUtils) Action(org.gradle.api.Action) ProjectDependency(org.gradle.api.artifacts.ProjectDependency) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) ProcessAndroidResources(com.android.build.gradle.tasks.ProcessAndroidResources) Field(java.lang.reflect.Field) AtlasAndroidLibraryImpl(com.android.build.gradle.internal.ide.AtlasAndroidLibraryImpl) File(java.io.File) Consumer(java.util.function.Consumer) MainFilesCollection(com.taobao.android.builder.tasks.app.merge.MainFilesCollection) GradleException(org.gradle.api.GradleException) DefaultProjectComponentIdentifier(org.gradle.internal.component.local.model.DefaultProjectComponentIdentifier) ArtifactType(com.android.build.gradle.internal.publishing.AndroidArtifacts.ArtifactType) Preconditions(com.google.common.base.Preconditions) AwbTransform(com.android.build.gradle.internal.api.AwbTransform) TaskContainerAdaptor(com.android.build.gradle.internal.TaskContainerAdaptor) MergeResources(com.android.build.gradle.tasks.MergeResources) AppendMainArtifactsCollection(com.taobao.android.builder.tasks.app.merge.AppendMainArtifactsCollection) MainArtifactsCollection(com.taobao.android.builder.tasks.app.merge.MainArtifactsCollection) ProjectComponentIdentifier(org.gradle.api.artifacts.component.ProjectComponentIdentifier) DefaultModuleComponentIdentifier(org.gradle.internal.component.external.model.DefaultModuleComponentIdentifier) ComponentIdentifier(org.gradle.api.artifacts.component.ComponentIdentifier) DefaultProjectComponentIdentifier(org.gradle.internal.component.local.model.DefaultProjectComponentIdentifier) AbstractFileCollection(org.gradle.api.internal.file.AbstractFileCollection) FileCollection(org.gradle.api.file.FileCollection) TaskContainerAdaptor(com.android.build.gradle.internal.TaskContainerAdaptor) Field(java.lang.reflect.Field) MergeResources(com.android.build.gradle.tasks.MergeResources) ArtifactCollection(org.gradle.api.artifacts.ArtifactCollection) AppendMainArtifactsCollection(com.taobao.android.builder.tasks.app.merge.AppendMainArtifactsCollection) ResolvedArtifactResult(org.gradle.api.artifacts.result.ResolvedArtifactResult) AwbBundle(com.taobao.android.builder.dependency.model.AwbBundle) DefaultModuleComponentIdentifier(org.gradle.internal.component.external.model.DefaultModuleComponentIdentifier) IOException(java.io.IOException) DefaultProjectComponentIdentifier(org.gradle.internal.component.local.model.DefaultProjectComponentIdentifier) SoLibrary(com.taobao.android.builder.dependency.model.SoLibrary) AtlasDependencyTree(com.taobao.android.builder.dependency.AtlasDependencyTree) TransformException(com.android.build.api.transform.TransformException) IOException(java.io.IOException) GradleException(org.gradle.api.GradleException) MergeSourceSetFolders(com.android.build.gradle.tasks.MergeSourceSetFolders) AtlasAndroidLibraryImpl(com.android.build.gradle.internal.ide.AtlasAndroidLibraryImpl) AndroidDependency(com.android.builder.dependency.level2.AndroidDependency) ProcessAndroidResources(com.android.build.gradle.tasks.ProcessAndroidResources) JavaLibrary(com.android.builder.model.JavaLibrary) AndroidLibrary(com.android.builder.model.AndroidLibrary) GradleException(org.gradle.api.GradleException) OpaqueComponentArtifactIdentifier(org.gradle.internal.component.local.model.OpaqueComponentArtifactIdentifier) JarFile(java.util.jar.JarFile) File(java.io.File) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction)

Example 74 with Task

use of org.gradle.api.Task in project atlas by alibaba.

the class MergeResAwbsConfigAction method execute.

@Override
public void execute(MtlParallelTask parallelTask) {
    super.execute(parallelTask);
    AtlasDependencyTree atlasDependencyTree = AtlasBuildContext.androidDependencyTrees.get(parallelTask.getVariantName());
    if (null == atlasDependencyTree) {
        return;
    }
    List<DefaultTask> tasks = new ArrayList<DefaultTask>();
    for (final AwbBundle awbBundle : atlasDependencyTree.getAwbBundles()) {
        if (awbBundle.isMBundle) {
            continue;
        }
        MergeAwbResource.MergeAwbResourceConfigAction mergeAwbResourceConfigAction = new MergeAwbResource.MergeAwbResourceConfigAction(appVariantContext, baseVariantOutput, awbBundle);
        final MergeAwbResource mergeTask = TaskCreater.create(appVariantContext.getProject(), mergeAwbResourceConfigAction.getName(), mergeAwbResourceConfigAction.getType());
        // mergeTask.getOutputs().cacheIf(new Spec<Task>() {
        // @Override
        // public boolean isSatisfiedBy(Task element) {
        // return false;
        // }
        // });
        mergeTask.setBlameLogFolder(appVariantContext.getAwbBlameLogFolder(awbBundle));
        mergeAwbResourceConfigAction.execute(mergeTask);
        tasks.add(mergeTask);
        mergeTask.doLast(new Action<Task>() {

            @Override
            public void execute(Task task) {
                File publicRes = new File(awbBundle.getAndroidLibrary().getResFolder(), "values/public.xml");
                if (publicRes.exists()) {
                    try {
                        FileUtils.copyFile(publicRes, new File(mergeTask.getOutputDir(), "values/public.xml"));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
    parallelTask.parallelTask = tasks;
    parallelTask.uniqueTaskName = getName();
    parallelTask.concurrent = true;
}
Also used : MtlParallelTask(com.taobao.android.builder.tasks.manager.MtlParallelTask) Task(org.gradle.api.Task) DefaultTask(org.gradle.api.DefaultTask) ArrayList(java.util.ArrayList) IOException(java.io.IOException) AtlasDependencyTree(com.taobao.android.builder.dependency.AtlasDependencyTree) MergeAwbResource(com.taobao.android.builder.tasks.app.merge.bundle.MergeAwbResource) DefaultTask(org.gradle.api.DefaultTask) AwbBundle(com.taobao.android.builder.dependency.model.AwbBundle) File(java.io.File)

Example 75 with Task

use of org.gradle.api.Task in project atlas by alibaba.

the class FirstApkAction method execute.

@Override
public void execute(Task task) {
    assert task instanceof PackageApplication;
    PackageApplication packageApplication = (PackageApplication) task;
    if (packageApplication.getName().startsWith("packageInstantRunResources")) {
        return;
    }
    File bundleInfoFile = new File(appVariantOutputContext.getScope().getGlobalScope().getOutputsDir(), "bundleInfo-" + appVariantOutputContext.getVariantContext().getVariantConfiguration().getVersionName() + ".json");
    File nativeInfoFile = new File(appVariantOutputContext.getScope().getGlobalScope().getOutputsDir(), "nativeInfo-" + appVariantOutputContext.getVariantContext().getVariantConfiguration().getVersionName() + ".json");
    File resOutBaseNameFile = new File(packageApplication.getResourceFiles().getSingleFile(), FN_RES_BASE + RES_QUALIFIER_SEP + appVariantOutputContext.getVariantContext().getVariantName() + SdkConstants.DOT_RES);
    File[] dexs = null;
    if (packageApplication.getDexFolders().getFiles().size() == 0) {
        dexs = appVariantOutputContext.getDexMergeFolder().listFiles(pathname -> pathname.getName().equals("classes.dex"));
        ReflectUtils.updateField(packageApplication, "dexFolders", appVariantOutputContext.getVariantContext().getProject().files(appVariantOutputContext.getDexMergeFolder()));
    } else {
        dexs = packageApplication.getDexFolders().getSingleFile().listFiles(pathname -> pathname.getName().equals("classes.dex"));
    }
    if (dexs != null && dexs.length == 1) {
        File androidManifest = null;
        if (appVariantOutputContext.getApkData().getFilterName() == null) {
            androidManifest = com.android.utils.FileUtils.join(appVariantOutputContext.getScope().getOutput(TaskOutputHolder.TaskOutputType.MERGED_MANIFESTS).getSingleFile(), "AndroidManifest.xml");
        } else {
            androidManifest = com.android.utils.FileUtils.join(appVariantOutputContext.getScope().getOutput(TaskOutputHolder.TaskOutputType.MERGED_MANIFESTS).getSingleFile(), appVariantOutputContext.getApkData().getDirName(), "AndroidManifest.xml");
        }
        File file = AtlasBuildContext.atlasApkProcessor.securitySignApk(dexs[0], androidManifest, appVariantOutputContext.getVariantContext().getBuildType(), false);
        if (file != null && file.exists()) {
            try {
                BetterZip.addFile(resOutBaseNameFile, "res/drawable/".concat(file.getName()), file);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    if (bundleInfoFile.exists()) {
        try {
            BetterZip.addFile(resOutBaseNameFile, "assets/".concat(bundleInfoFile.getName()), bundleInfoFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (nativeInfoFile.exists()) {
        try {
            BetterZip.addFile(resOutBaseNameFile, "assets/".concat(nativeInfoFile.getName()), nativeInfoFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Also used : ReflectUtils(com.taobao.android.builder.tools.ReflectUtils) PackageApplication(com.android.build.gradle.tasks.PackageApplication) Action(org.gradle.api.Action) SdkConstants(com.android.SdkConstants) FN_RES_BASE(com.android.SdkConstants.FN_RES_BASE) BetterZip(com.taobao.android.builder.tools.zip.BetterZip) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) File(java.io.File) Task(org.gradle.api.Task) AppVariantOutputContext(com.android.build.gradle.internal.api.AppVariantOutputContext) AtlasBuildContext(com.taobao.android.builder.AtlasBuildContext) TaskOutputHolder(com.android.build.gradle.internal.scope.TaskOutputHolder) RES_QUALIFIER_SEP(com.android.SdkConstants.RES_QUALIFIER_SEP) IOException(java.io.IOException) PackageApplication(com.android.build.gradle.tasks.PackageApplication) File(java.io.File)

Aggregations

Task (org.gradle.api.Task)222 Project (org.gradle.api.Project)66 File (java.io.File)54 Action (org.gradle.api.Action)31 ArrayList (java.util.ArrayList)27 Plugin (org.gradle.api.Plugin)27 Configuration (org.gradle.api.artifacts.Configuration)27 Test (org.junit.Test)23 List (java.util.List)22 TaskProvider (org.gradle.api.tasks.TaskProvider)22 DefaultTask (org.gradle.api.DefaultTask)21 IOException (java.io.IOException)20 Set (java.util.Set)18 SourceSet (org.gradle.api.tasks.SourceSet)18 Map (java.util.Map)17 GradleException (org.gradle.api.GradleException)17 FileCollection (org.gradle.api.file.FileCollection)16 Inject (javax.inject.Inject)15 JavaPlugin (org.gradle.api.plugins.JavaPlugin)15 LifecycleBasePlugin (org.gradle.language.base.plugins.LifecycleBasePlugin)15