Gradle DSL Walle渠道包后安装启动APP
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的更多相关文章
- spring boot mybatis 打成可执行jar包后启动UnsatisfiedDependencyException异常
我的spring boot + mybatis项目在idea里面执行正常,但发布测试环境打成可执行jar包后就启动失败,提示错误如下: [ ERROR] [2018-08-30 17:23:48] o ...
- 新一代开源Android渠道包生成工具Walle
本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...
- [转]安卓新一代多渠道打包工具Walle 解决渠道包V2签名问题
转自https://www.jianshu.com/p/572b59829a08 为什么要打多个渠道的包? 大家都知道,android应用商店大大小小有几百个,作为一个有志向的app,就需要做到统计各 ...
- mysql安装后服务启动不了(总结)
mysql安装后服务启动不了 1.1 前言 最近真的是倒霉到家,装个mysql都能把所有的问题给问候了一遍······不过这也是一个宝贵的经验,得好好总结下,毕竟也不知道以后会不会再次遇到.如果有网友 ...
- Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析
前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...
- 【转载】Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析
前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...
- 免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动。
免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...
- 安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案
安装64位版Oracle11gR2后发现启动SQL Developer时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\product\11.2 ...
- 安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案(原创) (2016-10-29 下午01:56)
安装64位版Oracle11gR2后发现启动SQL Developer时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径"C:\app\用户名\product ...
随机推荐
- jQuery.proxy(function,context)
jQuery.proxy(function,context) 概述 jQuery 1.4 新增.返回一个新函数,并且这个函数始终保持了特定的作用域.大理石平台检定规程 当有事件处理函数要附加到元素上, ...
- seq2seq聊天模型(二)——Scheduled Sampling
使用典型seq2seq模型,得到的结果欠佳,怎么解决 结果欠佳原因在这里 在训练阶段的decoder,是将目标样本["吃","兰州","拉面" ...
- c 判断数字是否无限
/* isinf example */ #include <stdio.h> /* printf */ #include <math.h> /* isinf, sqrt */ ...
- 手游折扣app票选结果公布哪个好哪个靠谱一目了然
2018年,是中国改革开放40年,也是中国互联网20年.“互联网推动了精神文明向更高水平的迈进,实现人的价值第一,创造美好生活,从生产高于生活.艺术高于成活,转向发现与实现生活本身美好,让想象成真.如 ...
- WIN10环境下点击通知栏图标时自动切换输入法导致图标位置变动
这个问题由来已久,每当点击系统右下角任务栏中的按钮时,原本是搜狗输入法就会自动变成“US [ 中文(简体,中国) ]”,图标会自动错位,导致响应的是其他功能. 假设上图是正常的环境,此时我点击电池图标 ...
- js中判断对象类型的几种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- tp中打印sql,查看语句信息
$a = self::where($where)->fetchSql(true)->select(); dump($a);
- Qt:使用Model-View,动态的加载显示数据
共有 main.cpp, Widget.h, Widget.cpp, Widget.ui, MyModel.h, MyModel.cpp 六个文件. 可从此下载整个工程文件: /Files/biao/ ...
- How to appraise Hearthstone card values
https://elie.net/blog/hearthstone/how-to-appraise-hearthstone-card-values/ In 2014, I became an avid ...
- LeetCode —— 单词接龙(Python)
使用字典,降低查找的复杂度.使用list会超时. class Solution: def nextWordsList(self, word, wordDict): res_list = [] for ...