Android Gradle 技巧之二: 最爱命令行

目录
  1. 1. 命令行
  2. 2. 典型错误
  3. 3. 一句命令行
  4. 4. 扩展
    1. 4.1. 在哪运行
      1. 4.1.1. 控制台
      2. 4.1.2. Terminal 插件
      3. 4.1.3. 快速定位文件夹
    2. 4.2. 使用 help
    3. 4.3. build 某个指定 module
    4. 4.4. 明确指定不执行某个 task
  5. 5. 总结
  6. 6. 参考资料

如果你习惯了命令行,你会爱上它的,因为它简单、直接,深入。

命令行

很多做 Android 开发不久的同学,习惯于使用图形界面,对命令行操作很陌生甚至恐惧。遇到 AS 运行错误,束手无策。

AS 为了确保易用性,也在 UI 界面上屏蔽了很多命令行运行的细节,导致很多人觉得 AS 难用。

这种情况,我在解决用户集成使用 Bugtags SDK 的问题的时候,经常能遇到。其实 GUI 界面的操作,绝大部分情况下,也是基于命令工具的。如果你习惯了命令行,你会爱上它的,因为它简单、直接,深入。

典型错误

AS 刚推出的时候,stackoverflow 上询问最多的问题,便是进入项目的时候,一直处于:

1
Gradle: resolve dependancies '_debugCompile'

状态,一直无法前进,到底 IDE 在做什么呢?看不出来。

一句命令行

当用户遇到问题时,我最常提醒用户使用的是在项目根目录下,运行如下命令行:

1
2
3
4
5
mac:
./gradlew clean build --info > bugtags.log

windows:
gradlew.bat clean build --info > bugtags.log

这个命令行的意思,是运行 clean 和 build 两个 gradle task,并且打开 info 参数使得输出更多的信息,最终把所有输出的信息,输出到项目根目录下的 bugtags.log 文件。用户把这个文件发给我,我根据这个输出文件,通常就能分析出问题所在。

假设命令行去除重定向输指令:

1
./gradlew clean build --info

信息将会输出在控制台,刚才提到的那个典型错误,可能是这样的:

cmd-output

其实是在下载一个比较大的文件,不用惊慌,你要做的就是 just wait! 至于是在下载什么。我想在下一篇详细描述。

如果你对基本的命令行知识有所了解,前面就已经足够了,如果你想了解更多,请继续。

扩展

在哪运行

当我给出这个命令的时候,最常见的问题,就是在哪运行。答案是控制台(Terminal)。

控制台

在 mac 下,有 terminal(bash/zsh 等),在 windows 下,则是 powershell 或者 cmd。

关键一点:

1
2
├── gradlew
├── gradlew.bat

AS 在使用 Gradle 的时候,为了灵活,或者为了应对 Gradle 系统的快速迭代,推荐使用在项目根目录中放置 Gradle 的 wrapper:gradlew 来实现对不同版本的使用。

因此,在控制台运行命令,主要是跟 gradlew 打交道。这个 wrapper,在 mac 下是一个具有执行权限的文件:gradlew,在 windows 下,是一个批处理文件:gradlew.bat

通常,mac 下在当前目录下运行可执行文件是这样:

1
./gradlew xxx

windows 下在当前目录下运行批处理文件是这样:

1
gradlew.bat xxx

Terminal 插件

AS(Intellij IDEA)已经做了一个很实用的插件:

as-terminal

点击 Terminal,AS 会帮你完成下面的操作:

  • 模拟打开 terminal
  • cd 到当前项目根目录下

快速定位文件夹

IDE 还支持将项目中的某个文件夹拖放到 Terminal 窗口中实现快速定位到这个文件夹:

terminal-drag-location

使用 help

要知道都有哪些 gradle 命令运行的参数,可以使用:

1
2
3
4
$ ./gradlew --help

USAGE: gradlew [option...] [task...]
...

来获取。下面列举几个重要的参数。

build 某个指定 module

AS 推荐的结构是 multiple project 结构,即一个 project 下,管理多个 module,如果每次都要 build 全部的 project 的话,有点浪费时间,则可以使用 -p module 参数,其中 module 是你要 build 的 module:

1
$ ./gradlew -p app clean build

明确指定不执行某个 task

Gradle 的命令存在依赖,例如 build task,是依赖于一系列的其他的 task,如果想要指定不执行某个 task,则可以使用 -x task 参数,其中 task 是要忽略的那个,这个参数可以传递多次。

1
$ ./gradlew build -x test -x lint

总结

Gradle 的命令行还有很多其他技巧,上面只是列举到了本人日常用到最多的几个。有兴趣可以留言深入讨论。

参考资料

mac-terminal

windows-terminal

有问题?在文章下留言或者加 qq 群:453503476,希望能帮到你。

本文由 kvh 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。