build.gradle에서 직접 플러그인 구현
- 앱 레이어의 build.gradle에서 플러그인 함수를 사용하는 그루비 클래스를 만듭니다.
class GreetingPluginExtension {
//插件类中的属性
String message = "Hello"
}
- org.gradle.api.Plugin 인터페이스를 구현하고 reapply () 메서드에서 플러그인 클래스를 호출합니다.
class GreetingPlugin implements Plugin<Project> {
@Override
void apply(Project target) {
//生成插件类的对象,greeting 是插件类的别名,编译完成后可以用来使用闭包的形式修改插件类中的属性
def extension = target.extensions.create("greeting", GreetingPluginExtension)
target.task("hello") {//生产名为hello的任务,可以在命令行中使用 gradle hello 运行该任务
doLast {
println(extension.message)
}
}
}
}
- build.gradle에서 사용자 지정 플러그인 소개
apply plugin: GreetingPlugin
- 터미널에서 build.gradle 파일을 열고 "gradle hello"를 실행하거나 아래와 같이 동기화가 완료된 후 AS의 Gradle 목록에서 실행합니다.
- 플러그인의 별칭을 사용하여 build.gradle의 플러그인 클래스에있는 속성을 수정합니다. build.gradle에서 기본적으로 생성 된 다음 코드와 같이 다음과 같이 동일한 방식으로 사용자 지정 플러그인의 속성을 수정할 수도 있습니다.
defaultConfig {
applicationId "com.plugin.ggg.myapplication"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
apply plugin: GreetingPlugin //首先要先引入插件
//修改插件类中的属性,再次运行hello ,便可以输出修改后的值
greeting{
message="1111"
}
gradle hello를 실행하고 gradle이 내부 명령이 아니라는 메시지를 표시하는 경우 AndroidStudio 설치 디렉토리의 gradle / gradle-5.1.1 (이 5.1.1은 gradle의 버전 번호) / bin을 환경 변수의 경로에 추가하십시오. , 컴퓨터를 다시 시작하십시오.
프로젝트 독립 플러그인
- 프로젝트에서 새 Android 라이브러리 모듈 만들기
- src / main의 모든 파일을 삭제하고 모듈에서 build.gradle의 모든 내용을 삭제합니다.
- 모듈의 build.gradle에 다음 코드를 추가하고 동기화하십시오.
apply plugin: 'groovy'//引入 groovy支持的插件
apply plugin: 'maven' //引入maven支持的插件
dependencies {
//引入 groovy支持的插件
compile gradleApi()
compile localGroovy()
}
//使用maven仓库
repositories {
mavenCentral()
}
//定义插件的在本地maven中的id
group = 'test.plugins'
//定义插件的在本地maven中的版本号
version = '1.0.0'
//将插件打包上传到本地maven
uploadArchives {
repositories {
mavenDeployer {
//指定本地maven的路径
repository(url: uri('./repos'))
}
}
}
-
src / main에 새 groovy 폴더를 만들고, 새 .groovy 파일을 만들고, src / main에 새 리소스 폴더를 만들고, 새 META-INF 폴더를 만들고, META-INF에 새 gradle-plugins 폴더를 만듭니다. , this 두 폴더의 이름이 고정 된 다음 gradle-plugins에 xxx.properties 파일을 생성합니다. xxx는 사용자 정의 할 수 있으며 로컬 maven에서 플러그인 그룹의 값으로 사용됩니다. 디렉토리 구조는 다음과 같습니다.
-
플러그인 클래스의 구현은 다음과 같습니다.
package gradle
import org.gradle.api.Plugin
import org.gradle.api.Project
//实现Plugin接口,重写apply 方法
class PluginImpl implements Plugin<Project> {
@Override
void apply(Project target) {
//在这里实现插件功能
System.out.println("========================")
System.out.println("hello gradle plugin!")
System.out.println("========================")
}
}
- xxx.properties 파일의 내용은 다음과 같습니다.
# 指定插件类的入口 ,包名.类名
implementation-class=gradle.PluginImpl
-
지금 동기화 한 후 명령 줄의 모듈에서 build.gradle 파일을 열고 "gradle uploadArchives"명령을 입력하여 플러그인을 로컬 maven에 게시하거나, 아래와 같이 AS의 Gradle에 게시합니다.
-
출시 후 해당웨어 하우스는 로컬 maven에서 생성됩니다. "./repos"로 지정된 로컬 maven 주소는 모듈의 다음 레벨 폴더에 있으므로 maven에서 생성 한 repos웨어 하우스는 다음과 같습니다.
-
maven-metadata.xml의 내용은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<!--插件在project 下面的build.gradle引入时的形式为[groupId]:[artifactId]:[version]-->
<groupId>test.plugins</groupId>
<artifactId>plugin</artifactId>
<versioning>
<release>1.0.0</release>
<versions>
<version>1.0.0</version>
</versions>
<lastUpdated>20190803052405</lastUpdated>
</versioning>
</metadata>
- 프로젝트에서 플러그인을 사용하고 프로젝트의 build.gradle에 로컬 메이븐 주소를 소개합니다. 코드는 다음과 같습니다.
buildscript {
ext.kotlin_version = '1.3.31'
repositories {//声明了工程所需要的依赖库,供下面dependencies下载
google()
jcenter()
maven {
url uri("./plugin/repos") //本地maven中插件的地址
}
}
dependencies {//声明了具体的依赖,使用[group]:[name]:[version]形式
classpath 'com.android.tools.build:gradle:3.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//引入插件的依赖
classpath 'test.plugins:plugin:1.0.0'
}
}
- 플러그인을 사용해야하는 모듈에 플러그인 도입
apply plugin: 'test.plugins'
플러그인 코드를 수정 한 후 다시 빌드하고 로컬 메이븐에 다시 게시해야합니다.