Android 開發命令行完全攻略


作為命令行的愛好者,我想寫這個主題已經有好一段時間了。除了顯得很酷之外,命令行的使用能夠提高我們的開發效率,因為相比通過鼠標點擊一系列的菜單選項,使用鍵盤輸入幾個字符並點擊 TAB 健顯然會快很多。

本文的目的是跟大家分享在我的 Android 開發實踐中對命令行的運用。

iTerm2

由於我們將會在命令行中進行后續的工作,因此如果能夠安裝一個比系統默認命令行更好的工具那顯然是不錯的,那么請下載 iTerm21 吧!

iTerm2 將命令行帶入了現代化時代,提供了很多你一直想要的特性。其中包含了窗口拆分,自定義配色方案,剪貼板歷史,細粒度的熱鍵控制,以及一系列2你將會逐漸發現的方便的偏好設置。

oh-my-zsh

當你啟動命令行應用時,它會運行一個名為 Bash 的 Shell 應用。Bash 是至今為止最流行的存在於絕大多數基於 Unix 的操作系統中的 Shell 應用。然而實際上也存在 Bash 的替代者,它們使得命令行使用起來更快,而且對開發者更友好。

默認情況下,oh-my-zsh 自帶了 Git 插件3,它提供了很多 aliases4 以及很多有用的函數5

命令行自動提示

zsh-autosuggestions6類似於 Fish7,為 zsh 提供了快速的自動提示功能,它基於之前的輸入歷史,在你輸入時自動提示命令。

1-r1EJxe4FfjrA6GsJTDvN5Q.gif-267.6kB

反向智能搜索

你可以通過 Control+R 快捷鍵實現在命令歷史中進行反向智能搜索,從你輸入命令開始,zsh 會根據之前輸入的命令進行自動補全。然后你可以通過 Enter 鍵來執行對應的命令,或者通過箭頭左鍵或者右鍵來編輯命令,或者持續按住 Control+R 快捷鍵來選擇其他的歷史命令。

1-hLPNfvy2y3UahEvtWe1pGw.gif-564.7kB

dryrun

當你在 Github 上面看到一個非常酷的函數庫時,你將會如何在你的手機上面測試它呢?

  1. 點擊 download zip 按鈕
  2. 解壓下載后的 zip
  3. 打開 Android Studio
  4. 將剛才下載並解壓的工程導入 Android Studio 中
  5. 同步 gradle
  6. 運行工程
  7. 選擇工程要運行在哪個設備上
  8. 對運行起來的函數庫進行測試
  9. 刪除不再需要的工程目錄和 zip

或者你可以使用 dryrun8

dryrun REMOTE_GIT_URL
  • 1
  • 1

1-z35yheTfbq22vC1jQq3qOQ.gif-2338.7kB

離線構建

--offline 標記能夠使得 gradle 始終從緩存中使用依賴的 modules,即使本來它們需要被重新檢查是否需要更新。當在離線模式運行時,gradle 不會嘗試去網絡上面執行依賴解析,如果指定的依賴不在本地緩存中,構建將會失敗。

以最快速度執行 develop debug 的命令如下所示:

./gradlew assembleDevelopDebug --offline
  • 1
  • 1

以最快速度執行單元測試的命令如下所示:

./gradlew test --offline
  • 1
  • 1

在 Android Studio 中,我們可以通過如下選項來配置 gradle 以離線模式運行:

Settings -> Build, Execution, Deployment -> Build tools -> Gradle

1-ppu7qfrQMecc73PTU8kJqw.png-246.8kB

alfi

作為 Android 開發者,你應該在使用 Android Studio + Gralde 模式進行開發。使用 Android Studio 的一個非常好的特性是它提供的依賴管理,能夠自動從指定倉庫下載依賴庫的 artifacts,並使得你的工程可以使用這個 artifacts。通常情況下,你只需要在工程的 build.gradle 文件中添加一行代碼即可包含指定的依賴庫,非常簡單,不是嗎?

那么你知道要添加的依賴庫對應的是哪一行代碼嗎?為了實現快速的查找如何配置這一行代碼,我開發了一個名為 alfi 的工具,使用方法很簡單:

  1. 輸入 alfi 要依賴的函數庫名
  2. 拷貝得到的函數庫配置信息(就是我們上面說的那一行代碼)
  3. 將配置信息拷貝到 build.gradle 中

例如我們輸入 alfi picasso,將會得到如下結果:

1-jVAJGQwrPIncaoXOUL7e-A.gif-1436.7kB

理解 gradle tasks 的縮寫

如果在命令行中執行 ./gradlew tasks 命令,你將會看到一系列可用的 gradle tasks,但它不會列出這些命令的縮寫,下面幾個你可以使用的例子:

  • iDD 是 installDevelopmentDebug 的縮寫
  • aDD 是 assembleDevelopmentDebug 的縮寫
  • cC 是 connectedCheck 的縮寫
  • etc.

使用縮寫,我們可以像下面這樣執行命令:

./gradlew :App:iDD
  • 1
  • 1

可以看到我們得到了一個更簡短的命令。

Android Rocket Launcher

Android Rocket Launcher9 是一個 gradle 插件,用於給 Android Modules 中所有 variants 的增加安裝和啟動 APK 的 tasks,因此,無需再運行 ./gradlew installDebug 並到手機中辛辛苦苦找到剛安裝的應用並啟動它。

0-bakB3D5eF4uB9i4S.png-739.2kB

在你的項目中引入這個功能,只需要在 build.gradle 文件中增加兩行關鍵代碼,如下所示:

apply plugin: 'android-rocket-launcher' buildscript { repositories { jcenter() } dependencies { classpath 'com.cesarferreira:android-rocket-launcher:0.2.3' } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

即使你是從命令行啟動應用,你依然可以將當前進程和調試器綁定10,在調試模式不需要重啟應用。

將單元測試結果直接輸出到控制台中

一個巧妙的能在控制台中看到 Android 單元測試輸出的結果日志的方法是在 build.gradle 文件中添加如下代碼:

android {
  ... testOptions.unitTests.all { testLogging { events 'passed', 'skipped', 'failed', 'standardOut', 'standardError' outputs.upToDateWhen { false } showStandardStreams = true } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

配置后運行單元測試就可以看到如下結果:

1-njDARwtg9P9NdL5GfhIjqA.png-107.8kB

方便的 logcats

在應用開發中我們經常需要打印出我們應用的日志信息,遺憾的是,由於應用重新部署安裝到手機上時,應用的進程 ID 會發生改變,因此想要獲取到正確的日志信息變得比較困難。Pidcat11這個工具通過過濾應用的包名而不是應用的進程 ID 解決了這個問題。我們只需要提供應用的包名就可以在控制台中只獲取到這個應用的日志信息:

pidcat github.cesarferreira.helloworld
  • 1
  • 1

1-Jf1qx_EaneKPq9UrrkhNkw.png-515.7kB

簡而言之

最后,我們將上面介紹的內容概括為以下幾個關鍵點:

  • 安裝 iterm2,一個比系統默認更好的命令行
  • 使用 oh-my-zsh 來實現自動提示
  • 使用命令縮寫,例如 ./gradlew iDD
  • 使用離線標記 --offline 來更快的執行 gradle 命令
  • 控制台中打印出單元測試的日志
  • 安裝應用到手機后,不要手動到手機中找到並打開它,而是使用 android-rocket-launcher 插件自動打開它
  • 將當前進程和調試器綁定,在調試模式不需要重啟應用。
  • 使用 pidcat 實現更智能更方便的 logcat


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM