古いヒ素書き込みプラグイン(1)-Gradleプラグインの基本と簡単な印刷プラグイン

Gradleは何をしますか

Gradleは自動化されたオープンソースビルドツールであり、現在Android開発者に残されている人はいないようです(もちろん、スコープ内にないコマンドラインからコンパイルするような偉大な神々がいます)。ビルドツールとは、Android開発者にとって、コードやリソースなどを対応するapkまたはaarにビルドすることです。下の写真はアンドロイドのパッケージフローチャートです

Javaコードのコンパイル、dexファイルの生成、apk署名、一連のツールプロセスなど、IDが複雑であることがわかります。各ノードが開発者によって行われると、間違いなく生産効率が低下します。 、およびgradleそれ自体が提供するAPIを介して、この一連のプロセスを組み合わせることができ、必要な出力を提供するために必要なのは対応する入力のみです。

建築要素

Gradleビルドには通常、プロジェクト、タスク、プロパティの3つの基本的なビルディングブロックが含まれています。各ビルドには少なくとも1つのプロジェクトが含まれます。プロジェクトには1つ以上のタスクを含めることができます。プロジェクトとタスクは、ビルドを制御するためのプロパティを公開できます。

事業

多くの場合、プロジェクトはAndroidプロジェクトのモジュールに対応し、各プロジェクトには少なくとも1つのbuild.gradleが含まれています。また、複数のタスクをプロジェクトに登録できます。

仕事

タスクは、Javaコードの印刷またはコンパイルのいずれであっても、特定のアクションとして理解できます。タスクは、タスクで定義および実行できます。タスクは特定のワーカーです。上記のAndroidパッケージフローチャートでは、ほとんどすべてのノードがタスク、gradleです。有向非巡回グラフを作成することにより、グラフ内の対応するタスクが順番に実行されます。

プロパティ

プロジェクトとタスクの両方で、getterメソッドとsetterメソッドを介してアクセスできるプロパティが提供されます。外部ユーザーは、プロパティを介して対応するパラメーターを構築プロセスに渡して、さまざまなプロセスや構築の結果を変更できます。

Gradleプラグイン

長い間そう言ってきましたが、Gradleプラグインとは何ですか?Gradleプラグインは、再利用可能なビルドロジックをパックしており、さまざまなプロジェクトやビルドで使用できます。一般的に言って、Gradleプラグインには、プロジェクトで見られる複数のタスクが含まれていることがよくあります(もちろん、含めることもできません)。

apply plugin: 'com.android.application'

これは、実際には、pluginIdがcom.android.applicationであるプラグインを適用したことです。Androidプロジェクトのコンパイルプロセスで使用する多くのタスクは、実際にはこのプラグインで定義されています。

Gradleプラグインをカスタマイズする方法

現在、Gradleプラグインを定義するには、gradleスクリプト、buildSrcプロジェクト、スタンドアロンプ​​ロジェクトの3つの方法があります。gradleスクリプトとbuildSrcモジュールを作成するプロジェクトは、依存関係を介してインポートすることはできず、対応するプロジェクトにコピーして使用することしかできません。スタンドアロンプ​​ロジェクトはプロジェクトをMavenに公開でき、gradleのクラスパスを介してインポートされますが、デバッグは簡単ではありません。ここでは、buildSrcモジュールを使用してプラグインを記述し、生成されたjarパッケージをに公開します。 mavenを使用すると、他のプロジェクトをgradleからインポートできます。

古いヒ素Gradleの価格差をコンパイルします

1.新しいプロジェクトを作成し、buildSrcモジュールを作成します


ここで、builddSrcを作成して操作し、エラーメッセージをコンパイルする場合は次の点に注意してください。

'buildSrc'は予約名あるため、プロジェクト名として使用できません。その後、settings.gradleのインクルード: 'buildSrc'を削除します。これは、buildSrcがGradle6.3名の後にプロジェクトまたはサブプロジェクトとして予約されているためです。以前は、Gradleは、マルチプロジェクトビルドの名前として、またはビルドリストの名前に含まれるサブプロジェクトとしてbuildSrcを使用することを妨げていませんでした。現在、これは許可されていません。現在、buildSrcという名前は、追加のロジックを構築する従来のbuildSrcプロジェクト用に予約されています。この変更は、buildSrcの通常の使用には影響しませんが、setting.gradleファイルでのinclude( "buildSrc")またはincludeBuild( "buildSrc")の使用にのみ影響します。

2.buildSrcでgradleファイルを変更します

 buildscript {
    ext.kotlin_version = "1.4.20"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
apply plugin: 'java-library'
apply plugin: 'kotlin'

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

repositories {
    jcenter()
    google()
}

dependencies {
    implementation gradleApi()
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildSrcモジュールは現在のルートプロジェクトから独立しているため、その構成は最も外側のsettings.gradle構成に従わないため、コンパイル環境であるこのgradleファイルで対応するbuildSrciptを指定する必要があります。ここでのクラスパスは実際にはプラグインリファレンス。

3.プラグインを定義します

class LaoPiShuangPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.tasks.register("HelloProject", PrintProjectNameTask::class.java)
    }
}

open class PrintProjectNameTask : DefaultTask() {

    override fun getGroup(): String? = "laopishuang"

    @TaskAction
    fun execute() {
        project.rootProject.subprojects.forEach {
            println("hello ${it.name}")
        }
    }
}

ここでは、LaoPiShuangPluginという名前のプラグインを定義します。ここでは、

project.tasks.register("HelloProject", PrintProjectNameTask::class.java)

タスクが登録され、タスクの名前はHelloProjectであり、PrintProjectNameTaskを実行すると、現在のプロジェクトルートプロジェクトのすべてのプロジェクトの名前が出力されます。

4.プラグインIDを定義します


図に示されているパスに従って、laopishuang.propertiesという名前のファイルを追加します。ここで、laopishuangはプラグインIDの名前です。laopishuang.propertiesの内容は

implementation-class=com.skateboard.laopishuang.LaoPiShuangPlugin

今すぐLaoPiShuangPluginの完全なクラス名を入力してください。

5.使用する

appmodulのbuild.gradleで呼び出されます

apply plugin:'laopishuang'

コマンドラインで./gradlewHelloProjectを実行すると、対応するプロジェクト名が出力されます。

HelloProjectは、プラグインに登録されたタスクの名前です。または、gradleパネルのlaopishuangの下にあるタスクを見つけ、ダブルクリックして実行します。laopishuangは、PrintProjectNameTaskのコピーのgetGroup()によって返される値に対応します。定義したばかり

結論

後で、Gradleプラグインに限らず、Android関連のプラグインに関するシリーズを作成します。この号の例は比較的単純で、より複雑なGradleプラグインは次の号で作成します。

私の公式アカウントに注意を払うことを歓迎します:「スケートボード上の古いヒ素」

おすすめ

転載: blog.csdn.net/skateboard1/article/details/114144078