Gradle插件
Gradle的插件根据是否内置又分为核心插件和社区插件,核心插件是Gradle必要的插件(如java插件),核心插件随着Gradle安装已经解析好了,只需要应用即可;社区插件是共享在社区上的插件,在需要时才被解析到本地。
社区插件会被共享在一些在线仓库中,例如jcenter、Maven仓库等,Gradle还提供了一个专门共享Gradle插件的仓库:Gradle plugin portal,Gradle官方推荐将插件共享在这里。
核心插件可以在下图的gralde-kotlin-dsl-extensions中看到
核心插件一般可以像下面这样写,其实也是kotlin扩展PluginDependenciesSpec而来的, 这样写之后,跳转到实现就会到上图的源码实现中。
plugins {
`java-gradle-plugin`
java
}
上面核心插件一般实现在如下库中
社区插件比如下面的就是发布到社区插件的
plugins {
kotlin("android")
}
有时候看到这种写法不知道什么意思,它其实就是一个PluginDependenciesSpec的扩展函数,我们在Android Studio中查看源码时会跳转到KotlinDependencyExtensionsKt.class中,但是找不到其源码文件,是因为该文件其实是编译时动态生成的,所以找不到源码。
下面为通过StackOverflow找到的具体源码实现
/**
* Applies the given Kotlin plugin [module].
* For example: `plugins { kotlin("jvm") version "$embeddedKotlinVersion" }`
* Visit the [plugin portal](https://plugins.gradle.org/search?term=org.jetbrains.kotlin) to see the list of available plugins.
* @param module simple name of the Kotlin Gradle plugin module, for example "jvm", "android", "kapt", "plugin.allopen" etc...
*/
fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec =
id("org.jetbrains.kotlin.${'$'}module")
通过源码发现,其实没有什么特别的,就是扩展封装了包了一层,和普通的id应用plugin没有区别,还有其他plugin也可以通过插件社区找到,下图为kotlin android插件在插件社区的说明。当然我们还可以搜到“kapt”,“jvm”等
Android Build Gradle
plugins {
id("com.android.application")
}
com.android.application为android build gradle(AGP)提供的gradle插件,也就是我们传统开发classpath中设置的AGP,它除了提供com.android.application还提供下图的com.android.library等插件。
dependencies {
classpath("com.android.tools.build:gradle:7.2.0")
}
以com.android.application为例,通过下面com.android.application.properties文件的描述我们可以看到它的实现代码为AppPlugin
implementation-class=com.android.build.gradle.AppPlugin
上面代码怎么看呢,也就是android build gradle的源码怎么看呢,通过下面代码依赖AGP最终即可在External Libraries中查看到AGP的源码,也就能查看到有哪些plugin及其实现。
dependencies {
implementation(gradleApi())
implementation("com.android.tools.build:gradle:7.2.0")
}
参考: