Android Gradle 技巧之二: 最愛命令列
命令列
很多做 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 的命令列還有很多其他技巧,上面只是列舉到了本人日常用到最多的幾個。有興趣可以留言深入討論。
參考資料
有問題?在文章下留言或者加 qq 群:453503476,希望能幫到你。
想要及時收到最新部落格文章,請關注:
『mobdev』微信公眾號二維碼
相關文章
- Gradle for Android系列之二 build.gradle檔案GradleAndroidUI
- 最實用的 Linux 命令列使用技巧Linux命令列
- Gradle命令列黑魔法Gradle命令列
- 最實用的Linux命令列使用技巧彙總Linux命令列
- 最實用的 Linux 命令列使用技巧彙總Linux命令列
- 最實用也最容易被遺忘的 Linux 命令列使用技巧Linux命令列
- 盤點開發者最喜愛的Swift技巧Swift
- Gradle For Android(三)Gradle優化與靈活的使用技巧GradleAndroid優化
- Android Gradle 技巧之一: Build Variant 相關AndroidGradleUI
- Gradle 使用技巧(一)Gradle
- 命令列技巧:分割檔案內容命令列
- Linux命令列六大技巧Linux命令列
- 實用的Linux命令列技巧Linux命令列
- [android]android命令列截圖Android命令列
- Android Gradle defaultConfig詳解及實用技巧AndroidGradle
- Android 命令列建立工程Android命令列
- 常用gradle命令Gradle
- 資料科學家的命令列技巧資料科學命令列
- 20個有用的linux命令列技巧Linux命令列
- Gradle 技巧與問題Gradle
- [android]android效能測試命令列篇Android命令列
- 六個優雅的 Linux 命令列技巧Linux命令列
- Android命令列簽名記錄Android命令列
- Linux 命令列小技巧 – !歎號的用處Linux命令列
- 5個經典有趣的 Linux 命令列技巧Linux命令列
- 給新手的 10 個有用 Linux 命令列技巧Linux命令列
- 最有用的Linux命令列使用技巧集錦Linux命令列
- Android N哪個名字才是你最愛?即將揭曉Android
- Gradle技巧之語法淺談Gradle
- Gradle系列之Android Gradle基礎配置GradleAndroid
- Gradle for Android系列之一 Gradle基礎GradleAndroid
- Gradle for Android 系列:初識 Gradle 檔案GradleAndroid
- 使用命令列 + 代理更新 Android SDK命令列Android
- Android 命令列構建和簽署APKAndroid命令列APK
- 史上最詳細的Android Studio系列教程六--Gradle多渠道打包AndroidGradle
- Linux 命令列工具使用小貼士及技巧(1)Linux命令列
- Linux 命令列工具使用小貼士及技巧(4)Linux命令列
- Linux 命令列工具使用小貼士及技巧(3)Linux命令列