标签:Gradle 8.0 插件开发;AndroidComponentsExtension找不到;Transform废弃;ASM
参考资料
- 《AndroidComponentsExtension》developer.android.com/reference/t…
- 《字节码转换:Android Gradle 插件》blog.sentry.io/bytecode-tr…
- github.com/RicardoJian…
1、Transform废弃
Transform废弃在gradle 8.0以上已经被废弃
2、使用AndroidComponentsExtension
首先要确保新建的java-library 的build.gradle的设置是对的,包含相应的com.android.tools.build:gradle,gradle-api等库。部分同学说就是找不到AndroidComponentsExtension是以上原因引起的。
举例:
plugins {
id 'java-library'
id 'java-gradle-plugin'
id 'maven-publish'
alias(libs.plugins.jetbrains.kotlin.jvm)
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
gradlePlugin {
plugins {
create("MyTestPlugin") {
id = 'com.xx.myplugin'
//插件的包名+类名
implementationClass = 'com.xx.myplugin.MyPlugin'
}
}
}
println("原本的version:" + version)
println("原本的group:" + group)
//设置group
group = 'com.xx.group'
//设置版本号
version = "1.0.0"
println("设置后的group:" + group)
println("设置后的version:" + version)
afterEvaluate {
publishing {
// 配置仓库地址
repositories {
maven {
url = uri('../repo')
}
}
}
}
dependencies {
//Gradle 的核心 API,这包含了 Gradle 的基本功能,如任务声明与执行等。这主要用于开发 Gradle 插件或其他扩展功能。
implementation(gradleApi())
//Android 的构建系统,这基于 Gradle,但提供了 Android 开发特有的构建功能,如 APK 打包,资源管理等
implementation("com.android.tools.build:gradle:8.4.2")
compileOnly("commons-io:commons-io:2.13.0")
compileOnly("commons-codec:commons-codec:1.15")
compileOnly("org.ow2.asm:asm-commons:9.2")
compileOnly("org.ow2.asm:asm-tree:9.2")
}
然后把包引入设置完毕后,就可以使用AndroidComponentsExtension了:
import com.android.build.api.variant.AndroidComponentsExtension
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import com.android.build.gradle.AppPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class MyPlugin : Plugin<Project> {
override fun apply(project: Project) {
//方式1
val androidComponentsExtension = project.extensions.getByType(AndroidComponentsExtension::class.java)
//方式2
project.plugins.withType(AppPlugin::class.java) {
val androidComponentsExtension = project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java)
}
//方式3
project.pluginManager.withPlugin("com.android.application") {
val androidComponentsExtension = project.extensions.getByType(AndroidComponentsExtension::class.java)
}
}
}