命令行

很多做 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

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

其实是在下载一个比较大的文件,不用惊慌,你要做的就是 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)已经做了一个很实用的插件:

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

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

    快速定位文件夹

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

    使用 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』微信公众号二维码

Android Gradle 技巧之二: 最爱命令行的更多相关文章

  1. Android抓包方法(二)之Tcpdump命令+Wireshark

    Android抓包方法(二) 之Tcpdump命令+Wireshark 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等.学会抓包分 ...

  2. Android Gradle 技巧之一: Build Variant 相关

    Build Variant android gradle 插件,允许对最终的包以多个维度进行组合. BuildVariant = ProductFlavor x BuildType 两个维度 最常见的 ...

  3. 轻松学习Ionic (二) 为Android项目集成Crosswalk(更新官方命令行工具)

        现在集成crosswalk不用这么麻烦了!官方的命令行工具已经能让我们一步到位,省去很多工作,只需在cmd中进入项目所在目录(不能有中文目录,还得FQ),执行: ionic browser a ...

  4. [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目

    创建 Android 项目 在命令行创建 Android 项目需要用到 android 工具(该工具由 Android SDK 提供,位于 <sdk>/tools/ 目录下.).它能自动生 ...

  5. [APP] Android 开发笔记 001-环境搭建与命令行创建项目

    1. 安装JDK,SDK JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html Android SDK http ...

  6. 【C语言的日常实践(十二)】命令行参数

    C计划main函数有两个参数.文章1一个通常被称为argc,它代表的命令行参数的个数. 第2个通常称为argv.它指向一组參数值. 指针数组:这个数组的每一个元素都是一个字符指针,数组的末尾是一个NU ...

  7. eos开发(二)使用cleos命令行客户端操作EOS(钱包wallet基础操作)

    不知道下边这一段英文你们是不是能看懂,如果看不懂那就算了,我就是转过来随便看看的. 总之你记住nodeos.cleos和keosd这三个工程十分重要就行了,回头咱们的研究都从这三个工程杀进去. EOS ...

  8. pytest十二:cmd命令行参数

    命令行参数是根据命令行选项将不同的值传递给测试函数,比如平常在 cmd 执行”pytest —html=report.html”,这里面的”—html=report.html“就是从命令行传入的参数对 ...

  9. beego小技巧两则:通过命令行自定义端口和环境,url中带有中划线处理

    1,通过命令行自定义端口和环境 先用flag提取参数,如果要环境,就反向注进去, 如果是端口,就打到beego.Run函数里去. 2,在作router里的url解析时,如果URL中含有-中划线,用严格 ...

随机推荐

  1. JDE Develop Server分别安装DV PY PD后WEBSERVER问题

    一般安装时一次性安装完DV\PY\PD环境后,再安装WEBSERVER时只需要修改一次配置文件即可,但如果先安装顺序如下: DV->WEBSERVER->PY 此时,配置程序被初始化,必须 ...

  2. iOS开发UI篇—UIScrollView控件介绍

    iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...

  3. Mobiscroll 3.0 官方同步版

    Mobiscroll 3.0 官方同步版发布了. Mobiscroll是一个用于触摸设备的日期和时间选择器,它的使用不会改变HTML5.PhoneGap以及混合应用的原生用户体验.作为一款jQuery ...

  4. Objective-C学习笔记-第一天(1)

    .h头文件,用于声明一些公开的属性.方法.头文件一般不会放太多的东西,没必要暴露太多接口,私有和封装. .m主文件,用于实现.h文件中的方法,以及一些其它的方法. -(返回值)方法名参数1名称:(参数 ...

  5. Debian 8(jessie)下设置系统启动直接进入命令行,无GUI

    修改grub项 sudo vi /etc/default/grub 修改其中三项 ... GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLI ...

  6. 如何获取EntityManager

    1.在容器内部使用,使用@PersistenceContext 来注入.@PersistenceContextprivate EntityManager em;TAG================= ...

  7. What is a watch descriptor

    http://stackoverflow.com/questions/24342156/what-are-watch-descriptors-really-linux-inotify-subsyste ...

  8. 实现Android4.4系统设置分页滑动浏览功能

    需求描述: 由于手机功能越来越完善,相应的偏好设置也就越来越多:从用户体验的角度考虑,为了让用户能够在短时间内对常用的偏好设置进行操作,如WIFI,蜂窝数据等.单独将一些常用的设置功能单独展示出来,已 ...

  9. iOS类实现里面怎么用属性

    属性(properity)是一个很好用的东西,简单而直接.Objective-C还创建了一个点语法来帮助大家使用.根据以前C++的习惯,类外访问实例变量时,最好通过getter/setter方法,也就 ...

  10. java学习第十一天

    第十二次课 目标 一维数组(创建访问) 一.概念与特点 1.概念 相同数据类型的有序集合[] 数组名: 容器的名字 元素:  下标变量,数组名[下标] 长度:  length 下标:   位置.索引  ...