Gradle 3-簡単な説明

4828 ワード

Gradle DSL
android{}ブロックには、次の直接構成項目を含めることができます.
defaultConfig{}     , ProductFlavor  。      ProductFlavor  
sourceSets{ }        , AndroidSourceSet  。
buildTypes{ } BuildType  
signingConfigs{ }     ,SigningConfig  
productFlavors{ }       ,ProductFlavor  
testOptions{ }     ,TestOptions  
aaptOptions{ } aapt  ,AaptOptions  
lintOptions{ } lint  ,LintOptions  
dexOptions{ } dex  ,DexOptions  
compileOptions{ }     ,CompileOptions  
packagingOptions{ } PackagingOptions  
jacoco{ } JacocoExtension  。      jacoco  
splits{ } Splits  。

DSLドキュメントには、上記の各タイプの詳細な構成オプションがあります.
工事にはgradleファイルがいくつかあります.一般的にbuildです.gradle.彼の文法がおかしいと思わないでください.彼はマークアップ言語(confやxmlなど)に属していません.彼は標準的なgroovy言語です.彼は標準javaコードに変換します.以下の説明は最適化され、理解しやすいです.
プロジェクト、task、afterEvealuateサイクル、gradleの依存(プロジェクト依存ではなくclasspath環境)、gradleプラグインの概要を理解するには、いくつかの概念があります.
project
プロジェクトを紹介する前にgradleスタイルプロジェクトのディレクトリ構造を熟知しておきます.最初のルート:
- app 
- build.gradle 
- gradlew 
- gradlew.bat 
- settings.gradle 
  • Appの下にメインプロジェクトがあります.
  • build.gradleは、すべてのエンジニアリングを管理するスクリプトであり、gradleコンパイルの依存性を管理します.
  • gradlewとgradlew.batは環境変数を初期化し、彼はプロジェクト構築実行の入り口である.
  • setting.gradleは、すべてのモジュールを登録するために使用されます.

  • 以上のディレクトリはrootProjectとなります.在build.gradleではrootProjectを表すプロジェクトを使用します.しかし、appの下にあるbuild.gradleがプロジェクトを使用する場合、appエンジニアリングを表します.(以上のprojectは変数を表しています.この変数は現在のモジュールのすべての情報を持っており、build.gradleのどこでも使用できます.projectが問題を指すことに注意してください)
    义齿
    afterEvaluateというコールバックは、まずgradleコンパイルプロジェクトを2つのステップに分けます.プロジェクトを構築するために使用されるgradleスクリプトとプロジェクトを構築します.例えば、人はご飯を食べるのにご飯が必要で、ご飯を作る必要があります.では、料理は第一歩で、食事は第二歩です.料理をgradleスクリプトの構築にたとえると、構築プロジェクトは食事です.afterEvaluateというコールバックは、食事のコールバックです.ご飯が炊けたと言って、それからご飯を食べなければなりません.Gradleプロジェクトでは、食事が終わるまで手に入らないextパラメータやandroidパラメータをたくさん登録します.
    task
    プロジェクトの構築は一歩一歩完成しています.例えば、象を冷蔵庫に入れることをいくつかのステップに分けて、まず何が何なのかという哲学的な問題があります.taskはこのステップであり、androidパッケージステップはここでは言うまでもなく、1つのtask列で並列に接続されていることを理解する必要があります.
    :app:preSitDebugBuild UP-TO-DATE
    :app:compileSitDebugAidl UP-TO-DATE
    :app:compileSitDebugRenderscript UP-TO-DATE
    :courierMain:generateDebugRFile UP-TO-DATE
    :app:checkSitDebugManifest
    :courierMain:generateDebugSources UP-TO-DATE
    :app:checkSitDebugManifest UP-TO-DATE
    :app:generateSitDebugBuildConfig UP-TO-DATE
    :app:rpGenerateSitDebugHostConfig
    :app:generateSitDebugResources UP-TO-DATE
    :app:mergeSitDebugResources UP-TO-DATE
    :app:processSitDebugManifest UP-TO-DATE
    :app:processSitDebugResources UP-TO-DATE
    :app:generateSitDebugSources UP-TO-DATE
    

    そのうち、appはappの下を表し、/と理解すればよい.文全体はルートディレクトリの下のappの下の何かtaskを実行することである.UP-TO-DATEは、スキップを表すキャッシュを使用して構築されます.
    在build.gradleでtaskを宣言するのは簡単です.
    task {
        // code block1
        doFirst {
        // code block2
        }
        doLast {
        // code block3
        }
    }
    

    ご飯が熟す前に、code block 1とcode block 2の内容が自動的にコールバックされます.doLastに書かれているものだけが手動で出発した後に実行されるので注意が必要です.Task間でdependOnを使用して依存することができ、プロジェクトを構築するためにtaskを1つずつ直列に接続することができます.1つのtaskが同時に2つのtaskに依存する場合はmustRunAfterを用いてソートする.task間の依存はあまり複雑にしないでください.詳細は公式ドキュメントを参照してください.ここでは理解しています.
    classpath
    Gradle構築にも依存が必要です.私たちのプロジェクトのdependenciesに似ています.ただし、classpathを使用して依存を宣言するのが一般的です.rootProjectのbuild.gradleでbuildscriptが見つかります.
    buildscript {
        repositories {
            flatDir name: 'localRepository', dir: "ma/repos"
            maven {
                url "http://nexus.sf-express.com/nexus/content/groups/public/"
            }
        }
        configurations.all {
            resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
            resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
        }
        dependencies {
            //    
            classpath 'com.android.tools.build:gradle:3.1.3'
            classpath 'com.sf.replugin:replugin-host-gradle:2.2.3.2462.311'
            classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
            classpath "io.lecon.moduleassistant:ma-lib:0.0.4.dev-SNAPSHOT"
        }
    }
    

    このgradle構築プロジェクトは4つの依存,グーグルのandroid依存,プラグイン化依存,butterknifeおよびmaを用いた.彼らはgradleを構築するためにサービスしています.原則としてコードを書く工事には関与しません.コードサービス(調理プロセス)を書くのがもっといいだけです.buildscript->repositories->mavenとallprojects->repositories->mavenは同じですが、gradle構築スクリプト(調理)にサービスし、すべてのサブプロジェクトに依存する(食事)ことを表しています.
    gradleプラグイン
    この話題は詳しく言えば、かなりの紙面が必要ですが、ここでは簡単に紹介します.どんなことができるか紹介します.Gradleのプラグインは非常にオープンです.
    classpathとプロジェクトのdependenciesを動的に削除して、taskを動的に作成して、buildを変更することができます.gradleのdsl.動的にコードを追加または変更する(transformコードスキャン変更技術)、butterknifeでのfindviewbyidの生成とRepluginプラグインの生成(コード生成技術とコード挿入技術)は、コード(sourceSets)、リソースパス、Android Mainfest、Apk出力パスなど、プロジェクト内のすべてのパスを取得します.(taskのdoLastとdependOn).これを使用すると、小型のJvmプログラムを書くこともできますが、コードを書くのは補助プロジェクト開発であることを忘れないでください.コードを書くときは、gradleのライフサイクルに注意し、彼が料理をしているのか食事をしているのかを明確にする必要があります.そうしないと、変数が取得できません.