美文网首页Android 打包
Android Gradle 技巧之二: 最爱命令行

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

作者: Bugtags | 来源:发表于2016-06-08 18:30 被阅读139次

    命令行

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

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

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

    典型错误

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

    Gradle: resolve dependancies '_debugCompile'
    

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

    一句命令行

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

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

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

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

    ./gradlew clean build --info
    

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

    cmd-output

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

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

    扩展

    在哪运行

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

    控制台

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

    关键一点:

    ├── gradlew
    ├── gradlew.bat
    
    

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

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

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

    ./gradlew xxx
    

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

    gradlew.bat xxx
    

    Terminal 插件

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

    as-terminal

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

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

    快速定位文件夹

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

    terminal-drag-location

    使用 help

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

    $ ./gradlew --help
    
    USAGE: gradlew [option...] [task...]
    ...
    
    

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

    build 某个指定 module

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

    $ ./gradlew -p app clean build
    
    

    明确指定不执行某个 task

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

    $ ./gradlew build -x test -x lint
    

    总结

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

    参考资料

    mac-terminal

    windows-terminal

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

    想要及时收到最新博客文章,请关注:

    『mobdev』微信公众号二维码

    mobdev

    相关文章

      网友评论

        本文标题:Android Gradle 技巧之二: 最爱命令行

        本文链接:https://www.haomeiwen.com/subject/qxmjdttx.html