From 610e989d9925e3a658e49520987cebf475009d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=83=D0=B3=D1=80=D0=BE=D0=B2=20=D0=94=D0=BC=D0=B8?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=B9=20=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 11 Oct 2023 17:32:32 +0300 Subject: [PATCH 1/6] fix for build task execute success --- .../src/main/groovy/com/kezong/fataar/FlavorArtifact.groovy | 3 +-- source/upload.gradle | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/source/src/main/groovy/com/kezong/fataar/FlavorArtifact.groovy b/source/src/main/groovy/com/kezong/fataar/FlavorArtifact.groovy index 50945c79..6cead330 100755 --- a/source/src/main/groovy/com/kezong/fataar/FlavorArtifact.groovy +++ b/source/src/main/groovy/com/kezong/fataar/FlavorArtifact.groovy @@ -58,8 +58,7 @@ class FlavorArtifact { } else { // try included builds ResolvedDependencyResult resolvedResult = configuration.incoming.resolutionResult.allDependencies.find { result -> if (result instanceof ResolvedDependencyResult && result.selected.selectionReason.compositeSubstitution) { - return result.requested.group == unResolvedArtifact.moduleGroup - && result.requested.module == unResolvedArtifact.moduleName + return result.requested.group == unResolvedArtifact.moduleGroup && result.requested.module == unResolvedArtifact.moduleName } return false } diff --git a/source/upload.gradle b/source/upload.gradle index 03cbfd67..8696836d 100644 --- a/source/upload.gradle +++ b/source/upload.gradle @@ -99,12 +99,12 @@ publishing { // The username and password we've fetched earlier credentials { - username ossrhUsername - password ossrhPassword + //username ossrhUsername + //password ossrhPassword } } } } signing { sign publishing.publications -} \ No newline at end of file +} From 6777cda6efcbb8d0eb575e6c5e4be58d47a53af7 Mon Sep 17 00:00:00 2001 From: Alexander Sitnikov Date: Fri, 2 Jun 2023 13:51:52 +0300 Subject: [PATCH 2/6] add support for AGP 8.0 --- README.md | 4 +- source/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../com/kezong/fataar/FatAarPlugin.groovy | 16 ++- .../com/kezong/fataar/VariantProcessor.groovy | 13 ++- .../com/kezong/fataar/FatAarPluginHelper.java | 101 ++++++++++++++++++ .../com/kezong/fataar/RClassesTransform.java | 6 +- 7 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java diff --git a/README.md b/README.md index 99f98e71..19678f5e 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/kezong/fat-aar-android/blob/master/LICENSE) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.kezong/fat-aar/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.kezong/fat-aar) -- [中文文档](./README_CN.md) +This fork adds support for AGP 8.0 >**I am no longer engaged in research and development, so the project will not be updated and maintained.
** >**You can try to use the following steps to reference the remote plugin. If it doesn't work on the new version of gradle, you can fork or download this project to modify it, the code of this project is not very complex.** > >**P.S. Hope Google can support this damn feature as soon as possible.** -The solution of merging aar works with [AGP][3] `3.0` and higher. (Tested in AGP 3.0 - 7.1.0, and Gradle 4.9 - 7.3) +The solution of merging aar works with [AGP][3] `3.0` and higher. (Tested in AGP 3.0 - 8.0.0, and Gradle 4.9 - 8.0) ## Getting Started ### Step 1: Add classpath diff --git a/source/build.gradle b/source/build.gradle index 913630b5..a6957adf 100644 --- a/source/build.gradle +++ b/source/build.gradle @@ -18,5 +18,7 @@ dependencies { implementation gradleApi() implementation localGroovy() implementation "org.javassist:javassist:3.27.0-GA" - implementation 'com.android.tools.build:gradle:4.2.0' + implementation 'com.android.tools.build:gradle:7.2.0' + implementation 'com.android.tools:common:30.2.0' + implementation 'org.ow2.asm:asm-commons:9.2' } diff --git a/source/gradle/wrapper/gradle-wrapper.properties b/source/gradle/wrapper/gradle-wrapper.properties index 69a3256f..5b6171c9 100644 --- a/source/gradle/wrapper/gradle-wrapper.properties +++ b/source/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip diff --git a/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy b/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy index 97a49a43..fa72d7c0 100644 --- a/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy +++ b/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy @@ -7,6 +7,7 @@ import org.gradle.api.ProjectConfigurationException import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ResolvedArtifact import org.gradle.api.artifacts.ResolvedDependency +import org.gradle.api.provider.MapProperty /** * plugin entry @@ -27,6 +28,8 @@ class FatAarPlugin implements Plugin { private final Collection embedConfigurations = new ArrayList<>() + private MapProperty> variantPackagesProperty; + @Override void apply(Project project) { this.project = project @@ -42,9 +45,14 @@ class FatAarPlugin implements Plugin { } private registerTransform() { - transform = new RClassesTransform(project) - // register in project.afterEvaluate is invalid. - project.android.registerTransform(transform) + variantPackagesProperty = project.objects.mapProperty(String.class, List.class) + if (FatUtils.compareVersion(VersionAdapter.AGPVersion, "8.0.0") >= 0) { + FatAarPluginHelper.registerAsmTransformation(project, variantPackagesProperty) + } else { + transform = new RClassesTransform(project) + // register in project.afterEvaluate is invalid. + project.android.registerTransform(transform) + } } private void doAfterEvaluate() { @@ -70,7 +78,7 @@ class FatAarPlugin implements Plugin { } if (!artifacts.isEmpty()) { - def processor = new VariantProcessor(project, variant) + def processor = new VariantProcessor(project, variant, variantPackagesProperty) processor.processVariant(artifacts, firstLevelDependencies, transform) } } diff --git a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy index 7b275f49..5d6a7f9c 100755 --- a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy +++ b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy @@ -9,6 +9,8 @@ import org.gradle.api.artifacts.ResolvedArtifact import org.gradle.api.artifacts.ResolvedDependency import org.gradle.api.internal.artifacts.ResolvableDependency import org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.MapProperty import org.gradle.api.tasks.Copy import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskDependency @@ -18,6 +20,7 @@ import org.gradle.api.tasks.bundling.Zip import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths +import java.util.stream.Collectors /** * Core @@ -31,6 +34,8 @@ class VariantProcessor { private Collection mAndroidArchiveLibraries = new ArrayList<>() + private ListProperty mAndroidArchiveLibrariesProperty + private Collection mJarFiles = new ArrayList<>() private Collection mExplodeTasks = new ArrayList<>() @@ -39,14 +44,19 @@ class VariantProcessor { private TaskProvider mMergeClassTask - VariantProcessor(Project project, LibraryVariant variant) { + VariantProcessor(Project project, LibraryVariant variant, MapProperty> variantPackagesProperty) { mProject = project mVariant = variant mVersionAdapter = new VersionAdapter(project, variant) + mAndroidArchiveLibrariesProperty = mProject.objects.listProperty(AndroidArchiveLibrary.class) + variantPackagesProperty.put(mVariant.getName(), + mAndroidArchiveLibrariesProperty.map(it -> + it.stream().map(it2 -> it2.getPackageName()).collect(Collectors.toList()))) } void addAndroidArchiveLibrary(AndroidArchiveLibrary library) { mAndroidArchiveLibraries.add(library) + mAndroidArchiveLibrariesProperty.add(library) } void addJarFile(File jar) { @@ -178,6 +188,7 @@ class VariantProcessor { } private void processRClasses(RClassesTransform transform, TaskProvider bundleTask) { + if (FatUtils.compareVersion(VersionAdapter.AGPVersion, "8.0.0") >= 0) return TaskProvider reBundleTask = configureReBundleAarTask(bundleTask) TaskProvider transformTask = mProject.tasks.named("transformClassesWith${transform.name.capitalize()}For${mVariant.name.capitalize()}") transformTask.configure { diff --git a/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java b/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java new file mode 100644 index 00000000..e6aa4a6c --- /dev/null +++ b/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java @@ -0,0 +1,101 @@ +package com.kezong.fataar; + +import com.android.build.api.instrumentation.AsmClassVisitorFactory; +import com.android.build.api.instrumentation.ClassContext; +import com.android.build.api.instrumentation.ClassData; +import com.android.build.api.instrumentation.InstrumentationParameters; +import com.android.build.api.instrumentation.InstrumentationScope; +import com.android.build.api.variant.AndroidComponentsExtension; +import com.android.build.api.variant.Variant; + +import org.gradle.api.Project; +import org.gradle.api.provider.ListProperty; +import org.gradle.api.provider.MapProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.commons.ClassRemapper; +import org.objectweb.asm.commons.Remapper; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import kotlin.Unit; +import kotlin.text.StringsKt; + +import static com.android.build.api.instrumentation.FramesComputationMode.COPY_FRAMES; + +public class FatAarPluginHelper { + + public static void registerAsmTransformation( + Project project, + MapProperty> variantPackagesProperty) { + AndroidComponentsExtension components = + project.getExtensions().getByType(AndroidComponentsExtension.class); + components.onVariants(components.selector().all(), variant -> { + variant.getInstrumentation().transformClassesWith( + RClassAsmTransformerFactory.class, + InstrumentationScope.PROJECT, + params -> { + params.getNamespace().set(variant.getNamespace()); + params.getLibraryNamespaces().set(variantPackagesProperty.getting(variant.getName())); + return Unit.INSTANCE; + }); + variant.getInstrumentation().setAsmFramesComputationMode(COPY_FRAMES); + }); + } + + public abstract static class RClassAsmTransformerFactory implements AsmClassVisitorFactory { + + public interface Params extends InstrumentationParameters { + + @Input + Property getNamespace(); + + @Input + ListProperty getLibraryNamespaces(); + } + + @Override + public ClassVisitor createClassVisitor(ClassContext classContext, ClassVisitor classVisitor) { + Params params = getParameters().get(); + String namespace = params.getNamespace().get(); + final ListProperty libraryNamespaces = params.getLibraryNamespaces(); + + String targetRClass = namespace.replace(".", "/") + "/R"; + String targetRSubclass = namespace.replace(".", "/") + "/R$"; + + Set libraryRClasses = libraryNamespaces.get().stream() + .map(it -> it.replace(".", "/") + "/R") + .collect(Collectors.toSet()); + List libraryRSubclasses = libraryNamespaces.get().stream() + .map(it -> it.replace(".", "/") + "/R$") + .collect(Collectors.toList()); + + Remapper remapper = new Remapper() { + @Override + public String map(String internalName) { + if (internalName == null) { + return null; + } + if (libraryRClasses.contains(internalName)) { + return targetRClass; + } + for (String libraryRSubclass : libraryRSubclasses) { + if (internalName.startsWith(libraryRSubclass)) { + return StringsKt.replaceFirst(internalName, libraryRSubclass, targetRSubclass, false); + } + } + return super.map(internalName); + } + }; + return new ClassRemapper(classVisitor, remapper); + } + + @Override + public boolean isInstrumentable(ClassData classData) { + return true; + } + } +} diff --git a/source/src/main/java/com/kezong/fataar/RClassesTransform.java b/source/src/main/java/com/kezong/fataar/RClassesTransform.java index c21a72d0..61cf06a5 100644 --- a/source/src/main/java/com/kezong/fataar/RClassesTransform.java +++ b/source/src/main/java/com/kezong/fataar/RClassesTransform.java @@ -9,7 +9,6 @@ import com.android.build.api.transform.TransformInvocation; import com.android.build.api.transform.TransformOutputProvider; import com.android.build.gradle.internal.pipeline.TransformManager; -import com.google.common.collect.ImmutableSet; import org.gradle.api.Project; @@ -21,6 +20,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -94,7 +94,9 @@ public Set getInputTypes() { @Override public Set getScopes() { - return ImmutableSet.of(QualifiedContent.Scope.PROJECT); + HashSet scopes = new HashSet<>(); + scopes.add(QualifiedContent.Scope.PROJECT); + return scopes; } @Override From 10cda2e0caa4929076e366f30b8b975c45d93a07 Mon Sep 17 00:00:00 2001 From: Alexander Sitnikov Date: Wed, 23 Aug 2023 19:50:42 +0300 Subject: [PATCH 3/6] fix weird issue with properties --- .../src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy | 2 +- .../main/groovy/com/kezong/fataar/VariantProcessor.groovy | 6 ++---- .../main/java/com/kezong/fataar/FatAarPluginHelper.java | 8 ++++++-- .../main/java/com/kezong/fataar/RClassesTransform.java | 5 +++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy b/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy index fa72d7c0..22172f1e 100644 --- a/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy +++ b/source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy @@ -28,7 +28,7 @@ class FatAarPlugin implements Plugin { private final Collection embedConfigurations = new ArrayList<>() - private MapProperty> variantPackagesProperty; + private MapProperty> variantPackagesProperty; @Override void apply(Project project) { diff --git a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy index 5d6a7f9c..a60bf21e 100755 --- a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy +++ b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy @@ -44,14 +44,12 @@ class VariantProcessor { private TaskProvider mMergeClassTask - VariantProcessor(Project project, LibraryVariant variant, MapProperty> variantPackagesProperty) { + VariantProcessor(Project project, LibraryVariant variant, MapProperty> variantPackagesProperty) { mProject = project mVariant = variant mVersionAdapter = new VersionAdapter(project, variant) mAndroidArchiveLibrariesProperty = mProject.objects.listProperty(AndroidArchiveLibrary.class) - variantPackagesProperty.put(mVariant.getName(), - mAndroidArchiveLibrariesProperty.map(it -> - it.stream().map(it2 -> it2.getPackageName()).collect(Collectors.toList()))) + variantPackagesProperty.put(mVariant.getName(), mAndroidArchiveLibrariesProperty) } void addAndroidArchiveLibrary(AndroidArchiveLibrary library) { diff --git a/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java b/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java index e6aa4a6c..a9af45e6 100644 --- a/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java +++ b/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java @@ -13,6 +13,7 @@ import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Optional; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.commons.ClassRemapper; import org.objectweb.asm.commons.Remapper; @@ -30,7 +31,7 @@ public class FatAarPluginHelper { public static void registerAsmTransformation( Project project, - MapProperty> variantPackagesProperty) { + MapProperty> variantPackagesProperty) { AndroidComponentsExtension components = project.getExtensions().getByType(AndroidComponentsExtension.class); components.onVariants(components.selector().all(), variant -> { @@ -39,7 +40,9 @@ public static void registerAsmTransformation( InstrumentationScope.PROJECT, params -> { params.getNamespace().set(variant.getNamespace()); - params.getLibraryNamespaces().set(variantPackagesProperty.getting(variant.getName())); + params.getLibraryNamespaces().set(variantPackagesProperty.getting(variant.getName()) + .map(list -> list.stream().map(it -> it.getPackageName()).collect(Collectors.toList())) + ); return Unit.INSTANCE; }); variant.getInstrumentation().setAsmFramesComputationMode(COPY_FRAMES); @@ -54,6 +57,7 @@ public interface Params extends InstrumentationParameters { Property getNamespace(); @Input + @Optional ListProperty getLibraryNamespaces(); } diff --git a/source/src/main/java/com/kezong/fataar/RClassesTransform.java b/source/src/main/java/com/kezong/fataar/RClassesTransform.java index 61cf06a5..d6bfc8ec 100644 --- a/source/src/main/java/com/kezong/fataar/RClassesTransform.java +++ b/source/src/main/java/com/kezong/fataar/RClassesTransform.java @@ -8,7 +8,6 @@ import com.android.build.api.transform.TransformInput; import com.android.build.api.transform.TransformInvocation; import com.android.build.api.transform.TransformOutputProvider; -import com.android.build.gradle.internal.pipeline.TransformManager; import org.gradle.api.Project; @@ -89,7 +88,9 @@ public String getName() { @Override public Set getInputTypes() { - return TransformManager.CONTENT_CLASS; + HashSet set = new HashSet<>(); + set.add(QualifiedContent.DefaultContentType.CLASSES); + return set; } @Override From aff99d5094aa56f38aac771c701683b8210860d5 Mon Sep 17 00:00:00 2001 From: Alexander Sitnikov Date: Fri, 25 Aug 2023 12:33:15 +0300 Subject: [PATCH 4/6] fix when no embeds are defined --- .../java/com/kezong/fataar/FatAarPluginHelper.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java b/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java index a9af45e6..8c3db4e2 100644 --- a/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java +++ b/source/src/main/java/com/kezong/fataar/FatAarPluginHelper.java @@ -18,6 +18,7 @@ import org.objectweb.asm.commons.ClassRemapper; import org.objectweb.asm.commons.Remapper; +import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -65,15 +66,19 @@ public interface Params extends InstrumentationParameters { public ClassVisitor createClassVisitor(ClassContext classContext, ClassVisitor classVisitor) { Params params = getParameters().get(); String namespace = params.getNamespace().get(); - final ListProperty libraryNamespaces = params.getLibraryNamespaces(); + List libraryNamespaces = params.getLibraryNamespaces().orElse(Collections.emptyList()).get(); + + if (libraryNamespaces.isEmpty()) { + return classVisitor; + } String targetRClass = namespace.replace(".", "/") + "/R"; String targetRSubclass = namespace.replace(".", "/") + "/R$"; - Set libraryRClasses = libraryNamespaces.get().stream() + Set libraryRClasses = libraryNamespaces.stream() .map(it -> it.replace(".", "/") + "/R") .collect(Collectors.toSet()); - List libraryRSubclasses = libraryNamespaces.get().stream() + List libraryRSubclasses = libraryNamespaces.stream() .map(it -> it.replace(".", "/") + "/R$") .collect(Collectors.toList()); From 51f40362fed107f5742dc7cca3370169a82957d9 Mon Sep 17 00:00:00 2001 From: Alexander Sitnikov Date: Mon, 4 Sep 2023 18:33:07 +0300 Subject: [PATCH 5/6] make transformAsm task depend on mergeClasses --- .../main/groovy/com/kezong/fataar/VariantProcessor.groovy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy index a60bf21e..de2cf47c 100755 --- a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy +++ b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy @@ -360,6 +360,9 @@ class VariantProcessor { private TaskProvider handleClassesMergeTask(final boolean isMinifyEnabled) { final TaskProvider task = mProject.tasks.register("mergeClasses" + mVariant.name.capitalize()) { + + outputs.upToDateWhen { false } + dependsOn(mExplodeTasks) dependsOn(mVersionAdapter.getJavaCompileTask()) try { @@ -453,6 +456,9 @@ class VariantProcessor { .withPathSensitivity(PathSensitivity.RELATIVE) inputs.files(mJarFiles).withPathSensitivity(PathSensitivity.RELATIVE) } + mProject.tasks.named("transform${mVariant.name.capitalize()}ClassesWithAsm").configure { + dependsOn(mMergeClassTask) + } extractAnnotationsTask.configure { mustRunAfter(mMergeClassTask) } From 3c282c1cae319488457a4f1003f715016f152f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=83=D0=B3=D1=80=D0=BE=D0=B2=20=D0=94=D0=BC=D0=B8?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=B9=20=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=D0=B8=D1=87?= Date: Thu, 26 Oct 2023 18:58:33 +0300 Subject: [PATCH 6/6] backward compatibility with gradle 7 --- .../groovy/com/kezong/fataar/FatUtils.groovy | 9 ++++++++- .../com/kezong/fataar/VariantProcessor.groovy | 20 +++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/source/src/main/groovy/com/kezong/fataar/FatUtils.groovy b/source/src/main/groovy/com/kezong/fataar/FatUtils.groovy index fb8dbea6..1b8f756b 100644 --- a/source/src/main/groovy/com/kezong/fataar/FatUtils.groovy +++ b/source/src/main/groovy/com/kezong/fataar/FatUtils.groovy @@ -107,6 +107,13 @@ class FatUtils { } } + /** + * @return true if current AGP version is at least "8.0.0" and false otherwise + */ + static Boolean isAGPVersion8AndAbove(){ + compareVersion(VersionAdapter.AGPVersion, "8.0.0") >= 0 + } + static String formatDataSize(long size) { String result if (size < 1024) { @@ -144,4 +151,4 @@ class FatUtils { output.append("\n${file.getText("UTF-8")}\n") } } -} \ No newline at end of file +} diff --git a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy index de2cf47c..626f4304 100755 --- a/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy +++ b/source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy @@ -1,7 +1,6 @@ package com.kezong.fataar import com.android.build.gradle.api.LibraryVariant -import com.android.build.gradle.internal.api.DefaultAndroidSourceSet import com.android.build.gradle.tasks.ManifestProcessorTask import org.gradle.api.Project import org.gradle.api.Task @@ -20,7 +19,6 @@ import org.gradle.api.tasks.bundling.Zip import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths -import java.util.stream.Collectors /** * Core @@ -186,13 +184,12 @@ class VariantProcessor { } private void processRClasses(RClassesTransform transform, TaskProvider bundleTask) { - if (FatUtils.compareVersion(VersionAdapter.AGPVersion, "8.0.0") >= 0) return TaskProvider reBundleTask = configureReBundleAarTask(bundleTask) - TaskProvider transformTask = mProject.tasks.named("transformClassesWith${transform.name.capitalize()}For${mVariant.name.capitalize()}") - transformTask.configure { - it.dependsOn(mMergeClassTask) - } - if (mProject.fataar.transformR) { + if (mProject.fataar.transformR && !FatUtils.isAGPVersion8AndAbove()) { + TaskProvider transformTask = mProject.tasks.named("transformClassesWith${transform.name.capitalize()}For${mVariant.name.capitalize()}") + transformTask.configure { + it.dependsOn(mMergeClassTask) + } transformRClasses(transform, transformTask, bundleTask, reBundleTask) } else { generateRClasses(bundleTask, reBundleTask) @@ -456,8 +453,11 @@ class VariantProcessor { .withPathSensitivity(PathSensitivity.RELATIVE) inputs.files(mJarFiles).withPathSensitivity(PathSensitivity.RELATIVE) } - mProject.tasks.named("transform${mVariant.name.capitalize()}ClassesWithAsm").configure { - dependsOn(mMergeClassTask) + // Asm tasks enabled from AGP 8 version + if(FatUtils.isAGPVersion8AndAbove()){ + mProject.tasks.named("transform${mVariant.name.capitalize()}ClassesWithAsm").configure { + dependsOn(mMergeClassTask) + } } extractAnnotationsTask.configure { mustRunAfter(mMergeClassTask)