目录
今天在使用android asm的时候发生找不到AndroidComponentsExtension的错误
project.extensions.getByType Extension of type 'AndroidComponentsExtension' does not exist
错误原因猜测:
在project注册transform的时候报的这个错误,看情况大概是工程有子module,而子module是没有AndroidComponentsExtension的。(只是这个猜测,因为我asm功底不深)
解决办法:
使用Project.pluginManager.withPlugin("com.android.application")过滤模块,获取到ApplicationPlugin,然后进行transform的注册。参考:Bytecode transformations: The Android Gradle Plugin | Product Blog • Sentry
target.pluginManager.withPlugin("com.android.application") {
val androidComponentsExtension =
target.extensions.getByType(AndroidComponentsExtension::class.java)
androidComponentsExtension.onVariants { variant ->
log("variant: ${variant.name}")
variant.instrumentation.transformClassesWith(MethodTraceTransform::class.java, InstrumentationScope.PROJECT){}
variant.instrumentation.setAsmFramesComputationMode(FramesComputationMode.COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS)
}
log("======== end apply ========")
}