Status Update
Comments
vi...@google.com <vi...@google.com>
je...@google.com <je...@google.com>
xa...@google.com <xa...@google.com> #2
Can I ask what you do with these attributes?
In particular, VariantAttr
should not be used, it's strictly internal, and we should remove it from the API.
se...@gmail.com <se...@gmail.com> #3
My plugin adds sources and Javadoc artifacts to components.all. I removed the usage of VariantAttr
after I saw the other ticket from Gradle so I'm using only BuildTypeAttr
right now.
xa...@google.com <xa...@google.com> #4
ok thanks. For BuildTypeAttr
we'll see what we can do but we do have to convert it to Kotlin.
A mitigation factor for you would be to use your own Attribute.of(BuildTypeAttr::class.java)
. There's no reason you have to use BuildTypeAtt.ATTRIBUTE
.
In fact it was probably a mistake to put it in the API.
cm...@google.com <cm...@google.com> #5
Thanks for a detailed report.
For reference this was introduced in
se...@gmail.com <se...@gmail.com> #6
Replacing @JvmStatic
with @JvmField
might work. Kotlin supports static fields on interfaces since 1.3 afaik.
cm...@google.com <cm...@google.com> #7
Yep - that's my proposed fix :)
cm...@google.com <cm...@google.com> #9
Landed in 4.0-dev (687e4cbb608acf2cadffe28de0b36d6027a2d8c8)
This will likely be releases in next week's subsequent preview releases of AGP 4.0 and 4.1.
Description
Compiling against AGP 3.6 and running with 4.0.0-beta01 results in the following error:
`java.lang.NoSuchFieldError: ATTRIBUTE` (referring to `BuildTypeAttr.ATTRIBUTE`)
Compiling against AGP 4.0.0-beta01 and running with 3.6.1 also results in an error:
`java.lang.NoSuchFieldError: Companion` (referring to `BuildTypeAttr.Companion`)
Looking at the source code, `ATTRIBUTE` was a static interface field in 3.6:
```
public interface BuildTypeAttr extends org.gradle.api.Named {
Attribute<BuildTypeAttr> ATTRIBUTE = Attribute.of(BuildTypeAttr.class);
}
public interface VariantAttr extends org.gradle.api.Named {
Attribute<VariantAttr> ATTRIBUTE = Attribute.of(VariantAttr.class);
}
```
But in 4.0.0-beta01 `ATTRIBUTE` is a static field of companion object:
```
interface BuildTypeAttr : org.gradle.api.Named {
companion object {
@JvmStatic
val ATTRIBUTE: Attribute<BuildTypeAttr> = Attribute.of(BuildTypeAttr::class.java)
}
}
interface VariantAttr : org.gradle.api.Named {
companion object {
@JvmStatic
val ATTRIBUTE: Attribute<VariantAttr> = Attribute.of(VariantAttr::class.java)
}
}
```
So this change is not ABI-compatible and it breaks any plugins which use `BuildTypeAttr.ATTRIBUTE` or `VariantAttr.ATTRIBUTE`.