设为首页 加入收藏

TOP

Android Gradle使用总结(六)
2017-10-13 10:36:55 】 浏览:5361
Tags:Android Gradle 使用 总结

SourceSet 定义其他资源


android {

    sourceSets {
        main {
            jniLibs.srcDirs  //定义 jni 目录
            aidl.srcDirs  //定义 aidl 目录
        }
    }
}
     

applicationVariants

定义 versionName 、VersionCode

在打包的时候分 debug 、release 版本 , 需要控制 versionName


android {

     applicationVariants.all { variant ->
        def flavor = variant.mergedFlavor
        def versionName = flavor.versionName
        if (variant.buildType.isDebuggable()) {
            versionName += "_debug"  //debug 名字
        } else {
            versionName += "_release" //release 名字
        }
        flavor.versionName = versionName
    }

}

定义 APK 包的名字


apply plugin: 'com.android.application'

android {

    defaultConfig {
        applicationId "android.plugin"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //定义渠道
    productFlavors {
        xiaomi {
            //小米
        }
        wandoujia {
            // 豌豆荚
        }
    }

    //打包命名
    applicationVariants.all {
        variant ->
            variant.outputs.each {
                output ->

                    //定义一个新的apk 名字。
                    // 新名字 = app 名字+ 渠道号 + 构建类型 + 版本号 + 当前构建时间
                    def apkName = "appName_${variant.flavorName}_${buildType.name}_v${variant.versionName}_${getTime()}.apk";
                    output.outputFile = new File(output.outputFile.parent, apkName);
            }
    }

}

//获取当前时间
def getTime() {
    String today = new Date().format('YY年MM月dd日HH时mm分')
    return today
}

效果图如下:

这里写图片描述

Task

定义 task


//定义任务1
task task1<<{
    println 'task1'
}

//定义任务2
task task2<<{
    println 'task2'
}

mustRunAfter 定义 task 执行顺序


//task2 的执行顺讯在 task1 之后
task2.mustRunAfter task1
  • 测试1 : gradlew task1

效果如下:


:app:task1
task1

  • 测试2 : gradlew task2

效果如下:


:app:task2
task2

  • 测试3 : gradlew task1 task2

效果如下:


:app:task1
task1
:app:task2
task2
  • 测试4 : gradlew task2 task1

效果如下:


:app:task1
task1
:app:task2
task2

结论

如果单独执行 task1 就只会执行 task1 的任务;单独执行 task2 就只会执行 task2 的任务;
如果同时执行 task1、task2 , 一定会先执行 task1 , 等 task1 执行完后,就会执行 task2 内容。

扩展

上面 mustRunAfter 我们还有一种写法,如下图所示:


task2 {}.mustRunAfter task1

这个写法的效果和 mustRunAfter 是一样的,当然我们还可以在 花括号里面写一些任务,比如 :


task2 {
    println '我最先执行'
}.mustRunAfter task1

下面做个测试,测试命令如下:


gradlew task2 task1

效果如下:

我最先执行

:app:task1
task1
:app:task2
task2

dependsOn 定义 task 依赖

task2 任务依赖于 task1 ,执行 task2 就会先执行 task1


task2.dependsOn task1

测试:


gradlew task2

效果如下:

:app:task1
task1
:app:task2
task2

常用 Gradlew 命令

  • 1、gradlew -v : 查看版本号
------------------------------------------------------------
Gradle 3.3
------------------------------------------------------------

Build time:   2017-01-03 15:31:04 UTC
Revision:     075893a3d0798c0c1f322899b41ceca82e4e134b

Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_112 (Oracle Corporation 25.112-b15)
OS:           Windows 10 10.0 amd64

  • 2、gradlew task : 查看所有的 task

参考资料

Android 利用Gradle实现差异化构建

杨海 Android目录结构


个人微信号:zhaoyanjun125 , 欢迎关注

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇两个可能会经常用到的简便方法 下一篇Android下获取FPS的几种方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目