Gradle--自定义Task
来源:互联网 发布:全国计算机二级vb题型 编辑:程序博客网 时间:2024/04/30 20:41
4.1 Writing Your Own Custom Tasks
The Gradle DSL supports a task block for defining your own custom tasks. The API
includes a wide range of existing tasks (like Copy , Wrapper , and Exec ) that you can use
simply by setting properties.
大概原意:Gradle DSL支持使用task作用块来自定义任务。API包含了一系列已存在的task,例如:Copy/Wrapper/Exec等,你可以通过设置属性来个性化使用
// Copy APKs to another foldertask copyApks(type: Copy) { from("$buildDir/outputs/apk") { exclude '**/*unsigned.apk', '**/*unaligned.apk' } into '../apks'}
- from
指定复制的来源 - exclude
排除不需要复制的文件 - into
指定复制的去处
1 the configuration and execution phases of Gradle
During the
configuration phase, Gradle builds a DAG based on their dependencies. It then exe‐
cutes the desired task, along with its dependencies. All tasks are configured before
any are executed.
大概原意:在配置阶段,Gradle会根据所有任务的依赖关系构建一个DAG关系图。然后延着它们的依赖关系执行特定的任务。因此,在任何任务执行之前都需要完成所有任务的配置工作。
// A custom task to print available variantstask printVariantNames() { doLast { android.applicationVariants.all { variant ->println variant.name } }}
// Install all the debug flavors on a single devicetask installDebugFlavors() { android.applicationVariants.all { v -> if (v.name.endsWith('Debug')) { String name = v.name.capitalize() dependsOn "install$name" } }}
4.2 Adding Custom Tasks to the Build Process
During the initialization phase, Gradle assembles the tasks into a sequence according
to their dependencies. The result is a DAG. The “directed” term means each dependency arrow goes in one direction. “Acyclic”
means that there are no loops in the graph.
大概原意:在初始化阶段,Gradle根据各任务之间的依赖关系将任他们分解成一个序列,该序列就是一个DAG。“定向”意味着每个依赖箭头在同一个方向上。“无环”表示图中没有循环。
// Updated copy task to generate them firsttask copyApks(type: Copy, dependsOn: assembleDebug) { from("$buildDir/outputs/apk") { exclude '**/*unsigned.apk', '**/*unaligned.apk' } into '../apks'}
- assembleDebug先执行,再执行copyApks
// Modified clean task to remove the apks directorytask clean(type: Delete) { delete rootProject.buildDir, 'apks'}
- 删除任务,The delete task in Gradle accepts a list of files or folders
4.3 Excluding Tasks
// Disabling all tasks that start with the word lintgradle.taskGraph.whenReady { graph -> graph.allTasks.findAll { it.name ==~ /lint.*/ }*.enabled = false}
The allTasks property of the task graph invokes the getAllTasks method, using
the normal Groovy idiom. That returns a java.util.List of tasks. Groovy adds a
findAll method to List that returns only the tasks that satisfy the supplied closure.
In this case, the closure says access the name property of each task and check whether
or not it exactly matches the regular expression. Applying the “spread-dot” operator
to the resulting list disables each task in the list.
The result is that all tasks that have a name that starts with the letters lint have their
enabled property set to false , so none of them will run.
大概原意:使用Groovy语法调用getAllTasks方法获取所有的task,通过findAll方法把所有以lint开头的任务的enabled属性设置为false,这样这些任务就不会执行
4.4 Custom Source Sets(待学习)
4.5 Using Android Libraries
// A settings.gradle file with an added moduleinclude ':app', ':icndb'
From a Gradle perspective, Android libraries are subprojects from the root. That
means they are like Android applications, but in a subdirectory. The name of the
added module (Android Studio calls them modules) is therefore added to the set‐
tings.gradle file
大概原意:从Gradle的角度来看,Android lib库是根目录的一个子项目。这意味着他们就像一个在子目录的项目。因此,该lib库会被添加到settings.gradle文件中去
1 Each library has its own Gradle build file, which supports the same settings as the root project. 每个lib库有自己的gradle配置文件,同样支持根目录的配置
2 Use the library plug-in
apply plugin: 'com.android.library'android { compileSdkVersion 23 buildToolsVersion "23.0.3" packagingOptions { exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'LICENSE.txt' } defaultConfig { minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } }}dependencies { compile 'com.google.code.gson:gson:2.6.2' compile 'com.squareup.retrofit2:retrofit:2.0.1' compile 'com.squareup.retrofit2:converter-gson:2.0.1'}
Using the ICNDB module in the app
apply plug-in: 'com.android.application'android { compileSdkVersion 23 buildToolsVersion "23.0.3" // ... all the regular settings ... }dependencies { compile project(':icndb')}
- Gradle--自定义Task
- 自定义Gradle task
- gradle自定义task
- Android Gradle 自定义Task 详解
- Gradle 自定义Task 打Jar包
- Android Gradle 自定义Task详解二:进阶
- Gradle 使用指南 -- Gradle Task
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gauge中Gradle自定义Task失败的解决方法
- Gradle学习系列之九——自定义Task类型
- 如何将自定义task在gradle系统task运行前后执行?
- task与自定义task
- configuring gradle test task
- Gradle 中的 task 依赖
- RMS (Rights Management Services)基于SDK2.1的二次开发代码示例
- maven项目Setting property 'source' to 'org.eclipse.jst.jee.server:abc-did not find a matching property
- java里map相关子接口和实现类
- TP5与TP3.2的可以通用的方法
- 3min初识ListView(4)-inflate打气筒实现复杂布局
- Gradle--自定义Task
- JAVA是比较热门,但我们自己不能头脑发热
- Java学习路线图
- 机器学习小组知识点4:批量梯度下降法(BGD)
- 前端相似知识点
- AJAX异步请求增加Loading
- Spring 声明式事务管理
- XSS存储型攻击的末日
- 单向加密算法MD5和SHA