gradle初识

作者: 太白新星 | 来源:发表于2019-06-04 20:14 被阅读2次

    android studio使用了gradle来自动执行和管理构建流程,gradle很灵活,除了使用基础的gradle闭包外,还可以自定义plugin。以下记录了gradle的初步使用。

    1.mac命令行使用gradle

    gradle需要且仅需要安装java运行环境,因为Android studio安装包自带了一个版本的gradle,在我的电脑上只需要把其加入系统变量即可.

    studio自带的gradle可以在android studio右键-显示包内容中找到,找到后将其配置到环境变量的path目录即可。

    ⁨Android Studio.app⁩ ▸ ⁨Contents⁩ ▸ ⁨gradle⁩ ▸ ⁨gradle-5.1.1⁩

    export PATH=$PATH:Applications/Android\ Studio.app/Contents/gradle/gradle-5.1.1
    

    命令行输入gradle -v能够显示gradle信息表示表示命令行gradle一切就绪。

    官网安装教程

    2.gradle wrapper使用

    加一个这个wrapper的作用是明确构建的gradle版本,wrapper中明确说明了所用的gradle版本,如果在

    .gradle/wrapper/dists下没有找到对应版本的gradle则会先下载再构建。

    gradle wrapper在studio中是自己生成的,所用的gradle版本是Android studio内置的版本。AS的gradle视图下显示了gradle內建的很多task,可以在assembleRelease task右击run来构建release版的依赖库。

    AS和gradle版本对应 AS gradle视图

    如果不依赖AS,需要生成wrapper的话,则需要执行gradle wrapper命令,并且可选性的指定--gradle-version--distribution-type,执行完后会生成如下结构目录,其中gradlew命令和环境变量中的gradle除版本可能不一样外,其它作用完全一样。在mac下需要使用./gradlew而非gradlew

    ├── build.gradle
    ├── settings.gradle
    ├── gradle
    │   └── wrapper
    │       ├── gradle-wrapper.jar
    │       └── gradle-wrapper.properties
    ├── gradlew
    └── gradlew.bat
    

    gradle wrapper官方详细介绍

    3.build scans使用

    build scans是用来生成详细的构建报告的,包括了主机信息、build的日志、构建每步耗时等详细信息,方便自己分析耗时点,或者用于向别人提问时附带的报告。这个功能有网页版和产品版,网页版免费,产品版收费。

    使用起来非常简单,在项目根目录下执行:

     ./gradlew build --scan
    

    然后输入yes同意条款,等待网址出现,复制到浏览器,输入接收结果的邮箱,进邮箱查看即可。此外build scans还支持添加自定义的项,详细手册请参考官网介绍。

    build scans官网示例图

    build scans官方介绍

    4.自定义task

    gradle中Task有Type的概念,每一个特定的Type都有特定的属性和方法,按照我的理解,指定Task为一种type类似于java中类继承,就可以用该Type下的所有字段和方法了。

    命令行中可以使用gradle tasks查看所有的task列表,在AS中可以在gradle视图中直接可视化找到特定task。

    Task闭包本身就有属性和方法,常见的属性有dependsOn、name、path等,常见的方法有

    doFirst、doLast、finalizedBy(paths)等,doFirst表示task执行前执行,doLast表示执行后执行,finalizedBy我理解为将其它任务加入到该任务末尾执行(添加多个任务的haul,执行顺序和书写顺序无关,默认是alpha字母从小到大优先执行),三者顺序为doFirst-finalizedBy-doLast。Project闭包的afterEvaluate表示gradle配置完成的回调监听,配置完成后表示可以执行task了。

    以下假设A、B、C为Base库的三个独立的可选功能模块,现在自定义task将ABC和Base三个moudle打包release版本的aar出来,并复制到releaseAar目录里。

    task buildAar(dependsOn: [':Base:assembleRelease']) {
        //声明顺序不代表执行顺序,默认是alpha字母从小到大执行
        finalizedBy ':C:assembleRelease', ':B:assembleRelease', ':A:assembleRelease'
    }
    
    task buildSdk(type: Copy, dependsOn: buildAar) {
        from('A/build/outputs/aar') {
            include '*-release.aar'
        }
        from('B/build/outputs/aar') {
            include '*-release.aar'
        }
        from('C/build/outputs/aar') {
            include '*-release.aar'
        }
        from('Base/build/outputs/aar') {
            include '*-release.aar'
        }
        into 'releaseAar'
        doLast {
            println("sdk构建完成->${destinationDir}")
        }
    
    }
    

    Task的官方介绍

    参考资料:

    gradle脚本官方指导大全

    任玉刚的gradle csdn

    相关文章

      网友评论

        本文标题:gradle初识

        本文链接:https://www.haomeiwen.com/subject/oynrxctx.html