Search in sources :

Example 6 with AppVariantContext

use of com.android.build.gradle.internal.api.AppVariantContext in project atlas by alibaba.

the class AtlasDexArchiveBuilderTransform method processAwbDexArchive.

private void processAwbDexArchive(TransformInvocation transformInvocation, List<QualifiedContent> listFiles) throws Exception {
    File awbApkOutputDir = ((AppVariantContext) variantContext).getAwbApkOutputDir();
    FileUtils.cleanOutputDir(awbApkOutputDir);
    AtlasDependencyTree atlasDependencyTree = AtlasBuildContext.androidDependencyTrees.get(variantContext.getScope().getFullVariantName());
    if (null == atlasDependencyTree) {
        return;
    }
    for (final AwbBundle awbBundle : atlasDependencyTree.getAwbBundles()) {
        Multimap<QualifiedContent, File> cacheableItems = HashMultimap.create();
        List<QualifiedContent> qualifiedContents = new LinkedList<>();
        long start = System.currentTimeMillis();
        // if some of our .jar input files exist, just reset the inputDir to null
        AwbTransform awbTransform = variantContext.getAppVariantOutputContext(ApkDataUtils.get(variantOutput)).getAwbTransformMap().get(awbBundle.getName());
        List<File> inputFiles = new ArrayList<File>();
        inputFiles.addAll(awbTransform.getInputFiles());
        inputFiles.addAll(awbTransform.getInputLibraries());
        if (null != awbTransform.getInputDirs()) {
            inputFiles.addAll(awbTransform.getInputDirs());
        }
        for (File file : inputFiles) {
            logger.warning(awbBundle.getName() + ":" + file.getAbsolutePath());
            boolean find = false;
            for (QualifiedContent content : listFiles) {
                if (content.getFile().getAbsolutePath().equals(file.getAbsolutePath())) {
                    find = true;
                    qualifiedContents.add(content);
                    break;
                }
            }
            if (!find) {
                if (file.isDirectory()) {
                    DirectoryInput directoryInput = TransformInputUtils.makeDirectoryInput(file, variantContext);
                    qualifiedContents.add(directoryInput);
                } else if (file.isFile()) {
                    JarInput jarInput = TransformInputUtils.makeJarInput(file, variantContext);
                    qualifiedContents.add(jarInput);
                }
            }
        }
        for (QualifiedContent qualifiedContent : qualifiedContents) {
            if (qualifiedContent.getFile().isDirectory()) {
                List<File> awbFiles = convertAwbToDexArchive(transformInvocation.getContext(), qualifiedContent, variantContext.getAwbDexAchiveOutput(awbBundle), transformInvocation.isIncremental(), true);
                cacheableItems.putAll(qualifiedContent, awbFiles);
            } else {
                List<File> jarFiles = processAwbJarInput(transformInvocation.getContext(), transformInvocation.isIncremental(), (JarInput) qualifiedContent, variantContext.getAwbDexAchiveOutput(awbBundle));
                cacheableItems.putAll(qualifiedContent, jarFiles);
            }
        }
        cacheItems.putAll(cacheableItems);
    }
}
Also used : AtlasDependencyTree(com.taobao.android.builder.dependency.AtlasDependencyTree) AwbTransform(com.android.build.gradle.internal.api.AwbTransform) AwbBundle(com.taobao.android.builder.dependency.model.AwbBundle) JarFile(java.util.jar.JarFile) AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext)

Example 7 with AppVariantContext

use of com.android.build.gradle.internal.api.AppVariantContext in project atlas by alibaba.

the class MtlBaseTaskAction method getAppVariantOutputContext.

protected AppVariantOutputContext getAppVariantOutputContext() {
    if (!(variantContext instanceof AppVariantContext)) {
        return null;
    }
    AppVariantContext appVariantContext = (AppVariantContext) variantContext;
    AppVariantOutputContext appVariantOutputContext = (AppVariantOutputContext) appVariantContext.getOutputContextMap().get(ApkDataUtils.get(baseVariantOutput).getFullName());
    if (null == appVariantOutputContext) {
        appVariantOutputContext = new AppVariantOutputContext(ApkDataUtils.get(baseVariantOutput).getFullName(), appVariantContext, ApkDataUtils.get(baseVariantOutput), baseVariantData);
        appVariantContext.getOutputContextMap().put(ApkDataUtils.get(baseVariantOutput).getFullName(), appVariantOutputContext);
    }
    return appVariantOutputContext;
}
Also used : AppVariantOutputContext(com.android.build.gradle.internal.api.AppVariantOutputContext) AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext)

Example 8 with AppVariantContext

use of com.android.build.gradle.internal.api.AppVariantContext in project atlas by alibaba.

the class PrepareBundleInfoTask method run.

@TaskAction
void run() throws ExecutionException, InterruptedException, IOException, DocumentException {
    AtlasBuildContext.awbBundleMap = collectBundleInfo(appVariantOutputContext);
    AppVariantContext appVariantContext = appVariantOutputContext.getVariantContext();
    BundleInfoUtils.setupAwbBundleInfos(appVariantContext);
    // Generate the bundle manifest file
    generateBundleListCfg(appVariantContext);
}
Also used : AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction)

Example 9 with AppVariantContext

use of com.android.build.gradle.internal.api.AppVariantContext in project atlas by alibaba.

the class DexByteCodeConverterHook method generateMainDexList.

private void generateMainDexList(File mainDexListFile) {
    Collection<File> inputs = AtlasBuildContext.atlasMainDexHelperMap.get(variantContext.getVariantName()).getAllMainDexJars();
    inputs.addAll(AtlasBuildContext.atlasMainDexHelperMap.get(variantContext.getVariantName()).getInputDirs());
    FastMultiDexer fastMultiDexer = (FastMultiDexer) AtlasBuildContext.androidBuilderMap.get(variantContext.getScope().getGlobalScope().getProject()).multiDexer;
    if (fastMultiDexer == null) {
        fastMultiDexer = new FastMultiDexer((AppVariantContext) variantContext);
    }
    Collection<File> files = null;
    try {
        files = fastMultiDexer.repackageJarList(inputs, mainDexListFile, variantContext.getScope().getVariantData().getName().toLowerCase().endsWith("release"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (files != null && files.size() > 0) {
        AtlasBuildContext.atlasMainDexHelperMap.get(variantContext.getVariantName()).addAllMainDexJars(files);
    }
}
Also used : FastMultiDexer(com.taobao.android.builder.tools.multidex.FastMultiDexer) JarFile(java.util.jar.JarFile) AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext)

Example 10 with AppVariantContext

use of com.android.build.gradle.internal.api.AppVariantContext in project atlas by alibaba.

the class AppVariantContextFactory method getAppVariantContext.

public AppVariantContext getAppVariantContext(Project project, ApplicationVariant applicationVariant) {
    AppVariantContext appVariantContext = appVariantContextMap.get(applicationVariant);
    if (null == appVariantContext) {
        appVariantContext = create(project, (ApplicationVariantImpl) applicationVariant);
        appVariantContextMap.put(applicationVariant, appVariantContext);
    }
    return appVariantContext;
}
Also used : ApplicationVariantImpl(com.android.build.gradle.internal.api.ApplicationVariantImpl) AppVariantContext(com.android.build.gradle.internal.api.AppVariantContext)

Aggregations

AppVariantContext (com.android.build.gradle.internal.api.AppVariantContext)10 AtlasDependencyTree (com.taobao.android.builder.dependency.AtlasDependencyTree)4 AwbBundle (com.taobao.android.builder.dependency.model.AwbBundle)4 JarFile (java.util.jar.JarFile)4 BaseVariantOutput (com.android.build.gradle.api.BaseVariantOutput)3 AppVariantOutputContext (com.android.build.gradle.internal.api.AppVariantOutputContext)3 AwbTransform (com.android.build.gradle.internal.api.AwbTransform)3 MtlBaseTaskAction (com.taobao.android.builder.tasks.manager.MtlBaseTaskAction)3 File (java.io.File)3 IOException (java.io.IOException)3 TaskAction (org.gradle.api.tasks.TaskAction)3 TaskContainerAdaptor (com.android.build.gradle.internal.TaskContainerAdaptor)2 BaseTask (com.android.build.gradle.internal.tasks.BaseTask)2 AtlasBuildContext (com.taobao.android.builder.AtlasBuildContext)2 Consumer (java.util.function.Consumer)2 FileUtils (org.apache.commons.io.FileUtils)2 Action (org.gradle.api.Action)2 Task (org.gradle.api.Task)2 FileCollection (org.gradle.api.file.FileCollection)2 AbstractFileCollection (org.gradle.api.internal.file.AbstractFileCollection)2