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