Gradle 日志
前面我們講了 Gradle 在項目組件化中的運用。這節(jié)我們學習 Gradle 的日志。日志是我們日常開發(fā)中排查問題非常重要的一個信息。如果我們打包時出現(xiàn)報錯,我們需要通過分析構建日志從而排查問題。通過這節(jié)課的學習我們能夠了解 Gradle 的日志信息有哪些級別?打包時 Gradle 報錯我么那如何去查看?及一些常見錯誤的處理方法。
1. Gradle 的日志級別
我們在開發(fā) Android 時我們系統(tǒng)有個日志輸出工具類 android.util.Log
,我們開發(fā)過程中調試或是排查問題可以使用這個類幫我們輸出日志信息,提升我們的開發(fā)效率。為了我們能夠快速的定位問題,我們知道日志信息分為不同的級別,一般我們經常用到的有 Debug , Error , Warning , Info 四個等級。同樣 Gradle 的日志也是分為以下幾個級別,它的各個級別對應的功能如下:
Level | 主要用途 |
---|---|
DEBUG | 調試信息 |
INFO | 信息性的消息 |
LIFECYCLE | 進度信息 |
WARNING | 警告信息 |
QUITE | 重要信息 |
ERROR | 錯誤信息 |
2. 過濾 Gradel 日志
我們日常開發(fā)過中編譯時,在控制臺看到的日志并不是所有的編譯日志。我們看到的日志是 LIFECYCLE 級別及級別在它之上所有日志信息。我們執(zhí)行gradle asR
命令打 Release 包的日志,如下所示:
如果我們編譯時要過濾日志,我們就需要在執(zhí)行命令的時候在 gradle 后面加上不同的選項,具體如下表所示:
命令 | 輸出日志的級別 |
---|---|
沒有任何 | 輸出 LIFECYCLE 及更高 |
-q | 輸出 QUIET 及更高 |
-i | 輸出 INFO 及更高 |
-d | 輸出 DEBUG 及更高 |
3. 打印自己的 Gradle 日志
如果我們要打印編譯日志,我們要怎么做呢?Gradle 也為我們提供了一個 logger 屬性,它是一個 Logger 實例。我們在 build.gradle 中定義一個名為 logTest 的任務,打印不同級別的日志。如下所示:
task logTest{
doLast{
logger.debug("This is Debug Log Message")
logger.info("This is Info Log Message")
logger.warn("This is Warn Log Message")
logger.lifecycle("This is Lifecycle Log Message")
logger.quiet("This is Quiet Log Message")
logger.error("This is Erroe Log Message")
}
}
我們按照上面所降到的 我們不添加任何的額外命令,直接執(zhí)行gradle logTest
我們看下輸出,我們會發(fā)現(xiàn)只輸出了 LIFECYCLE 級別以上的日志:
$ gradle logTest
> Configure project :order
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
> Task :app:logTest
This is Warn Log Message
This is Lifecycle Log Message
This is Quiet Log Message
This is Erroe Log Message
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
那么下面我們在 gradle 后依次添加 -q 、-i 、-d 命令來過濾不同級別的日志。
3.1 gradle -q logTest
我們執(zhí)行gradle -q logTest
我們看到只輸出了 QUIET 和 ERROR 級別的日志。如下圖所示:
3.2 gradle -i logTest
我們執(zhí)行gradle -i logTest
我們從下圖可以看到比上一次輸出了很多日志,有除了我們 定義的 DEBUG 日志沒有答應別的日志都打印了,也打印了不少系統(tǒng)編譯的日志。如下圖所示:
3.3 gradle -d logTest
我們執(zhí)行gradle -d logTest
這個命令可以看到控制臺輸出了無數(shù)的日志,絕大部分都是 DEBUG 級別的,如果不仔細,都找不到我們所需要的日志信息。這就是為什么我們需要設置日志的級別,因為我們這樣可以過濾掉很多無用的日志。
4. AS 如何查看編譯報錯信息
我們在編譯時經常會遇到一些報錯信息,但是有時候會排查很久才知道原因所在。其實編譯時的信息在 Gradle 日志中我們都可以看到。當我們編譯時,在 AndroidStudio 的左下角會看到如下一個 Build 按鈕:
當我們點擊 Build 按鈕,我們點擊這個按鈕就會看到具體的日志信息。
我們就可以看到具體的錯誤日志了,具體我們可以搜FAILURE: Build failed with an exception.
這句后面接著的就是具體的錯誤信息,包括出錯文件及原因。我們這里看到說圖片文件的名稱只能是數(shù)字和小寫字母,這里包含了 A 這個大寫字母,所以編譯的時候拋出了異常。
Tips: 當我們遇到編譯報錯時,我們可以在 Build 這個窗口中輸入
FAILURE: Build failed with an exception.
搜索到這句信息的位置,后面緊接著的就是具體的錯誤信息。
5. 小結
這一節(jié)我們主要學習了 Gradle 的日志,包括 Gradle 的日志級別,Gradle 日志過濾的命令,以及如何在項目中查查看具體的報錯信息。學會怎么查看 Gradle 的報錯信息非常重要,可以幫助我們節(jié)省很多不必要的時間,提升我們工作中的開發(fā)效率。我們也可以通過這節(jié)的學習,在項目中加入一些自己的日志。后面我們將學習 Gradle 在 AS 中如何配置多渠道打包。