11package app .artyomd .injector ;
22
3+ import app .artyomd .injector .extension .InjectorExtension ;
4+ import app .artyomd .injector .model .AndroidArchiveLibrary ;
5+ import app .artyomd .injector .task .ExtractAarTask ;
6+ import app .artyomd .injector .util .Utils ;
37import com .android .build .gradle .AppExtension ;
48import com .android .build .gradle .LibraryExtension ;
59import com .android .build .gradle .api .BaseVariant ;
610import org .gradle .api .Plugin ;
711import org .gradle .api .Project ;
8- import org .gradle .api .Task ;
912import org .gradle .api .artifacts .Configuration ;
1013import org .gradle .api .artifacts .DependencyResolutionListener ;
11- import org .gradle .api .artifacts .ModuleVersionIdentifier ;
1214import org .gradle .api .artifacts .ResolvableDependencies ;
1315import org .gradle .api .artifacts .ResolvedArtifact ;
16+ import org .gradle .api .tasks .TaskProvider ;
1417import org .jetbrains .annotations .NotNull ;
1518
16- import java .io .File ;
17- import java .io .IOException ;
1819import java .util .Collections ;
19- import java .util .HashMap ;
2020import java .util .HashSet ;
21- import java .util .Map ;
2221import java .util .Set ;
23- import java .util .function .Consumer ;
2422
2523public class InjectorPlugin implements Plugin <Project > {
2624
@@ -33,44 +31,20 @@ public class InjectorPlugin implements Plugin<Project> {
3331 private Set <ResolvedArtifact > jars ;
3432 private Set <AndroidArchiveLibrary > aars ;
3533
36- private static void removeOldVersions (Set <? extends ResolvedArtifact > artifactsList ) {
37- Map <String , Map <String , ResolvedArtifact >> artifacts = new HashMap <>();
38- for (ResolvedArtifact artifact : artifactsList ) {
39- ModuleVersionIdentifier id = artifact .getModuleVersion ().getId ();
40- String name = id .getName ();
41- String group = id .getGroup ();
42- String version = id .getVersion ();
43- if (artifacts .containsKey (group )) {
44- Map <String , ResolvedArtifact > names = artifacts .get (group );
45- if (names .containsKey (name )) {
46- ResolvedArtifact old = names .get (name );
47- if (Utils .cmp (old .getModuleVersion ().getId ().getVersion (), version )) {
48- names .put (name , artifact );
49- artifactsList .remove (old );
50- } else {
51- artifactsList .remove (artifact );
52- }
53- } else {
54- names .put (name , artifact );
55- }
56- } else {
57- Map <String , ResolvedArtifact > names = new HashMap <>();
58- names .put (name , artifact );
59- artifacts .put (group , names );
60- }
61- }
62- }
63-
6434 @ Override
6535 public void apply (@ NotNull Project project ) {
6636 this .project = project ;
67- extension = project . getExtensions (). create ( "injectConfig" , InjectorExtension . class );
37+ createExtension ( );
6838 createConfiguration ();
39+ createExtractAARsTask ();
6940 project .afterEvaluate (project1 -> {
7041 resolveArtifacts ();
71- removeOldVersions (jars );
72- removeOldVersions (aars );
73- createExtractAARsTask ();
42+ if (jars .isEmpty () && aars .isEmpty ()) {
43+ return ;
44+ }
45+ Utils .removeOldArtifacts (jars );
46+ Utils .removeOldArtifacts (aars );
47+
7448 Object extension = project1 .getExtensions ().getByName ("android" );
7549 if (extension instanceof LibraryExtension ) {
7650 ((LibraryExtension ) extension ).getLibraryVariants ().all (this ::processVariant );
@@ -80,19 +54,9 @@ public void apply(@NotNull Project project) {
8054 });
8155 }
8256
83- private void createExtractAARsTask () {
84- Task extractAars = project .getTasks ().create (EXTRACT_AARS_TASK_NAME , Task .class );
85- extractAars .doFirst (task -> aars .forEach ((Consumer <ResolvedArtifact >) resolvedArtifact -> {
86- String extractedAarPath = ((AndroidArchiveLibrary ) resolvedArtifact ).getRootFolder ().getAbsolutePath ();
87- File extractedAar = new File (extractedAarPath );
88- if (!extractedAar .exists ()) {
89- try {
90- Utils .unzip (resolvedArtifact .getFile (), extractedAarPath );
91- } catch (IOException e ) {
92- e .printStackTrace ();
93- }
94- }
95- }));
57+ private void createExtension () {
58+ extension = new InjectorExtension ();
59+ project .getExtensions ().add (InjectorExtension .class , "injectConfig" , extension );
9660 }
9761
9862 private void createConfiguration () {
@@ -119,6 +83,11 @@ public void afterResolve(@NotNull ResolvableDependencies dependencies) {
11983 });
12084 }
12185
86+ private void createExtractAARsTask () {
87+ TaskProvider <ExtractAarTask > extractAarTaskTaskProvider = project .getTasks ().register (EXTRACT_AARS_TASK_NAME , ExtractAarTask .class );
88+ extractAarTaskTaskProvider .configure (extractAarTask -> extractAarTask .setAndroidArchiveLibraries (aars ));
89+ }
90+
12291 private void resolveArtifacts () {
12392 Set <ResolvedArtifact > jars = new HashSet <>();
12493 Set <AndroidArchiveLibrary > aars = new HashSet <>();
0 commit comments