Ⅰ 全面理解Gradle - 执行时序
一个像 Ant 一样的非常灵活的通用构建工具
一种可切换的, 像 maven 一样的基乎绝于合约构建的框架岁首姿
支持强大的多工程构建
支持强大的依赖管理(基于 ApacheIvy )
支持已有芹枯的 maven 和 ivy 仓库
支持传递性依赖管理, 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
优先支持 Ant 式的任务和构建
基于 groovy 的构建脚本
有丰富的领域模型来描述你的构建
如果你本地安装了Gradle,那么你就可以使用gradle命令来直接构建。如果本地没有安装,那么可以通过gradle wrapper来构建,linux和MAC使用./gradlew,而Windows上面则使用gradlew,还可以在 gradle/gradle-wrapper.properties 中配置 Gradle 版本。
Gradle脚本的执行分为三个过程:
下面我们根据一个实际的例子来详细说明。这里我们仍然采用VirtualAPK这个开源项目来做演示,它的地址是: https://github.com/didi/VirtualAPK 。
我们以它的宿主端为例,宿主端有如下几个模块:
其中buildSrc是virtualapk-gradle-plugin,为了便于调试我将其重命名为buildSrc。他们的依赖关系如下:
解释一下,app模块依赖CoreLibrary和buildSrc,CoreLibrary又依赖androidStub。为了大家更好理解,下面加一下log。
现在随便执行一个task,比如 ./gradlew clean ,那么将会输出如下日志,大家对比着日志,应该能明白Gradle脚本的执行顺序了吧。
可以看到,Gradle执行的时候遵循如下顺序:
1. 首先解析settings.gradle来获取模块信息,这是初始化阶段;
2. 然后配置每个模块,配置的时候并不会执行task;
3. 配置完了以后,有一个重要的回调 project.afterEvaluate ,它表示所有的模块都已经配置完了,可以准备执行task了;
4. 执行指定的task。
Ⅱ ./gradlew build:Could not find tools.jar. 解决方法
在Android Studio中执行 ./gradlew build 命令时报以下错误:
解决方法(在终端Terminal中执行以下命令):
先通过如下命令查看JDK位置
(升级OSX11.0.1后,执行这个携慧颂命令可能看到两个路径,一个是JDK的实际路径,
另一个是: /Library/Internet Plug-Ins/javaAppletPlugin.plugin/Contents/Home ,(网上有资料说这个是JRE的路辩郑径)。
打开 .bash_profile 配置文件:
添碧羡加JDK路径:
输入以下命令保存刷新:
注:根据自己的实际JDK路径修改上面的JDK路径
重新启动会话重新执行gradlew 命令即可。
Ⅲ Android系统命令行操作汇总
命令行打包
在工程根目录下
windows系统: gradlew clean assembleRelease
linux系统: gradle clean assembleRelease
根据包的build variant不同assemble后参数变化
命令行安装apk
adb install -r <apk文件路径名>
查看所有安装包
adb shell pm list package
卸载对应安装包
adb shell pm uninstall <包名>
命令行调起指定app的启动页
adb shell am start -n <包名>/<路径名>.LaunchActivity
设置主页面
adb shell am start com.android.settings/com.android.settings.Settings
安全
adb shell am start com.android.settings/com.android.settings.SecuritySettings
手机无线信息
adb shell am start com.android.settings/com.android.settings.RadioInfo
更多页面
Ⅳ 'gradlew' 不是内部或外部命令,也不是可运行的程序
接手枝早一个项目,使猛敏雀用命令打包的时候出现 'gradlew' 不是内部或外部命令,也不是可运行的程序
对比别的项目, 发现拿肆少了bat和shell文件
使用gradlew xxx的时候,我们并没有配置环境变量,猜想.bat或者.shell帮我们做了,验证一下
Ⅳ 'gradlew' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
情况1:宏困凳
配置环境变量。
新建系统变量:
变量名:GRADLE_HOME
变量值:C:UsersAdministrator.gradlewrapperdistsgradle-4.6-all-4.6
注意:变量名就用GRADLE_HOME,不要用其他的。
然尺败后再Path里增蔽旅加一项:%GRADLE_HOME%in
情况2:
先执行build setup下的wrapper任务,再在Terminal中执行gradlew就可以了。
Ⅵ CompilationFailedException解决
在Gradle版本升级后,编译运行项目时,提示org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed;但没有列出错误的具体原因。我们无法根据现有的编译log找陵槐出错误所在,如下:
根据报错内容,可以看出是执行compileDebugJavaWithJava任务时报的错误。异常为:TaskExecutionException(任务执行错误)并被告知编译失败异常(CompilationFailedException)。
我们可以使用gradlew命令在命令行中来单独执行报错任务,并打印出具体错误信息,我遇到的报错的taskName为compileDebugJavaWithJavac,那么命令如下:
运行后会尺搭友看到具体的错误,如下:
我这边遇到的问题单独执行报错任务后,也没有具体详细的错误信息(大部分异常可以直接看到详细的错误信息)
但是可以看到lib_common模块下databinding相关的报错信息,于是解决android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)相关的异常,这个异常是因为在xml文件中使用了get()方法,去掉get()方法后重新编译,编译成功。
android.databinding.tool.expr.Expr.resolveListeners异常解决链接:
在编译时遇到CompilationFailedException,并没有详细报错信息时,单独执行报错任务
然后获取到具体报错信息后,解决相应的枝喊报错问题,重新编译。