基本项目搭建
- 项目新建一个Android Module,取名为plugin
-
删除无用资源,新建groovy、resources/META-INF/gradle-plugins目录
image.png - 修改build.gradle
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
implementation gradleApi()
implementation localGroovy()
implementation 'org.ow2.asm:asm:7.1'
implementation 'org.ow2.asm:asm-commons:7.1'
implementation 'org.ow2.asm:asm-analysis:7.1'
implementation 'org.ow2.asm:asm-util:7.0'
implementation 'org.ow2.asm:asm-tree:7.1'
compileOnly 'com.android.tools.build:gradle:3.4.1', {
exclude group:'org.ow2.asm'
}
}
repositories {
jcenter()
}
uploadArchives {
repositories.mavenDeployer {
//本地仓库路径,以放到项目根目录下的 repo 的文件夹为例
repository(url: uri('../repo'))
//groupId
pom.groupId = 'com.peakmain'
//artifactId
pom.artifactId = 'android.plugin'
//插件版本号
pom.version = '1.0.0'
}
}
- groovy目录新建一个文件BuryPointPlugin.groovy并放到com.peakmain.analytics.plugin目录下
这个便是我们的入口了,程序一编译我们就会来到这里并调用apply方法
class BuryPointPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
println("欢迎来到gradle插件")
}
}
-
resources下新建一个com.peakmain.plugin.properties文件,注意:com.peakmain.plugin是我们引入的插件的名字,properties是后缀
image.png -
来到Android Studio的右上角Gradle,选择module plugin的Tasks
image.png
双击之后我们在Android Studio目录下可以看到文件夹[repo]
image.png -
修改根目录的build.gradle
image.png -
修改app的build.gradle
apply plugin: 'com.peakmain.plugin'
-
重新build之后看到这行打印就代表成功了
image.png
扩展
我们在build.gradle通常会看到这些扩展
image.png
如果我们想我们的项目也添加一个扩展,应该怎么做?
- groovy目录新建一个BuryPointExtension.groovy
class BuryPointExtension{
boolean disableAppClick = false
}
修改BuryPointPlugin源码
@Override
void apply(Project project) {
project.extensions.create("peakmainPlugin", BuryPointExtension)
}
-
重新uploadArchives之后在app的build.gradle就可以使用了
image.png
gradle.properties中设置依赖
-
上面我们在app的gradle中设置扩展依赖peakmainPlugin,那如果我们想在gradle.properties中设置,如何做呢?
image.png -
修改BuryPointPlugin源码
class BuryPointPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
BuryPointExtension extension = project.extensions.create("peakmainPlugin", BuryPointExtension)
boolean disableBuryPointPlugin = false
Properties properties = new Properties()
//gradle.properties是否存在
if(project.rootProject.file('gradle.properties').exists()){
//gradle.properties文件->输入流
properties.load(project.rootProject.file('gradle.properties').newDataInputStream())
disableBuryPointPlugin=Boolean.parseBoolean(properties.getProperty("peakmainPlugin.disableAppClick","false"))
}
//如果disableBuryPointPlugin可用
if(!disableBuryPointPlugin){
println("欢迎来到peakmainPlugin")
}else{
println("------------您已关闭了埋点插件--------------")
}
}
}
-
查看结果
image.png -
修改gralde.properties中的属性的值并查看结果
image.png
网友评论