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);
}
}
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;
}
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);
}
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);
}
}
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;
}
Aggregations