Skip to content

Commit 42bcf4b

Browse files
authored
Merge pull request #4 from erykrutkowski/bump-to-agp-9-0
Bump to AGP 9.0
2 parents f834ba7 + c64c405 commit 42bcf4b

File tree

9 files changed

+303
-56
lines changed

9 files changed

+303
-56
lines changed

source/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ dependencies {
1818
implementation fileTree(dir: 'libs', include: ['*.jar'])
1919
implementation gradleApi()
2020
implementation localGroovy()
21-
implementation "org.javassist:javassist:3.27.0-GA"
22-
implementation 'com.android.tools.build:gradle:8.13.0'
23-
implementation 'com.android.tools:common:31.8.2'
24-
implementation 'org.ow2.asm:asm-commons:9.7'
21+
implementation "org.javassist:javassist:3.30.2-GA"
22+
implementation 'com.android.tools.build:gradle:9.0.0'
23+
implementation 'com.android.tools:common:32.0.0'
24+
implementation 'org.ow2.asm:asm-commons:9.9.1'
2525
}

source/gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
PUBLISH_GROUP_ID=com.github.aasitnikov
2-
PUBLISH_ARTIFACT_ID=fat-aar
3-
PUBLISH_VERSION=1.4.0
2+
PUBLISH_ARTIFACT_ID=fat-aar-android
3+
PUBLISH_VERSION=1.4.5

source/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,52 @@
1-
package com.kezong.fataar;
1+
package com.kezong.fataar
22

3-
import com.android.build.gradle.api.LibraryVariant;
3+
import com.android.build.gradle.api.LibraryVariant
44

5-
import org.gradle.api.Project;
5+
import org.gradle.api.Project
66

77
final class DirectoryManager {
88

9-
private static final String RE_BUNDLE_FOLDER = "aar_rebundle";
9+
private static final String RE_BUNDLE_FOLDER = "aar_rebundle"
1010

11-
private static final String INTERMEDIATES_TEMP_FOLDER = "fat-aar";
11+
private static final String INTERMEDIATES_TEMP_FOLDER = "fat-aar"
1212

1313
private final Project project
1414
private final LibraryVariant variant
15+
private final VariantInfo variantInfo
1516

1617
DirectoryManager(Project project, LibraryVariant variant) {
1718
this.project = project
1819
this.variant = variant
20+
this.variantInfo = VariantInfo.fromLegacy(variant)
21+
}
22+
23+
DirectoryManager(Project project, VariantInfo variantInfo) {
24+
this.project = project
25+
this.variant = null
26+
this.variantInfo = variantInfo
1927
}
2028

2129
File getReBundleDirectory() {
2230
return this.project.getLayout().getBuildDirectory()
23-
.dir("outputs/${RE_BUNDLE_FOLDER}/${this.variant.name}")
31+
.dir("outputs/${RE_BUNDLE_FOLDER}/${this.variantInfo.name}")
2432
.get().asFile
2533
}
2634

2735
File getMergeClassDirectory() {
2836
return this.project.getLayout().getBuildDirectory()
29-
.dir("intermediates/${INTERMEDIATES_TEMP_FOLDER}/merge_classes/${this.variant.name}")
37+
.dir("intermediates/${INTERMEDIATES_TEMP_FOLDER}/merge_classes/${this.variantInfo.name}")
3038
.get().asFile
3139
}
3240

3341
File getAarMainJarFile() {
3442
return this.project.getLayout().getBuildDirectory()
35-
.file("intermediates/aar_main_jar/${this.variant.name}/sync${this.variant.name.capitalize()}LibJars/classes.jar")
43+
.file("intermediates/aar_main_jar/${this.variantInfo.name}/sync${this.variantInfo.name.capitalize()}LibJars/classes.jar")
3644
.get().asFile
3745
}
3846

3947
File getAarMainClassesWithKotlinModulesDirectory() {
4048
return this.project.getLayout().getBuildDirectory()
41-
.dir("intermediates/${INTERMEDIATES_TEMP_FOLDER}/aar_main_classes_with_kotlin_modules/${this.variant.name}")
49+
.dir("intermediates/${INTERMEDIATES_TEMP_FOLDER}/aar_main_classes_with_kotlin_modules/${this.variantInfo.name}")
4250
.get().asFile
4351
}
4452
}

source/src/main/groovy/com/kezong/fataar/FatAarPlugin.groovy

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.kezong.fataar
22

3+
import com.android.build.api.variant.AndroidComponentsExtension
4+
import com.android.build.api.variant.Variant
35
import com.android.build.gradle.api.LibraryVariant
46
import org.gradle.api.Plugin
57
import org.gradle.api.Project
@@ -31,7 +33,9 @@ class FatAarPlugin implements Plugin<Project> {
3133

3234
private final Collection<Configuration> embedConfigurations = new ArrayList<>()
3335

34-
private MapProperty<String, List<AndroidArchiveLibrary>> variantPackagesProperty;
36+
private MapProperty<String, List<AndroidArchiveLibrary>> variantPackagesProperty
37+
38+
private final List<VariantInfo> variantInfos = new ArrayList<>()
3539

3640
private CalculatedValueContainerFactory calculatedValueContainerFactory
3741

@@ -59,20 +63,40 @@ class FatAarPlugin implements Plugin<Project> {
5963
project.afterEvaluate {
6064
doAfterEvaluate()
6165
}
66+
registerAndroidComponents()
6267
}
6368

6469
private registerTransform() {
6570
variantPackagesProperty = project.objects.mapProperty(String.class, List.class)
6671
FatAarPluginHelper.registerAsmTransformation(project, variantPackagesProperty)
6772
}
6873

74+
private void registerAndroidComponents() {
75+
AndroidComponentsExtension<?, ?, Variant> components =
76+
project.extensions.getByType(AndroidComponentsExtension.class)
77+
components.onVariants(components.selector().all()) { variant ->
78+
VariantInfo variantInfo = VariantInfo.fromNew(variant)
79+
if (!variantPackagesProperty.getOrElse([:]).containsKey(variantInfo.name)) {
80+
variantPackagesProperty.put(variantInfo.name, project.objects.listProperty(AndroidArchiveLibrary.class))
81+
}
82+
variantInfos.add(variantInfo)
83+
}
84+
}
85+
6986
private void doAfterEvaluate() {
7087
embedConfigurations.each {
7188
if (project.fataar.transitive) {
7289
it.transitive = true
7390
}
7491
}
7592

93+
if (FatUtils.compareVersion(VersionAdapter.AGPVersion, "9.0.0") >= 0) {
94+
variantInfos.each { variantInfo ->
95+
processVariantWithInfo(variantInfo)
96+
}
97+
return
98+
}
99+
76100
project.android.libraryVariants.all { variant ->
77101
Collection<ResolvedArtifact> artifacts = new ArrayList()
78102
Collection<ResolvedDependency> firstLevelDependencies = new ArrayList<>()
@@ -95,6 +119,33 @@ class FatAarPlugin implements Plugin<Project> {
95119
}
96120
}
97121

122+
private void processVariantWithInfo(VariantInfo variantInfo) {
123+
embedConfigurations.each {
124+
if (project.fataar.transitive) {
125+
it.transitive = true
126+
}
127+
}
128+
129+
Collection<ResolvedArtifact> artifacts = new ArrayList()
130+
Collection<ResolvedDependency> firstLevelDependencies = new ArrayList<>()
131+
embedConfigurations.each { configuration ->
132+
if (configuration.name == CONFIG_NAME
133+
|| (variantInfo.buildTypeName != null && configuration.name == variantInfo.buildTypeName + CONFIG_SUFFIX)
134+
|| (variantInfo.flavorName != null && configuration.name == variantInfo.flavorName + CONFIG_SUFFIX)
135+
|| configuration.name == variantInfo.name + CONFIG_SUFFIX) {
136+
Collection<ResolvedArtifact> resolvedArtifacts = resolveArtifacts(configuration)
137+
artifacts.addAll(resolvedArtifacts)
138+
artifacts.addAll(dealUnResolveArtifacts(configuration, variantInfo, resolvedArtifacts))
139+
firstLevelDependencies.addAll(configuration.resolvedConfiguration.firstLevelModuleDependencies)
140+
}
141+
}
142+
143+
if (!artifacts.isEmpty()) {
144+
def processor = new VariantProcessor(project, variantInfo, variantPackagesProperty)
145+
processor.processVariant(artifacts, firstLevelDependencies)
146+
}
147+
}
148+
98149
private void createConfigurations() {
99150
Configuration embedConf = project.configurations.create(CONFIG_NAME)
100151
createConfiguration(embedConf)
@@ -171,4 +222,25 @@ class FatAarPlugin implements Plugin<Project> {
171222
}
172223
return artifactList
173224
}
225+
226+
private Collection<ResolvedArtifact> dealUnResolveArtifacts(Configuration configuration,
227+
VariantInfo variantInfo,
228+
Collection<ResolvedArtifact> artifacts) {
229+
def artifactList = new ArrayList()
230+
configuration.resolvedConfiguration.firstLevelModuleDependencies.each { dependency ->
231+
def match = artifacts.any { artifact ->
232+
dependency.moduleName == artifact.moduleVersion.id.name
233+
}
234+
235+
if (!match) {
236+
def flavorArtifact = FlavorArtifact.createFlavorArtifact(
237+
project, variantInfo, dependency, calculatedValueContainerFactory, fileResolver, taskDependencyFactory
238+
)
239+
if (flavorArtifact != null) {
240+
artifactList.add(flavorArtifact)
241+
}
242+
}
243+
}
244+
return artifactList
245+
}
174246
}

source/src/main/groovy/com/kezong/fataar/FlavorArtifact.groovy

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,47 @@ class FlavorArtifact {
6666
)
6767
}
6868

69+
static ResolvedArtifact createFlavorArtifact(Project project,
70+
VariantInfo variantInfo,
71+
ResolvedDependency unResolvedArtifact,
72+
CalculatedValueContainerFactory calculatedValueContainerFactory,
73+
FileResolver fileResolver,
74+
TaskDependencyFactory taskDependencyFactory
75+
) {
76+
Project artifactProject = getArtifactProject(project, unResolvedArtifact)
77+
TaskProvider bundleProvider
78+
try {
79+
bundleProvider = getBundleTask(artifactProject, variantInfo)
80+
} catch (Exception ex) {
81+
FatUtils.logError("[$variantInfo.name]Can not resolve :$unResolvedArtifact.moduleName", ex)
82+
return null
83+
}
84+
85+
if (bundleProvider == null) {
86+
FatUtils.logError("[$variantInfo.name]Can not resolve :$unResolvedArtifact.moduleName")
87+
return null
88+
}
89+
90+
ModuleVersionIdentifier identifier = createModuleVersionIdentifier(unResolvedArtifact)
91+
File artifactFile = createArtifactFile(bundleProvider.get())
92+
DefaultIvyArtifactName artifactName = createArtifactName(artifactFile)
93+
94+
return new DefaultResolvedArtifact(
95+
new PublishArtifactLocalArtifactMetadata(
96+
new ComponentIdentifier() {
97+
@Override
98+
String getDisplayName() {
99+
return artifactName.name
100+
}
101+
},
102+
new LazyPublishArtifact(bundleProvider, fileResolver, taskDependencyFactory)
103+
),
104+
calculatedValueContainerFactory.create(Describables.of(artifactFile.name), artifactFile),
105+
identifier, artifactName
106+
107+
)
108+
}
109+
69110
private static ModuleVersionIdentifier createModuleVersionIdentifier(ResolvedDependency unResolvedArtifact) {
70111
return DefaultModuleVersionIdentifier.newId(
71112
unResolvedArtifact.getModuleGroup(),
@@ -143,4 +184,27 @@ class FlavorArtifact {
143184
return bundleTaskProvider
144185
}
145186

187+
private static TaskProvider getBundleTask(Project project, VariantInfo variantInfo) {
188+
List<String> candidates = new ArrayList<>()
189+
if (variantInfo.name != null) {
190+
candidates.add(variantInfo.name)
191+
}
192+
if (variantInfo.buildTypeName != null) {
193+
candidates.add(variantInfo.buildTypeName)
194+
}
195+
if (variantInfo.flavorName != null && variantInfo.buildTypeName != null) {
196+
candidates.add(variantInfo.flavorName + variantInfo.buildTypeName.capitalize())
197+
}
198+
if (variantInfo.flavorName != null) {
199+
candidates.add(variantInfo.flavorName)
200+
}
201+
for (String candidate : candidates) {
202+
try {
203+
return VersionAdapter.getBundleTaskProvider(project, candidate)
204+
} catch (Exception ignore) {
205+
}
206+
}
207+
return null
208+
}
209+
146210
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.kezong.fataar
2+
3+
import com.android.build.api.variant.Variant
4+
import com.android.build.gradle.api.LibraryVariant
5+
6+
final class VariantInfo {
7+
8+
final String name
9+
final String buildTypeName
10+
final String flavorName
11+
final boolean minifyEnabled
12+
13+
VariantInfo(String name, String buildTypeName, String flavorName, boolean minifyEnabled) {
14+
this.name = name
15+
this.buildTypeName = buildTypeName
16+
this.flavorName = flavorName
17+
this.minifyEnabled = minifyEnabled
18+
}
19+
20+
static VariantInfo fromLegacy(LibraryVariant variant) {
21+
return new VariantInfo(
22+
variant.name,
23+
variant.buildType?.name,
24+
variant.flavorName,
25+
variant.buildType?.isMinifyEnabled() ?: false
26+
)
27+
}
28+
29+
static VariantInfo fromNew(Variant variant) {
30+
boolean minifyEnabled = false
31+
try {
32+
minifyEnabled = variant.isMinifyEnabled()
33+
} catch (Exception ignore) {
34+
// Property not available on some variant types.
35+
}
36+
return new VariantInfo(
37+
variant.name,
38+
variant.buildType,
39+
variant.flavorName,
40+
minifyEnabled
41+
)
42+
}
43+
}

0 commit comments

Comments
 (0)