Android的Gradle技巧 4.1编写您自己的自定义任务

32 篇文章 0 订阅
4.1编写您自己的自定义任务
问题
你想用你自己的任务来定制Gradle构建过程。

将任务元素添加到Gradle构建文件。使用Android插件提供的额外属性,使开发更轻松。
讨论
Gradle DSL支持用于定义自己的自定义任务的任务块。 API包括大量现有任务(如复制,包装和执行),您只需通过设置属性即可使用。
例如,复制任务包括from和into属性,from块可以配置为排除指定的文件名模式。要将所有APK复制到新文件夹(不包括未签名或未对齐的文件夹)中,请将示例4-1中的任务添加到模块构建中。
实例4-1。将APK复制到另一个文件夹
task copyApks(type: Copy) {
from("$buildDir/outputs/apk") {
exclude '**/*unsigned.apk', '**/*unaligned.apk'
}
into '../apks'
}
buildDir属性引用默认构建目录(app / build),美元符号用于将其注入Groovy字符串(使用双引号)。复制任务的文档显示,里面的排除块支持Ant风格的目录名,这意味着**匹配所有后代目录。
如果您不想简单地配置现有的Gradle任务,您需要了解Gradle的配置和执行阶段之间的区别。在配置阶段,Gradle基于它们的依赖性构建DAG。然后它执行所需的任务及其依赖关系。所有任务之前都已配置
任何被执行。
Gradle喜欢声明性任务,例如4-1的任务,你指定你想做什么,但不是如何做。但是,如果需要执行命令,请向Gradle任务添加一个doLast块。
在这里重复从示例4-2中所示的任务,从配方3.2。
实例4-2。用于打印可用变量的自定义任务
task printVariantNames() {
doLast {
android.applicationVariants.all { variant ->
println variant.name
}
}
}
任务在doLast块之前或之后执行的任何操作都将在配置时运行。 doLast块中的代码本身在执行时运行。
Android插件添加了一个android属性,它依次具有一个返回所有buildType / flavor组合的applicationVariants属性。在这种情况下,它们都被打印到控制台。
applicationVariants属性仅适用于com.android.application插件。 Android库中提供了libraryVariants属性。 testVariants属性在两者中可用。
要将所有调试风格安装到单个设备上(假设它们都具有唯一的applicationId值),请使用示例4-3中的任务。
实例4-3。在单个设备上安装所有调试风格
task installDebugFlavors() {
android.applicationVariants.all { v ->
if (v.name.endsWith('Debug')) {
String name = v.name.capitalize()
dependsOn "install$name"
}
}
}
在这种情况下,dependsOn方法显示这是配置过程的一部分,而不是执行。每个变体名称(如friendlyDebug)都大写(FriendlyDebug),然后将相应的安装任务(安装FriendlyDebug)作为installDebugFlavors任务的依赖项添加。
结果是在配置过程中,installArrogantDebug,install FriendlyDebug和installObsequiousDebug都作为依赖添加到installDebugFlavors。因此,在命令行执行installDebugFlavors需要所有三个flavor安装。
实例4-4。安装所有调试flavor
./gradlew instDebFl
:app:preBuild UP-TO-DATE
:app:preArrogantDebugBuild UP-TO-DATE
:app:checkArrogantDebugManifest
// ... lots of tasks ...
:app:assembleArrogantDebug UP-TO-DATE
:app:installArrogantDebug
Installing APK 'app-arrogant-debug.apk' on 'Nexus_5_API_23(AVD) - 6.0'
Installed on 1 device.
:app:checkFriendlyDebugManifest
// ... lots of tasks ...
:app:assembleFriendlyDebug UP-TO-DATE
:app:installFriendlyDebug
Installing APK 'app-friendly-debug.apk' on 'Nexus_5_API_23(AVD) - 6.0'
Installed on 1 device.
:app:checkObsequiousDebugManifest
// ... lots of tasks ...
:app:assembleObsequiousDebug UP-TO-DATE
:app:installObsequiousDebug
Installing APK 'app-obsequious-debug.apk' on 'Nexus_5_API_23(AVD) - 6.0'
Installed on 1 device.
:app:installDebugFlavors
BUILD SUCCESSFUL

你可以看到,编写自己的自定义任务需要至少一些Groovy的知识。因此,广泛的讨论有点超出了本书的范围,但是有好几个好的Groovy资源。本书中定义了其他Groovy概念。

扩展ADP超时期
另外,虽然构建过程相对较快,但部署过程可能不是。 android标签支持adbOptions标签,以增加进程达到超时限制之前允许的时间量(示例4-5)。
实施例4-5。更改ADB超时期限
android {
adbOptions {
timeOutInMs = 30 * 1000
}}
}}
这将超时限制延长到30秒。如果您收到ShellCommandUnresponsiveException失败,请调整此值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值