Skip to content

Commit b09ee41

Browse files
authored
Android 9 (#1881)
* Update checksums * Update API usage for Android 9. * Update imports. * Add missing brace. * Add missing import. * Add missing imports.
1 parent 647b6d0 commit b09ee41

File tree

3 files changed

+148
-21
lines changed

3 files changed

+148
-21
lines changed

byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidPlugin.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.gradle.api.GradleException;
3838
import org.gradle.api.Plugin;
3939
import org.gradle.api.Project;
40+
import org.gradle.api.UnknownDomainObjectException;
4041
import org.gradle.api.artifacts.ArtifactView;
4142
import org.gradle.api.artifacts.Configuration;
4243
import org.gradle.api.attributes.Attribute;
@@ -196,7 +197,7 @@ public void execute(Variant variant) {
196197
Provider<ByteBuddyAndroidService> byteBuddyAndroidServiceProvider = project.getGradle().getSharedServices().registerIfAbsent(
197198
variantName + "ByteBuddyAndroidService",
198199
ByteBuddyAndroidService.class,
199-
new ByteBuddyAndroidService.ConfigurationAction(project.getExtensions().getByType(BaseExtension.class)));
200+
ByteBuddyAndroidService.ConfigurationAction.of(project.getExtensions()));
200201
FileCollection classPath = RuntimeClassPathResolver.INSTANCE.apply(variant);
201202
variant.getInstrumentation().transformClassesWith(ByteBuddyAsmClassVisitorFactory.class, InstrumentationScope.ALL, new ByteBuddyTransformationConfiguration(project,
202203
variantResolvableConfiguration,
@@ -346,7 +347,11 @@ protected ByteBuddyTransformationConfiguration(Project project,
346347
*/
347348
public Unit invoke(ByteBuddyInstrumentationParameters parameters) {
348349
parameters.getByteBuddyClasspath().from(ByteBuddyViewConfiguration.toClassPath(project, configuration));
349-
parameters.getAndroidBootClasspath().from(project.getExtensions().getByType(BaseExtension.class).getBootClasspath());
350+
try {
351+
parameters.getAndroidBootClasspath().from(project.getExtensions().getByType(AndroidComponentsExtension.class).getSdkComponents().getBootClasspath());
352+
} catch (UnknownDomainObjectException ignored) {
353+
parameters.getAndroidBootClasspath().from(project.getExtensions().getByType(BaseExtension.class).getBootClasspath());
354+
}
350355
parameters.getRuntimeClasspath().from(classPath);
351356
parameters.getByteBuddyService().set(byteBuddyAndroidServiceProvider);
352357
return Unit.INSTANCE;
@@ -607,9 +612,9 @@ public void accept(Project project, Variant variant, Configuration configuration
607612
}
608613
TaskProvider<ByteBuddyLocalClassesEnhancerTask> provider = project.getTasks().register(variant.getName() + "BytebuddyTransform",
609614
ByteBuddyLocalClassesEnhancerTask.class,
610-
new ByteBuddyLocalClassesEnhancerTask.ConfigurationAction(ByteBuddyViewConfiguration.toClassPath(project, configuration),
611-
project.getExtensions().getByType(BaseExtension.class),
612-
project.getExtensions().getByType(ByteBuddyAndroidTaskExtension.class)));
615+
ByteBuddyLocalClassesEnhancerTask.ConfigurationAction.of(
616+
ByteBuddyViewConfiguration.toClassPath(project, configuration),
617+
project.getExtensions()));
613618
try {
614619
toTransform.invoke(use.invoke(forScope.invoke(variant.getArtifacts(), scope), provider),
615620
artifact,

byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidService.java

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package net.bytebuddy.build.gradle.android;
1717

18+
import com.android.build.api.dsl.ApplicationExtension;
1819
import com.android.build.gradle.BaseExtension;
1920
import net.bytebuddy.ByteBuddy;
2021
import net.bytebuddy.ClassFileVersion;
@@ -32,8 +33,10 @@
3233
import org.gradle.api.Action;
3334
import org.gradle.api.GradleException;
3435
import org.gradle.api.JavaVersion;
36+
import org.gradle.api.UnknownDomainObjectException;
3537
import org.gradle.api.logging.Logger;
3638
import org.gradle.api.logging.Logging;
39+
import org.gradle.api.plugins.ExtensionContainer;
3740
import org.gradle.api.provider.Property;
3841
import org.gradle.api.services.BuildService;
3942
import org.gradle.api.services.BuildServiceParameters;
@@ -379,17 +382,31 @@ protected static class ConfigurationAction implements Action<BuildServiceSpec<Pa
379382
/**
380383
* The base extension.
381384
*/
382-
private final BaseExtension extension;
385+
private final ApplicationExtension extension;
383386

384387
/**
385388
* Creates a new configuration action.
386389
*
387390
* @param extension The base extension.
388391
*/
389-
protected ConfigurationAction(BaseExtension extension) {
392+
protected ConfigurationAction(ApplicationExtension extension) {
390393
this.extension = extension;
391394
}
392395

396+
/**
397+
* Resolves a configuration action for the current platform.
398+
*
399+
* @param container The extension container to query.
400+
* @return An appropriate configuration action.
401+
*/
402+
protected static Action<BuildServiceSpec<Parameters>> of(ExtensionContainer container) {
403+
try {
404+
return new ConfigurationAction(container.getByType(ApplicationExtension.class));
405+
} catch (UnknownDomainObjectException ignored) {
406+
return new ForLegacyAndroid(container.getByType(BaseExtension.class));
407+
}
408+
}
409+
393410
/**
394411
* {@inheritDoc}
395412
*/
@@ -398,6 +415,36 @@ public void execute(BuildServiceSpec<Parameters> spec) {
398415
.getJavaTargetCompatibilityVersion()
399416
.set(extension.getCompileOptions().getTargetCompatibility());
400417
}
418+
419+
/**
420+
* A configuration action for the {@link BuildServiceSpec} of the {@link Parameters} of {@link ByteBuddyAndroidService}
421+
* used on legacy Android platforms that do not support the current extension.
422+
*/
423+
protected static class ForLegacyAndroid implements Action<BuildServiceSpec<Parameters>> {
424+
425+
/**
426+
* The base extension.
427+
*/
428+
private final BaseExtension extension;
429+
430+
/**
431+
* Creates a new configuration action.
432+
*
433+
* @param extension The base extension.
434+
*/
435+
protected ForLegacyAndroid(BaseExtension extension) {
436+
this.extension = extension;
437+
}
438+
439+
/**
440+
* {@inheritDoc}
441+
*/
442+
public void execute(BuildServiceSpec<Parameters> spec) {
443+
spec.getParameters()
444+
.getJavaTargetCompatibilityVersion()
445+
.set(extension.getCompileOptions().getTargetCompatibility());
446+
}
447+
}
401448
}
402449

403450
/**

byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyLocalClassesEnhancerTask.java

Lines changed: 89 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package net.bytebuddy.build.gradle.android;
1717

18+
import com.android.build.api.dsl.ApplicationExtension;
19+
import com.android.build.api.variant.AndroidComponentsExtension;
1820
import com.android.build.gradle.BaseExtension;
1921
import net.bytebuddy.ByteBuddy;
2022
import net.bytebuddy.ClassFileVersion;
@@ -29,12 +31,14 @@
2931
import org.gradle.api.DefaultTask;
3032
import org.gradle.api.GradleException;
3133
import org.gradle.api.JavaVersion;
34+
import org.gradle.api.UnknownDomainObjectException;
3235
import org.gradle.api.file.ConfigurableFileCollection;
3336
import org.gradle.api.file.Directory;
3437
import org.gradle.api.file.FileCollection;
3538
import org.gradle.api.file.RegularFile;
3639
import org.gradle.api.file.RegularFileProperty;
3740
import org.gradle.api.logging.Logger;
41+
import org.gradle.api.plugins.ExtensionContainer;
3842
import org.gradle.api.provider.ListProperty;
3943
import org.gradle.api.provider.Property;
4044
import org.gradle.api.tasks.Input;
@@ -312,38 +316,109 @@ public static class ConfigurationAction implements Action<ByteBuddyLocalClassesE
312316
/**
313317
* The current variant's Byte Buddy configuration.
314318
*/
315-
private final FileCollection byteBuddyConfiguration;
319+
private final FileCollection byteBuddyClassPath;
316320

317321
/**
318-
* The Android gradle extension.
322+
* The Android Gradle extension.
319323
*/
320-
private final BaseExtension androidExtension;
324+
private final ApplicationExtension applicationExtension;
325+
326+
/**
327+
* The Android components extension.
328+
*/
329+
private final AndroidComponentsExtension<?, ?, ?> androidComponentsExtension;
321330

322331
/**
323332
* The Byte Buddy task extension.
324333
*/
325334
private final ByteBuddyAndroidTaskExtension byteBuddyExtension;
326335

327336
/**
328-
* @param byteBuddyConfiguration The current variant Byte Buddy configuration.
329-
* @param androidExtension The Android gradle extension.
330-
* @param byteBuddyExtension The Byte Buddy task extension.
337+
* @param byteBuddyClassPath The current variant Byte Buddy configuration.
338+
* @param applicationExtension The Android Gradle extension.
339+
* @param androidComponentsExtension The Android components extension.
340+
* @param byteBuddyExtension The Byte Buddy task extension.
331341
*/
332-
public ConfigurationAction(FileCollection byteBuddyConfiguration,
333-
BaseExtension androidExtension,
334-
ByteBuddyAndroidTaskExtension byteBuddyExtension) {
335-
this.byteBuddyConfiguration = byteBuddyConfiguration;
336-
this.androidExtension = androidExtension;
342+
protected ConfigurationAction(FileCollection byteBuddyClassPath,
343+
ApplicationExtension applicationExtension,
344+
AndroidComponentsExtension<?, ?, ?> androidComponentsExtension,
345+
ByteBuddyAndroidTaskExtension byteBuddyExtension) {
346+
this.byteBuddyClassPath = byteBuddyClassPath;
347+
this.applicationExtension = applicationExtension;
348+
this.androidComponentsExtension = androidComponentsExtension;
337349
this.byteBuddyExtension = byteBuddyExtension;
338350
}
339351

352+
/**
353+
* Resolves an appropriate configuration action for the current Android platform.
354+
* @param byteBuddyClassPath The current variant Byte Buddy configuration.
355+
* @param container The extensions container to use.
356+
* @return An appropriate configuration action.
357+
*/
358+
@SuppressWarnings("unchecked")
359+
public static Action<ByteBuddyLocalClassesEnhancerTask> of(FileCollection byteBuddyClassPath, ExtensionContainer container) {
360+
try {
361+
return new ConfigurationAction(byteBuddyClassPath,
362+
container.getByType(ApplicationExtension.class),
363+
container.getByType(AndroidComponentsExtension.class),
364+
container.getByType(ByteBuddyAndroidTaskExtension.class));
365+
} catch (UnknownDomainObjectException ignored) {
366+
return new ForLegacyAndroid(byteBuddyClassPath,
367+
container.getByType(BaseExtension.class),
368+
container.getByType(ByteBuddyAndroidTaskExtension.class));
369+
}
370+
}
371+
340372
@Override
341373
public void execute(ByteBuddyLocalClassesEnhancerTask task) {
342-
task.getByteBuddyClasspath().from(byteBuddyConfiguration);
343-
task.getAndroidBootClasspath().from(androidExtension.getBootClasspath());
344-
task.getJavaTargetCompatibilityVersion().set(androidExtension.getCompileOptions().getTargetCompatibility());
374+
task.getByteBuddyClasspath().from(byteBuddyClassPath);
375+
task.getAndroidBootClasspath().from(androidComponentsExtension.getSdkComponents().getBootClasspath());
376+
task.getJavaTargetCompatibilityVersion().set(applicationExtension.getCompileOptions().getTargetCompatibility());
345377
byteBuddyExtension.configure(task);
346378
}
379+
380+
/**
381+
* A configuration action for the {@link ByteBuddyLocalClassesEnhancerTask} task for
382+
* legacy Android platforms.
383+
*/
384+
protected static class ForLegacyAndroid implements Action<ByteBuddyLocalClassesEnhancerTask> {
385+
386+
/**
387+
* The current variant's Byte Buddy configuration.
388+
*/
389+
private final FileCollection byteBuddyClassPath;
390+
391+
/**
392+
* The Android Gradle extension.
393+
*/
394+
private final BaseExtension baseExtension;
395+
396+
/**
397+
* The Byte Buddy task extension.
398+
*/
399+
private final ByteBuddyAndroidTaskExtension byteBuddyExtension;
400+
401+
/**
402+
* @param byteBuddyClassPath The current variant Byte Buddy configuration.
403+
* @param baseExtension The Android Gradle extension.
404+
* @param byteBuddyExtension The Byte Buddy task extension.
405+
*/
406+
protected ForLegacyAndroid(FileCollection byteBuddyClassPath,
407+
BaseExtension baseExtension,
408+
ByteBuddyAndroidTaskExtension byteBuddyExtension) {
409+
this.byteBuddyClassPath = byteBuddyClassPath;
410+
this.baseExtension = baseExtension;
411+
this.byteBuddyExtension = byteBuddyExtension;
412+
}
413+
414+
@Override
415+
public void execute(ByteBuddyLocalClassesEnhancerTask task) {
416+
task.getByteBuddyClasspath().from(byteBuddyClassPath);
417+
task.getAndroidBootClasspath().from(baseExtension.getBootClasspath());
418+
task.getJavaTargetCompatibilityVersion().set(baseExtension.getCompileOptions().getTargetCompatibility());
419+
byteBuddyExtension.configure(task);
420+
}
421+
}
347422
}
348423

349424
/**

0 commit comments

Comments
 (0)