• android studio启动Task配置


    Android studio 高版本默认不开启Task配置,需要自己手动开启

    1.低版本配置路径:(复制他人图片)

    在这里插入图片描述

    2.高版本路径:添加下图勾选配置即可

    3.gradle task

    3.1 初识task

    gradle中所有的构建工作都是由task完成的,它帮我们处理了很多工作,比如编译,打包,发布等都是task.我们可以在项目的根目录下,打开命令行(AS自带,底部有Terminal,打开就行)执行gradlew tasks查看当前项目所有的task.

    在命令行如果执行失败,则将项目的JDK location设置成本地jdk的路径,而且jdk的版本还需要是java 8. 我用的jdk版本是1.8.0_231.

    > Task :tasks
    
    ------------------------------------------------------------
    Tasks runnable from root project
    ------------------------------------------------------------
    
    Android tasks
    -------------
    androidDependencies - Displays the Android dependencies of the project.
    signingReport - Displays the signing info for the base and test modules
    sourceSets - Prints out all the source sets defined in this project.
    
    Build tasks
    -----------
    assemble - Assemble main outputs for all the variants.
    assembleAndroidTest - Assembles all the Test applications.
    build - Assembles and tests this project.
    buildDependents - Assembles and tests this project and all projects that depend on it.
    buildNeeded - Assembles and tests this project and all projects it depends on.
    bundle - Assemble bundles for all the variants.
    clean - Deletes the build directory.
    cleanBuildCache - Deletes the build cache directory.
    compileDebugAndroidTestSources
    compileDebugSources
    compileDebugUnitTestSources
    compileReleaseSources
    compileReleaseUnitTestSources
    
    Build Setup tasks
    -----------------
    init - Initializes a new Gradle build.
    wrapper - Generates Gradle wrapper files.
    
    Cleanup tasks
    -------------
    lintFix - Runs lint on all variants and applies any safe suggestions to the source code.
    
    Help tasks
    ----------
    buildEnvironment - Displays all buildscript dependencies declared in root project 'Hello'.
    components - Displays the components produced by root project 'Hello'. [incubating]
    dependencies - Displays all dependencies declared in root project 'Hello'.
    dependencyInsight - Displays the insight into a specific dependency in root project 'Hello'.
    dependentComponents - Displays the dependent components of components in root project 'Hello'. [incubating]
    help - Displays a help message.
    model - Displays the configuration model of root project 'Hello'. [incubating]
    projects - Displays the sub-projects of root project 'Hello'.
    properties - Displays the properties of root project 'Hello'.
    tasks - Displays the tasks runnable from root project 'Hello' (some of the displayed tasks may belong to subprojects).
    
    Install tasks
    -------------
    installDebug - Installs the Debug build.
    installDebugAndroidTest - Installs the android (on device) tests for the Debug build.
    uninstallAll - Uninstall all applications.
    uninstallDebug - Uninstalls the Debug build.
    uninstallDebugAndroidTest - Uninstalls the android (on device) tests for the Debug build.
    uninstallRelease - Uninstalls the Release build.
    
    Verification tasks
    ------------------
    check - Runs all checks.
    connectedAndroidTest - Installs and runs instrumentation tests for all flavors on connected devices.
    connectedCheck - Runs all device checks on currently connected devices.
    connectedDebugAndroidTest - Installs and runs the tests for debug on connected devices.
    deviceAndroidTest - Installs and runs instrumentation tests using all Device Providers.
    deviceCheck - Runs all device checks using Device Providers and Test Servers.
    lint - Runs lint on all variants.
    lintDebug - Runs lint on the Debug build.
    lintRelease - Runs lint on the Release build.
    lintVitalRelease - Runs lint on just the fatal issues in the release build.
    test - Run unit tests for all variants.
    testDebugUnitTest - Run unit tests for the debug build.
    testReleaseUnitTest - Run unit tests for the release build.
    To see all tasks and more detail, run gradlew tasks --all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    可以看到,这里有很多的task.比如我们在命令行执行gradlew clean就是clean.执行gradlew installDebug就是构建debug项目然后安装到手机上.

    3.2 编写task

    书写task非常简单,比如我们在根目录的build.gradle中加入一个hello的task

    task hello() {
        println "hello world"
    
        //将给定的闭包 添加到此task操作链表的开头
        doFirst {
            println "hello task doFirst"
        }
    
        doLast {
            println "hello task doLast"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后在命令行执行gradlew hello,输出如下

    setting 开始配置
    setting 配置完成
    
    > Configure project :
    根build.gradle 开始配置
    hello world
    根build.gradle 配置完成
    
    > Configure project :app
    app build.gradle 开始配置
    app build.gradle 配置完成
    
    > Task :hello
    hello task doFirst
    hello task doLast
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    它会先配置完成,才会执行.在一个task内部其实拥有一个action列表,执行的时候其实就是执行这个列表,它的类型是一个List.上面的doFirst和doLast就是创建action的两个方法,文档.doFirst是在最开始执行,doLast是在最后执行,大括号里面传入的是闭包.

    3.3 task执行顺序

    task是有执行顺序的,在创建完Android项目之后,根目录下的build.gradle中,有一个clean的task.这个是AS自动给我们生成的.

    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    
    • 1
    • 2
    • 3

    我们先在根目录下创建test.txt文件,然后我们在这个task中做一些改动,执行到clean这个task时删除根目录下的test.txt文件.

    task clean(type: Delete) {
        delete rootProject.buildDir
    
        doLast {
            def file = new File('test.txt')
            delete file
            println "清理"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    然后我们在hello这个task的下面写上

    hello.dependsOn clean
    这样就表示hello这个task依赖clean这个task,当执行hello这个task时需要先执行clean. 我们在命令行执行gradlew hello看看是不是这样.我执行之后它的输出是

    Task :clean
    清理

    Task :hello
    hello task doFirst
    hello task doLast
    先执行clean,再执行hello这个task.而且还看到test.txt文件被删除(如果看到没删除,刷新一下看看)了,那么说明确实是clean先执行.

    这个顺序有什么用?其实是很有用的,比如执行安装task的时候,肯定会先执行编译,打包这些步骤.

    3.4 自带 gradle task

    当我们在AS中创建Android项目的时候,默认会带一些Android的一些gradle task,这些task都是gradle和Android Gradle Plugin给我们创建好的,可以直接用.
    在这里插入图片描述
    比如我们上面使用到的gradlew clean是用来清理项目的.和编译相关的task主要有:build和assemble,其中build依赖assemble,也就是说执行build之前会先执行assemble。在Android上,会根据buildType和productFlavor的不同自动创建多个assembleXxx任务,如assembleDebug,assembleRelease等,assemble会依赖所有的assembleXxx任务,也就是说执行assemble会先执行assembleDebug,assembleRelease等一系列的assemble任务。

    如果想看Android Gradle Plugin源码,可以在app/build.gradle中的dependencies下面引入

    compileOnly 'com.android.tools.build:gradle:3.5.2'
    
    • 1

    然后就可以在项目的External Libraries中看到该jar的源码,
    在这里插入图片描述

    比如clean这个task是在com.android.build.gradle.tasks.CleanBuildCache.java里面定义的

    @TaskAction
    public void clean() throws IOException {
        Preconditions.checkNotNull(buildCache, "buildCache must not be null");
        buildCache.delete();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    通过查询gradle官方文档可知,@TaskAction的作用:Marks a method as the action to run when the task is executed. 将方法标记为执行任务时要运行的动作.

  • 相关阅读:
    “蔚来杯“2022牛客暑期多校训练营6
    缓存与数据一致性问题
    简单网络管理协议SNMP
    活动回顾 | 数字外贸私享会【上海站】成功举办
    2022-08-09 mysql/stonedb-子查询性能提升-概论
    从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1
    UIC 564-2 座椅耐火测试
    基于JAVA课程网站设计计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    grpc c++部署
    正确衡量研发人员绩效/生产力的几种方式
  • 原文地址:https://blog.csdn.net/u010274449/article/details/134050271