当前位置: 首页 > news >正文

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
compileReleaseUnitTestSourcesBuild 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

可以看到,这里有很多的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"}
}

然后在命令行执行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

它会先配置完成,才会执行.在一个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
}

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

task clean(type: Delete) {delete rootProject.buildDirdoLast {def file = new File('test.txt')delete fileprintln "清理"}
}

然后我们在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'

然后就可以在项目的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();
}

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

http://www.lryc.cn/news/213226.html

相关文章:

  • Xcode运行程序提示 Executable Path is a Directory 问题解决
  • 决策树的优缺点
  • Flask后端开发(二) - 功能实现和项目总结
  • 思维训练第五课插入语和主谓一致
  • 开源利器:it-tools 项目介绍
  • 基于和声算法的无人机航迹规划-附代码
  • [Linux]线程池
  • 使用es实现轻量级分布式锁
  • 富文本编辑器特殊字符的解码编码
  • 几种软件开发方法对比
  • 在Maven中发布项目到Nexus私有服务器
  • TypeScript - 类 -类的继承
  • QT: QLineEdit 密码模式、QLineEdit输入模式
  • ES6中Map集合
  • 【Leetcode Sheet】Weekly Practice 13
  • 技术贴 | 一文掌握 Google Test 框架
  • 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类 计算机竞赛
  • 非线性时滞系统的无模型预测控制
  • 局域网内两台电脑共享文件夹(通过网线直连共享数据)
  • 什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(3)
  • 一致性hash负载均衡
  • MAC下安装Python
  • Android NDK开发详解之JNI中的库文件
  • KNN模型
  • Python 学习1 基础
  • 网络协议--TCP的超时与重传
  • Thread
  • FOC系列(二)----继续学习DRV8301芯片
  • A. Directional Increase -前缀和与差分理解 + 思维
  • openpnp - java调试环境 - 最好只保留一套jdk环境