DSL(Domain-Specific Language)

Gradle 是一个编译打包工具,但实际上它也是一个编程框架。

Task 是 Gradle 中的一种数据类型,它代表了一些要执行或者要干的工作。不同的插件可以添加不同的 Task。每一个 Task 都需要和一个 Project 关联。

Task 的 API 文档位于:https://docs.gradle.org/current/dsl/org.gradle.api.Task.html

  • 任务创建
task hello {
doLast {//doLast 可用 << 代替,不推荐此写法
println "hello"//gradle运行阶段打印出来
}
} task hello {
println "hello"//gradle配置阶段打印出来
}
  • 任务依赖
A 依赖 B,A 又同时依赖 C。但执行的结果可能是 B -> C -> A,我们想 C 在 B 之前执行,可以使用 mustRunAfter

task A << {println 'Hello from A'}
task B << {println 'Hello from B'}
task C << {println 'Hello from C'}
A.dependsOn B //执行 A 之前会先执行 B
A.dependsOn C //执行 A 之前会先执行 C
B.mustRunAfter C //B 必须在 C 之后执行
task autoSign { 
  //依赖于其他Task执行完,在执行本Task
  dependsOn ''   //先执行
  doFirst{ }   // 后执行
  doLast{ }
}
dependsOn出现如下异常时
A problem occurred evaluating script.
> Could not get unknown property 'installApk' for project ':app' of type org.gradle.api.Project. 解决方案:
  // 对project的生命周期进行监听
this.afterEvaluate {
setDependsOn([assembleDebugChannels])
}

实例操作渠道包后自动安装并启动

  • 创建安装启动APP GRADLE
app中build.gradle中添加
apply from: rootProject.file('gradle/launchApp.gradle')
launchApp.gradle内容如下
// 一键安装渠道包 assembleDebugChannels --> installApk --> launchApp
task installApk() {
// 对project的生命周期进行监听
this.afterEvaluate {
setDependsOn([assembleDebugChannels])
} doLast { walle{
// apk path
def path = "${project.buildDir}/outputs/channels/xxx.apk"
def command = "adb install -r ${path}"
executeCommand(command)
println "installApk success"
} }
} // 启动APP
task launchApp(dependsOn: installApk) {
doLast {
//指定要启动的Activity啦
def command = "adb shell am start com.example.xxx/.MainActivity"
executeCommand(command)
println "launchApk success"
}
} /**
* 执行shell指令
* @param command 命令
* @return
*/
def executeCommand(String command) {
try {
exec {
ExecSpec execSpec ->
executable 'sh' args '-c', command
}
} catch (Exception e) {
e.printStackTrace()
}
}

Gradle DSL Walle渠道包后安装启动APP的更多相关文章

  1. spring boot mybatis 打成可执行jar包后启动UnsatisfiedDependencyException异常

    我的spring boot + mybatis项目在idea里面执行正常,但发布测试环境打成可执行jar包后就启动失败,提示错误如下: [ ERROR] [2018-08-30 17:23:48] o ...

  2. 新一代开源Android渠道包生成工具Walle

    本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...

  3. [转]安卓新一代多渠道打包工具Walle 解决渠道包V2签名问题

    转自https://www.jianshu.com/p/572b59829a08 为什么要打多个渠道的包? 大家都知道,android应用商店大大小小有几百个,作为一个有志向的app,就需要做到统计各 ...

  4. mysql安装后服务启动不了(总结)

    mysql安装后服务启动不了 1.1 前言 最近真的是倒霉到家,装个mysql都能把所有的问题给问候了一遍······不过这也是一个宝贵的经验,得好好总结下,毕竟也不知道以后会不会再次遇到.如果有网友 ...

  5. Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析

    前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...

  6. 【转载】Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析

    前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...

  7. 免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动。

    免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...

  8. 安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案

    安装64位版Oracle11gR2后发现启动SQL Developer时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\product\11.2 ...

  9. 安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案(原创) (2016-10-29 下午01:56)

    安装64位版Oracle11gR2后发现启动SQL Developer时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径"C:\app\用户名\product ...

随机推荐

  1. 020_linux驱动之_输入子系统按键应用

    (一)分配一个输入子系统结构体 static struct input_dev *buttons_dev; /*分配一个input_dev结构体*/ (二)设置这个输入子系统需要的动作 /* 1. 分 ...

  2. 微服务springboot视频最新SpringBoot2.0.3版本技术视频教程【免费学习】

    超火爆的springboot微服务技术怎么学,看这里,springboot超详细的教程↓↓↓↓↓↓https://ke.qq.com/course/179440?tuin=9b386640 01.sp ...

  3. codeforces392B

    CF392B Tower of Hanoi 题意翻译 河内塔是一个众所周知的数学难题.它由三根杆和一些可以滑动到任何杆上的不同尺寸的圆盘组成.难题从一个整齐的杆中开始,按照尺寸从小到大的顺序排列,最小 ...

  4. leveldb源码分析之内存池Arena

    转自:http://luodw.cc/2015/10/15/leveldb-04/ 这篇博客主要讲解下leveldb内存池,内存池很多地方都有用到,像linux内核也有个内存池.内存池的存在主要就是减 ...

  5. Robot Framework(十九) 附录

    6附录 6.1测试数据中的所有可用设置 6.1.1设置表 Setting表用于导入测试库,资源文件和变量文件,以及定义测试套件和测试用例的元数据.它可以包含在测试用例文件和资源文件中.请注意,在资源文 ...

  6. Babel7知识梳理

    Babel7 知识梳理 对 Babel 的配置项的作用不那么了解,是否会影响日常开发呢?老实说,大多情况下没有特别大的影响(毕竟有搜索引擎). 不过呢,还是想更进一步了解下,于是最近认真阅读了 Bab ...

  7. AGC009C Division into Two

    题意 有\(n\)个严格升序的数,请你分成两个集合\(A\)和\(B\),其中一个集合任意两数之差不小于\(x\),另一集合任意两数之差不小于\(y\). 问方案数,集合可以为空. $n \le 10 ...

  8. linux 后台 运行

    但是如果终端关闭的话,程序也会终止,那么就要涉及到linux的一个十分强大的命令:screen. 按照我个人的理解,这个命令就是能够在linux中创造出多个终端,在已有的窗口内部再创造更多的窗口,结合 ...

  9. mysql用户与授权

    视图 create view 视图名   as  查询语句: MariaDB [hellodb]> create view view_left as select name from stude ...

  10. 第11组 Beta冲刺(2/5)

    第11组 Beta冲刺(2/5)   队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11997386.html 作业博客 https://edu. ...