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. session.getdefaultinstance和getinstance的区别

    如果想要同时使用两个帐号发送javamail,比如使用1@a.com发送1#邮件,使用2@a.com发送2#邮件,这时候,你就需要同时创建两个java.mail.Session对象.但是如果你仍然使用 ...

  2. 参数类型 (Mapper.java)常用

    UserBaseInfo selectByMobile(@Param("mobile")String mobile,@Param("isDeleted")Int ...

  3. C++泛型编程-扩展

    类型做参数是C++模板实现的主要形式.由此实现了类模板-->模板类-->实例的过程 当然除此之外也可以参考bitset的实现方式,参数决定类型的做法. #include <iostr ...

  4. 国庆集训Day1

    T1 divide 题意: 有\(n\)个数 \(a_1, a_2,..., a_n\) 有m个数\(b_1, b_2,..., b_n\) 令\(a = a_1\times a_2\,\times ...

  5. 2019.7.9 校内测试 T3 15数码问题

    这一次是交流测试?边交流边测试(滑稽 15数码问题 大家应该都玩过这个15数码的游戏吧,就在桌面小具库那里面哦. 一看到这个题就知道要GG,本着能骗点分的原则输出了 t 个无解,本来以为要爆零,没想到 ...

  6. input上传mp3格式文件,预览并且获取时间

    <input type="file" id="file" name="file" class="upfile" o ...

  7. flask + nginx + uwsgi + ubuntu18.04部署python restful接口

    目录 参考链接 效果展示 一.准备工作 1.1 可运行的python demo: 1.2 更新系统环境 二.创建python虚拟环境 三.设置flask应用程序 四.配置uWSGI 五.设置系统启动 ...

  8. Python学习日记(三)——Python基本数据类型(运算符、int、str、tuple、dict、range)

    运算符 1.算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2 ...

  9. How to Publish a NuGet Package

    How to Publish a NuGet Package Command line To push packages to nuget.org you must use nuget.exe v4. ...

  10. Flutter移动电商实战 --(28)列表页_商品列表后台接口调试

    主要调试商品列表页的接口 这个接口是最难的因为有大类.小类还有上拉加载 先配置接口 config/service_url.dart //const serviceUrl='http://test.ba ...