Chapter7:使用Gradle创建任务

Chapter7:使用Gradle创建任务

7.1了解Groovy

  • 变量

    //字符串可用单引号/双引号;双引号可以插入表达式
    def name = 'Andy'
    println(name)
    //包含一个单独变量的占位符表达式:$前缀
    def greeting = "Hello, $name!"
    println(greeting)
    //包含一个方法或多个变量的占位符表达式:$前缀+花括号包裹
    def name_size =  "Your name is ${name.size()} characters long"
    println(name_size)
    //字符串差值允许动态执行代码:
    def method = 'toString'
    println new Date()."$method"()
    
  • 类和成员变量

    class MyGroovyClass{
        String greeting
    
        String getGreeting() {
            return greeting
        }
    
        void setGreeting(String greeting) {
            this.greeting = greeting
        }
    }
    
    def instance = new MyGroovyClass()
    instance.setGreeting("Hello")
    //也可以省略括号:println instance.getGreeting
    println instance.getGreeting()
    
  • 方法

    //def 定义方法,隐含一个返回值,即方法体的最后一行
    def square(def num){
        num*num
    }
    println square(4)
    
    //一种更简短的定义方式,使用了Closures
    def square = {num ->
        num*num
    }
    println square(4)
    
  • 匿名代码块(Closures)

    //不指定参数,会自动添加默认参数
    Closure square = {
        it*it
    }
    println square (4)
    
  • 集合:(lists 和 maps)

    //List
    List list = [1,2,3,4,5]
    
    list.each() {element->
        println(element)
    }
    
    //使用it变量化简
    list.each() {
        println(it)
    }
    
    //Map
    Map price = [apple:10,banana:20]
    
    println price.get('apple')
    println price.banana
    
  • Gradle 中的 groovy

    apply plugin: 'com.android.application'
    //等价于
    project.apply([plugin: 'com.android.application'])
    //apply()是Project类的一个方法;Project是每个Gradle构建的基础代码块;
    //apply()需要一个参数:一个Map(key为plugin,值为com.android.application)
    
    dependencies{
        implementation 'androidx.cardview:cardview:1.0.0'
    }
    //代码块是一个Closure,将dependencies()方法传递给Project对象
    //closure被传递给一个包含add()方法的DependencyHandler
    //该方法接受三个参数:一个定义配置的字符串,一个定义依赖标志的对象,一个针对依赖特定属性的closure
    //等价于
    project.dependencies({
        add('implementation','androidx.cardview:cardview:1.0.0',{
            //Configuration statements
        })
    })
    

7.2 了解任务

  • 任务属于一个 Project 对象,并且每个任务都可以执行 task 接口。

    task hello{
    	//配置阶段
    	println('Configuration') 
        
        //执行阶段
    	doLast{
          println 'Execution'
        } 
    }
    

执行简单任务

  • doFirst/doLast

    doFirst()总是添加一个动作到task的最前面,doLast()总是添加一个动作到task的最后面。

    task mindTheOrder{
    	doFirst{
    		println 'A'
    	}
    	
    	doFirst{
    		println 'B'
    	}
    	
    	doLast{
    		println 'C'
    	}
    	
    	doLast{
    		println 'D'
    	}
    }
    

任务FirstLast

  • taskAfter:(安排执行任务顺序)

    task task1{
    	doLast{
    		println("task1")
    	}
    }
    
    task task2{
    	doLast{
    		println("task2")
    	}
    }
    
    task2.mustRunAfter task1
    

    taskAfter

  • dependsOn:(任务依赖)

    task task1{
    	doLast{
    		println("task1")
    	}
    }
    
    task task2{
    	doLast{
    		println("task2")
    	}
    }
    
    task2.dependsOn task1
    

    dependsOn

7.3 操控构建 variants

  • Hook 到 Android 插件的方式之一是操控构建 variants。

    android.applicationVariants.all{variant ->
    	// Do something 
    }
    

    依赖库时使用 libraryVariants 替代 applicationVariants。

    注意:通过All()遍历构建variant,而不是 each(),因为each()会在构建variant被Android插件构建之前的评测阶段被处罚。all()方法会在每次添加新项目到集合是被触发。

  • 自动重命名APK

    android.applicationVariants.all{variant ->
        variant.outputs.all{output ->
            outputFileName = "app-${variant.versionName}.apk"
        }
    }
    

7.4 参考资料

  • Gradle For Android
发布了64 篇原创文章 · 获赞 65 · 访问量 8823

猜你喜欢

转载自blog.csdn.net/qq_33334951/article/details/102824122