Gradle命令詳解
前面一節(jié)課中,我們介紹了 Gradle 的任務(wù)聲明,任務(wù)依賴,Gradle 構(gòu)建的順序等。其實(shí)在文章中我們也提到了一些 Gradle 命令。本文我們將為大家介紹一下 Gradle 的命令,包括會(huì)將前面的命令使用做一個(gè)匯總。
1. 使用 Gradle 命令
使用 Gradle 命令就是我們?cè)诿羁刂婆_(tái)輸入 Gradle 命令,使用 Gradle 命令我們可以配置 Gradle 環(huán)境,也可以不用配置 Gradle 環(huán)境,下面我們看下具體的使用方法:
1.1 已經(jīng)安裝了Gradle環(huán)境
如果安裝了 Gradle 環(huán)境變量的話,我們直接使用gradle [命令]
,檢查有沒有安裝 Gradle 環(huán)境我們可以使用下面命令:
$ gradle -version
------------------------------------------------------------
Gradle 6.0.1
------------------------------------------------------------
Build time: 2019-11-18 20:25:01 UTC
Revision: fad121066a68c4701acd362daf4287a7c309a0f5
Kotlin: 1.3.50
Groovy: 2.5.8
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 1.8.0_91 (Oracle Corporation 25.91-b14)
OS: Mac OS X 10.14.5 x86_64
如果如上所示,輸出 Gradle 版本則說明已經(jīng)安裝了 Gradle 環(huán)境,如果如下所示,則說明沒有安裝 Gradle 環(huán)境,關(guān)于 Gradle 環(huán)境變量的安裝配置請(qǐng)看《構(gòu)建自己的Gradle工程》
$ gradle -version
-bash: gradle: command not found
1.2 沒有安裝 Gradle 環(huán)境
我們前面提到過如果沒有安裝配置 Gradle 環(huán)境變量,我們可以使用gradlew
命令。我們前面知道我們創(chuàng)建 Android 項(xiàng)目時(shí)默認(rèn)會(huì)有兩個(gè)腳本gradlew.bat
[Windows平臺(tái)]和gradlew
[Linux和Unix平臺(tái)]。這兩個(gè)腳本里面預(yù)置了我們常用的一些命令。我們以clean命令為例:
//Windows系統(tǒng)
gradlew clean
//Linux系統(tǒng)或是Mac系統(tǒng)
./gradlew clean
2. Gradle 常用命令
2.1 使用 Gradle Wrapper
我們前面講《Gradle Wrapper詳解》的時(shí)候提到過我們?nèi)绻褂?Gradle Wrapper 的話可以使用命令
$ gradlew wrapper --gradle-version 6.0.1
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 up-to-date
2.2 查看項(xiàng)目的任務(wù)依賴
要查看項(xiàng)目的依賴關(guān)系圖,我們可以運(yùn)行以下命令:
$ gradle dependencies
......省略部分輸出.......
kaptTestRelease
\--- org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.51
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.51
| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.51
| \--- org.jetbrains:annotations:13.0
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.51
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.51 (*)
\--- org.jetbrains.kotlin:kotlin-script-runtime:1.2.51
lintChecks - Configuration to apply external lint check jar
No dependencies
......省略部分輸出.......
運(yùn)行該命令后我們可以在控制臺(tái)看到項(xiàng)目的整體依賴關(guān)系和各個(gè)模塊的依賴關(guān)系圖,如上面的部分輸出所示。
Tips:上面我們運(yùn)行的命令輸出的是整個(gè)項(xiàng)目的依賴,有時(shí)候我們只需要查查看當(dāng)前 module 的依賴,那么我們?cè)趺床椴榭茨??如下,我們輸?code>gradle [module_name]:dependencies,例如我們想要查看 app 模塊的依賴,我們可以執(zhí)行如下命令:
//查看APP模塊的依賴
$ gradle app:dependencies
2.3 排除某些任務(wù)
前面我么講了 Gradle 的任務(wù),我們可以用-x
選項(xiàng)去排除一個(gè)任務(wù)。我們?cè)?code>build.gradle中定義的task mTest
,我們?nèi)绻胍^mTest
,可以用以下的命令:
//buid.gradle中定義的Task,mTest
task mTest{
doLast{
println "這是測(cè)試Task"
}
}
//在控制臺(tái)執(zhí)行命令排除
$ gradle clean build -x mTest
2.4 分析項(xiàng)目構(gòu)建
在 Gradle 中內(nèi)置了對(duì)項(xiàng)目分析的支持,我們平時(shí)如果遇到構(gòu)建的性能問題,比如我們構(gòu)建時(shí)間長(zhǎng),想要查看每個(gè)任務(wù)構(gòu)建時(shí)間,我們可以使用這個(gè)命令[--profile build
]來生成項(xiàng)目的配置文件報(bào)告,報(bào)告會(huì)以文件形式生成在 build/reports/ 目錄下,如下所示:
$ gradle --profile build
> Task :app:lint
Ran lint on variant release: 15 issues found
Ran lint on variant debug: 15 issues found
Wrote HTML report to file:///Users/leiqi/branch/MyApplication/app/build/reports/lint-results.html
Wrote XML report to file:///Users/leiqi/branch/MyApplication/app/build/reports/lint-results.xml
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 9s
51 actionable tasks: 1 executed, 50 up-to-date
See the profiling report at: file:///Users/leiqi/TZYJ/branch/MyApplication/build/reports/profile/profile-2020-02-14-15-14-17.html
A fine-grained performance profile is available: use the --scan option.
我們看到控制臺(tái)它會(huì)輸出已生成 HTML 格式和 XML 格式的文檔。我們可以看下 reports 文件夾
我們?cè)跒g覽器中,大家打開該文件就可以看到具體的任務(wù)耗時(shí)了,如下圖:
2.5 查看 Gradle 的 Task
我們?cè)陂_發(fā)過程中有時(shí)候難免會(huì)要查看 Gradle 構(gòu)建有哪些任務(wù),那么我們就可以使用下面的命令來查看:
$ gradle task
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------
Android tasks
-------------
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for the base and test modules
sourceSets - Prints out all the source sets defined in this project.
Build tasks
-----------
assemble - Assemble main outputs for all the variants.
assembleAndroidTest - Assembles all the Test applications.
build - Assembles and tests this project.
.........省略部分任務(wù)..............
Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
Cleanup tasks
-------------
lintFix - Runs lint on all variants and applies any safe suggestions to the source code.
.........省略部分任務(wù)..............
我們可以看到這個(gè)命令執(zhí)行后會(huì)輸出輸出各種任務(wù)。
Tips: 我們看到這個(gè)很多,其實(shí)該命令輸出的不是所有的命令,要查看項(xiàng)目構(gòu)建的所有命令,我們需要執(zhí)行的時(shí)候 后面加上
--all
如下:
$ gradle task -all
2.6 使用 Gradle 命令來打 Android 包
我們?cè)陂_發(fā)中經(jīng)常是點(diǎn)擊 run 按鈕來執(zhí)行編譯并打包的,這樣打出來的包是 Debug 包,供我們開發(fā)者來開發(fā)調(diào)試的,但是我們上線或是提交測(cè)試的時(shí)候我們需要提交的是 Release 包。下面我們就來看下我們?nèi)绾问褂?Gradle 命令來打包。
// 編譯并打Debug包
$ gradle assembleDebug
// 編譯app module 并打Debug包
$ gradlew install app:assembleDebug
// 編譯并打Release的包
# gradle assembleRelease
// 編譯并打Release包并安裝
$ gradle installRelease
// 卸載Release包
$ gradle uninstallRelease
以上是我總結(jié)的我們平時(shí)開發(fā)中打包最常用的幾個(gè)命令。
2.7 exlude 排除依賴包中的部分類
我們開發(fā)中,可能大家或多或少都會(huì)遇到 jar 包沖突的問題,有時(shí)候兩個(gè) jar 包不同,但是里面有兩個(gè)類的包名路徑是一摸一樣的。這樣我們就需要排除掉某個(gè)包中的重復(fù)的類,這時(shí)候就需要用的 exclude 命令,如下我們就以排除這個(gè)hibernate
包中的類為例子。
compile('org.hibernate:hibernate:3.1') {
//以artifact name來排除出
exclude module: 'cglib'
//通過group name來排除
exclude group: 'org.jmock'
}
3. 小結(jié)
這一篇文章我們主要是學(xué)習(xí)了,我們?nèi)粘i_發(fā)中會(huì)用到的 Gradle 的一些命令??赡苡型瑢W(xué)會(huì)問,我們?yōu)槭裁匆私?Gradle 命令?我們平時(shí)直接使用工具編譯不就好了。當(dāng)然我們可以通過 AS 等編譯工具來編譯,其實(shí) AS 的編譯按鈕也是在執(zhí)行 Gradle 命令,有時(shí)候?yàn)榱烁玫奶岣呶覀兊拈_發(fā)效率為我們節(jié)省時(shí)間。我們就需要用到 Gradle 的命令去排查問題。還有一個(gè)就是我們了解 Gradle 命令有助于我們后面 Gradle 運(yùn)用在組件化,插件化,編譯自己的 Gradle 插件等方面。