Android StudioカスタムGradle Plugin

4124 ワード

Android Gradle Plugin
Android Gradle Pluginには2つの形式があります
  • 直接build.gradle/作成x.gradleで開発
  • Plugin書き換えbuildプロセス
  • を実現する.
    カスタムプラグインの開発方法について説明します
    まずGradle Pluginプロジェクトを作成する
  • テストを容易にするためにAndroidエンジニアリングを作成し、Android library Moduleエンジニアリング
  • を作成します.
    moduleの作成
  • 図中矢印で示すようなディレクトリおよびファイル
  • を削除する.
    無効なディレクトリの削除
  • build.gradleでgroovy方式
  • に変更する.
        apply plugin: 'groovy'
    
        dependencies {
            compile gradleApi()
            compile localGroovy()
        }
    

    Gradle Pluginをカスタマイズし、mainディレクトリの下にgroovyディレクトリを作成します.このディレクトリの下に独自のコードを作成します.
    ログの削除を例に
    Groovyプロジェクト構造
    1.gradle Pluginを継承し、クラスの接尾辞はもはやである.JAvaではなくgroovy
    class DelLogPlugin implements Plugin {
      @Override
      void apply(Project project) {
    
    
        project.extensions.create('dellogExtension', DelLogExtension);
    
        project.afterEvaluate {
          // gradle        
          project.logger.error("dellogExtension : " + project.dellogExtension.sourceDir);
    
          def rootDir = project.projectDir.toString().plus(project.dellogExtension.sourceDir);
    
          project.logger.error(rootDir);
    
          DelLogUtil.delLog(new File(rootDir));
        }
    
        project.task('dellog', {
          project.logger.error("dellogExtension : " + project.dellogExtension.sourceDir);
    
          def rootDir = project.projectDir.toString().plus(project.dellogExtension.sourceDir);
    
          project.logger.error(rootDir);
    
          DelLogUtil.delLog(new File(rootDir));
    
        })
    
      }
    }
    
    afterEvaluateはgradleの構築が完了すると自動的に実行されますが、taskは、コードのdellogのような1つのプラグインに複数のTaskを手動で実行する必要があります.コンソールでgradle -q dellogを実行することも、gradleグラフィックインタフェースで実行することもできます.
    グラフィックインタフェース実行task
    2.入力可能なGradleプラグインの作成
    多くの場合、パラメータを入力し、パラメータに基づいて処理する必要があります.project.extensions.create(...,...); 前はName、後ろはModel、Modelでgralde scriptでキーを合わせるといいです.
    class DelLogExtension {
    
      String sourceDir;
    
    }
    
    
    class DelLogPlugin implements Plugin {
      @Override
      void apply(Project project) {
    
    
        project.extensions.create('dellogExtension', DelLogExtension);
    
        ......
    

    そしてappの下のbuild.gradleで
    dellogExtension.sourceDir = '/src'
    

    または
    dellogExtension {
      sourceDir = '/src'
    }
    

    入力の使用
    3.mainの下にresourcesディレクトリを作成するsrc/main/resources/META-INF/gradle-plugins/com.branch.plugin.dellog.properties xxx.properties将来apply plugin:xxxプラグイン名として、ここのディレクトリ構造は間違いなく、META-INFからgradle-pluginsまであります.
    内容:
    `implementation-class=com.branch.dellog.DelLogPlugin(  Plugin  ,      )`
    

    4.ローカル・ウェアハウスへのパブリッシュ
    現在のlibプロジェクトbuild.gradleでmavenサポートを追加
    apply plugin: 'maven'
    
    repositories {
      mavenCentral()
    }
    

    次に対応するmaven deployerを追加します
    //  maven deployer
    uploadArchives {
      repositories {
        mavenDeployer {
          //     GAV  
          pom.groupId = 'com.branch.plugin'
          pom.artifactId = 'dellog'
          pom.version = '1.0.0'
          //         
          repository(url: uri('../repo'))
        }
      }
    }
    

    この設定は、前のディレクトリのrepoに公開され、gradle taskにuploadArchivesというtaskがあることを確認できます.
    ローカルtaskにパブリッシュ
    実行すると、repoで対応するjarパッケージが表示されます.
    ローカル・ウェアハウスの表示
    5.ローカル倉庫の使用
    プロジェクトのbuild.gradleのbuildscriptにローカルウェアハウスアドレスを追加
    buildscript {
      repositories {
        jcenter()
        maven {
          url uri("/repo")
        }
      }
      dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath 'com.branch.plugin:dellog:1.0.0'
    
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
      }
    }
    

    そしてappのbuild.gradleにpluginを追加
    apply plugin: 'com.branch.plugin.dellog'
    

    これらのすべての構成が正しい場合、同期項目はGradle Consoleでログに表示されます.
    github demo