Slide 58
Slide 58 text
1. Reflection
// Compatibility code for Android Gradle plugin 4.1.0
val android = project.extensions.getByName("android")
val method = android::class.java.getMethod("onVariantProperties", Action::class.java)
method.invoke(android, Action { variant ->
val className = "com.android.build.api.artifact.ArtifactType"
val enumClass = Class.forName("$className\$MERGED_MANIFEST")
val enumInstance = enumClass.getField("INSTANCE").get(null)
val artifacts = variant::class.java.getMethod("getArtifacts").invoke(variant)
val getMethod = artifacts::class.java.getMethod("get", Class.forName(className))
val manifest = getMethod.invoke(artifacts, enumInstance)
callback.execute(manifest)
})