プラグインをbuild.gradleに直接実装します
- アプリ層のbuild.gradleで、プラグイン関数を使用するGroovyクラスを作成します
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ファイルを開いて「gradlehello」を実行するか、同期が完了した後に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 2つのフォルダーの名前が固定され、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によって作成されるリポジトリウェアハウスは次のようになります。
-
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にローカルのMavenアドレスを導入します。コードは次のとおりです。
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'
プラグインコードを変更した後、再構築してローカルMavenに再公開する必要があります