Gradleの基礎知識

3612 ワード

Gradleの依存度は次のとおりです.
  • implementation
  • api(Gradle 3.0以前のcompileに相当)
  • compileOnly(Gradle 3.0以前のprovidedに相当)
  • runtimeOnly(Gradle 3.0以前のapkに相当)
  • ここでimplementationおよびapiは、debug、release、またはtest宣言、例えばdebugApiを前に追加することができる.
    詳細:
  • implementation依存を使用すると、構築時間を短縮できます.たとえば、Module A implementation Module B、Module B implementation Module Cなどです.この場合、Aは参照できません.Cが変更された場合、Aは再コンパイルする必要はありません.
  • apiの依存性を使用するか、または上記の例では、AはCの内容を参照することができる.
  • compileOnlyの依存はコンパイル時のみ使用可能で、apk(アノテーションプロセッサなど)
  • にパッケージされません.
  • runtimeOnlyの依存コンパイルでは使用できません.apk
  • にパッケージされます.
    基本構文
    第一手資料Groovy API,Gradle Doc
    以下に、Javaと比較的大きな違いがある一般的なものをいくつか示します.
  • with、オブジェクトに
  • を割り当てる
    obj.with {
       name = "android"
       phone= "145555555"
    }
    
  • pythonと類似の判断trueまたはfalse
  • if (str) { }
    
  • kotlin類似の判空
  • obj?.setData()
    
  • eachを使用してMapまたはList
  • を巡回する
    map.each {
       println "map:[${it.key} : ${it.value}]"
    }
    
  • XmlParser解析Xml
  • def xml = new XmlParser().parse(new File("test.xml"))
    //   view   name  
    println xml['view'].@name[0]
    
  • android studioでGroovyを直接実行し、コマンドgradlew test
  • を使用します.
    task(test).doLast {
        println "start execute yuangshuo"
        getString()
    }
    
    def getString() {
    }
    

    その他の基礎文法:Groovyクイック入門ガイドGradleスクリプト基礎全攻略
    Gradleライフサイクルと実行順序
    Gradleのライフサイクルは、Initialization、Configuration、Executionの3つの段階に分けられます.
  • まずsettingsを解析する.gradleはモジュール情報(Initializationフェーズ)
  • を取得する.
  • configureプロジェクトのtop-levelのbuild.各moduleのbuildをconfigureします.gradleは、構成時にtaskを実行する、module実行configureが終了するとprojectを実行する.afterEvaluate(Configurationフェーズ)
  • configure順に実行(Executionフェーズ)
  • //       
    setting##init
    top-level##init
    app##init
    app##afterEvaluate
    common##init
    app##task
    

    詳細学習:Gradleベース-ライフサイクルとHookテクノロジーの構築
    常用Api
    Taskの定義
  • 第1の態様
  • task myTask {
        println "config myTask"
    }
    
    myTask.doLast {
        println "after execute myTask"
    }
    
    myTask.doFirst {
        println "before execute myTask"
    }
    

    1つのtaskを実行すると、taskの構成が先に実行され、doFirstはtaskが実行を開始する前に実行され、doLastは実行後、どちらもtask構成の後に実行されます.いずれのtaskを実行するにも、最初に構成する必要があるからです.各taskが実行される前に、完全な構成が必要です.
  • 第2の態様
  • class MyTask extends DefaultTask {
        @TaskAction
        def hello() {
            println "Hello world."
        }
    }
    task taskname(type : MyTask)
    

    @TaskActionはtaskが実行するアクションを表します
  • 第3の態様
  • project.task('myTask').doLast {
        println "after execute myTask"
    }
    

    Task依存
    task taskA(dependsOn: 'taskB') {
        doLast {
            println 'taskA'
        }
    }
    
    task taskB {
        doLast {
            println 'taskB#1'
        }
    }
    
    taskB.doLast {
        println 'taskB#2'
    }
    

    gradlew taskAを実行し、結果を印刷
    > Task :app:taskB 
    taskB#1
    taskB#2
    
    > Task :app:taskA 
    taskA
    
    

    1つのTaskが実行される前に依存するTaskを実行し、doFirstとdoLastを複数回実行することができる.
    Gradleコマンド:
  • gradlew project:プロジェクトmodule名
  • がリストされます.
  • gradlew build:build操作を実行する
  • gradlew taskname:task
  • を実行
  • gradlew-x taskname:build操作を実行するがtask
  • を除外する
  • gradlew tasks:プロジェクト内のすべてのタスク
  • をリストします.
  • gradlew help–task taskname:taskの詳細を表示する
  • Gradleログ・レベル
  • Errorエラーレベル
  • Quiet重要レベル
  • Warning警告レベル
  • LifeCycle進捗情報
  • Info情報性情報
  • Debugデバッグ情報
  • gradlew-q tasknameはログ出力レベルを制御できます