Gradle 日志
前面我們講了 Gradle 在項(xiàng)目組件化中的運(yùn)用。這節(jié)我們學(xué)習(xí) Gradle 的日志。日志是我們?nèi)粘i_發(fā)中排查問題非常重要的一個(gè)信息。如果我們打包時(shí)出現(xiàn)報(bào)錯(cuò),我們需要通過分析構(gòu)建日志從而排查問題。通過這節(jié)課的學(xué)習(xí)我們能夠了解 Gradle 的日志信息有哪些級(jí)別?打包時(shí) Gradle 報(bào)錯(cuò)我么那如何去查看?及一些常見錯(cuò)誤的處理方法。
1. Gradle 的日志級(jí)別
我們?cè)陂_發(fā) Android 時(shí)我們系統(tǒng)有個(gè)日志輸出工具類 android.util.Log
,我們開發(fā)過程中調(diào)試或是排查問題可以使用這個(gè)類幫我們輸出日志信息,提升我們的開發(fā)效率。為了我們能夠快速的定位問題,我們知道日志信息分為不同的級(jí)別,一般我們經(jīng)常用到的有 Debug , Error , Warning , Info 四個(gè)等級(jí)。同樣 Gradle 的日志也是分為以下幾個(gè)級(jí)別,它的各個(gè)級(jí)別對(duì)應(yīng)的功能如下:
Level | 主要用途 |
---|---|
DEBUG | 調(diào)試信息 |
INFO | 信息性的消息 |
LIFECYCLE | 進(jìn)度信息 |
WARNING | 警告信息 |
QUITE | 重要信息 |
ERROR | 錯(cuò)誤信息 |
2. 過濾 Gradel 日志
我們?nèi)粘i_發(fā)過中編譯時(shí),在控制臺(tái)看到的日志并不是所有的編譯日志。我們看到的日志是 LIFECYCLE 級(jí)別及級(jí)別在它之上所有日志信息。我們執(zhí)行gradle asR
命令打 Release 包的日志,如下所示:
如果我們編譯時(shí)要過濾日志,我們就需要在執(zhí)行命令的時(shí)候在 gradle 后面加上不同的選項(xiàng),具體如下表所示:
命令 | 輸出日志的級(jí)別 |
---|---|
沒有任何 | 輸出 LIFECYCLE 及更高 |
-q | 輸出 QUIET 及更高 |
-i | 輸出 INFO 及更高 |
-d | 輸出 DEBUG 及更高 |
3. 打印自己的 Gradle 日志
如果我們要打印編譯日志,我們要怎么做呢?Gradle 也為我們提供了一個(gè) logger 屬性,它是一個(gè) Logger 實(shí)例。我們?cè)?build.gradle 中定義一個(gè)名為 logTest 的任務(wù),打印不同級(jí)別的日志。如下所示:
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
我們看下輸出,我們會(huì)發(fā)現(xiàn)只輸出了 LIFECYCLE 級(jí)別以上的日志:
$ 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
那么下面我們?cè)?gradle 后依次添加 -q 、-i 、-d 命令來過濾不同級(jí)別的日志。
3.1 gradle -q logTest
我們執(zhí)行gradle -q logTest
我們看到只輸出了 QUIET 和 ERROR 級(jí)別的日志。如下圖所示:
3.2 gradle -i logTest
我們執(zhí)行gradle -i logTest
我們從下圖可以看到比上一次輸出了很多日志,有除了我們 定義的 DEBUG 日志沒有答應(yīng)別的日志都打印了,也打印了不少系統(tǒng)編譯的日志。如下圖所示:
3.3 gradle -d logTest
我們執(zhí)行gradle -d logTest
這個(gè)命令可以看到控制臺(tái)輸出了無數(shù)的日志,絕大部分都是 DEBUG 級(jí)別的,如果不仔細(xì),都找不到我們所需要的日志信息。這就是為什么我們需要設(shè)置日志的級(jí)別,因?yàn)槲覀冞@樣可以過濾掉很多無用的日志。
4. AS 如何查看編譯報(bào)錯(cuò)信息
我們?cè)诰幾g時(shí)經(jīng)常會(huì)遇到一些報(bào)錯(cuò)信息,但是有時(shí)候會(huì)排查很久才知道原因所在。其實(shí)編譯時(shí)的信息在 Gradle 日志中我們都可以看到。當(dāng)我們編譯時(shí),在 AndroidStudio 的左下角會(huì)看到如下一個(gè) Build 按鈕:
當(dāng)我們點(diǎn)擊 Build 按鈕,我們點(diǎn)擊這個(gè)按鈕就會(huì)看到具體的日志信息。
我們就可以看到具體的錯(cuò)誤日志了,具體我們可以搜FAILURE: Build failed with an exception.
這句后面接著的就是具體的錯(cuò)誤信息,包括出錯(cuò)文件及原因。我們這里看到說圖片文件的名稱只能是數(shù)字和小寫字母,這里包含了 A 這個(gè)大寫字母,所以編譯的時(shí)候拋出了異常。
Tips: 當(dāng)我們遇到編譯報(bào)錯(cuò)時(shí),我們可以在 Build 這個(gè)窗口中輸入
FAILURE: Build failed with an exception.
搜索到這句信息的位置,后面緊接著的就是具體的錯(cuò)誤信息。
5. 小結(jié)
這一節(jié)我們主要學(xué)習(xí)了 Gradle 的日志,包括 Gradle 的日志級(jí)別,Gradle 日志過濾的命令,以及如何在項(xiàng)目中查查看具體的報(bào)錯(cuò)信息。學(xué)會(huì)怎么查看 Gradle 的報(bào)錯(cuò)信息非常重要,可以幫助我們節(jié)省很多不必要的時(shí)間,提升我們工作中的開發(fā)效率。我們也可以通過這節(jié)的學(xué)習(xí),在項(xiàng)目中加入一些自己的日志。后面我們將學(xué)習(xí) Gradle 在 AS 中如何配置多渠道打包。