Android의 사용자 정의 Gradle 플러그인 구현 단계 레코드

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'

플러그인 코드를 수정 한 후 다시 빌드하고 로컬 메이븐에 다시 게시해야합니다.

추천

출처blog.csdn.net/genmenu/article/details/98337935