Gradle命令詳解
前面一節(jié)課中,我們介紹了 Gradle 的任務(wù)聲明,任務(wù)依賴,Gradle 構(gòu)建的順序等。其實在文章中我們也提到了一些 Gradle 命令。本文我們將為大家介紹一下 Gradle 的命令,包括會將前面的命令使用做一個匯總。
1. 使用 Gradle 命令
使用 Gradle 命令就是我們在命令控制臺輸入 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)境變量的安裝配置請看《構(gòu)建自己的Gradle工程》
$ gradle -version
-bash: gradle: command not found
1.2 沒有安裝 Gradle 環(huán)境
我們前面提到過如果沒有安裝配置 Gradle 環(huán)境變量,我們可以使用gradlew
命令。我們前面知道我們創(chuàng)建 Android 項目時默認(rèn)會有兩個腳本gradlew.bat
[Windows平臺]和gradlew
[Linux和Unix平臺]。這兩個腳本里面預(yù)置了我們常用的一些命令。我們以clean命令為例:
//Windows系統(tǒng)
gradlew clean
//Linux系統(tǒng)或是Mac系統(tǒng)
./gradlew clean
2. Gradle 常用命令
2.1 使用 Gradle Wrapper
我們前面講《Gradle Wrapper詳解》的時候提到過我們?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 查看項目的任務(wù)依賴
要查看項目的依賴關(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)行該命令后我們可以在控制臺看到項目的整體依賴關(guān)系和各個模塊的依賴關(guān)系圖,如上面的部分輸出所示。
Tips:上面我們運(yùn)行的命令輸出的是整個項目的依賴,有時候我們只需要查查看當(dāng)前 module 的依賴,那么我們怎么查查看呢?如下,我們輸入
gradle [module_name]:dependencies
,例如我們想要查看 app 模塊的依賴,我們可以執(zhí)行如下命令:
//查看APP模塊的依賴
$ gradle app:dependencies
2.3 排除某些任務(wù)
前面我么講了 Gradle 的任務(wù),我們可以用-x
選項去排除一個任務(wù)。我們在build.gradle
中定義的task mTest
,我們?nèi)绻胍^mTest
,可以用以下的命令:
//buid.gradle中定義的Task,mTest
task mTest{
doLast{
println "這是測試Task"
}
}
//在控制臺執(zhí)行命令排除
$ gradle clean build -x mTest
2.4 分析項目構(gòu)建
在 Gradle 中內(nèi)置了對項目分析的支持,我們平時如果遇到構(gòu)建的性能問題,比如我們構(gòu)建時間長,想要查看每個任務(wù)構(gòu)建時間,我們可以使用這個命令[--profile build
]來生成項目的配置文件報告,報告會以文件形式生成在 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.
我們看到控制臺它會輸出已生成 HTML 格式和 XML 格式的文檔。我們可以看下 reports 文件夾
我們在瀏覽器中,大家打開該文件就可以看到具體的任務(wù)耗時了,如下圖:
2.5 查看 Gradle 的 Task
我們在開發(fā)過程中有時候難免會要查看 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ù)..............
我們可以看到這個命令執(zhí)行后會輸出輸出各種任務(wù)。
Tips: 我們看到這個很多,其實該命令輸出的不是所有的命令,要查看項目構(gòu)建的所有命令,我們需要執(zhí)行的時候 后面加上
--all
如下:
$ gradle task -all
2.6 使用 Gradle 命令來打 Android 包
我們在開發(fā)中經(jīng)常是點(diǎn)擊 run 按鈕來執(zhí)行編譯并打包的,這樣打出來的包是 Debug 包,供我們開發(fā)者來開發(fā)調(diào)試的,但是我們上線或是提交測試的時候我們需要提交的是 Release 包。下面我們就來看下我們?nèi)绾问褂?Gradle 命令來打包。
// 編譯并打Debug包
$ gradle assembleDebug
// 編譯app module 并打Debug包
$ gradlew install app:assembleDebug
// 編譯并打Release的包
# gradle assembleRelease
// 編譯并打Release包并安裝
$ gradle installRelease
// 卸載Release包
$ gradle uninstallRelease
以上是我總結(jié)的我們平時開發(fā)中打包最常用的幾個命令。
2.7 exlude 排除依賴包中的部分類
我們開發(fā)中,可能大家或多或少都會遇到 jar 包沖突的問題,有時候兩個 jar 包不同,但是里面有兩個類的包名路徑是一摸一樣的。這樣我們就需要排除掉某個包中的重復(fù)的類,這時候就需要用的 exclude 命令,如下我們就以排除這個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ā)中會用到的 Gradle 的一些命令??赡苡型瑢W(xué)會問,我們?yōu)槭裁匆私?Gradle 命令?我們平時直接使用工具編譯不就好了。當(dāng)然我們可以通過 AS 等編譯工具來編譯,其實 AS 的編譯按鈕也是在執(zhí)行 Gradle 命令,有時候為了更好的提高我們的開發(fā)效率為我們節(jié)省時間。我們就需要用到 Gradle 的命令去排查問題。還有一個就是我們了解 Gradle 命令有助于我們后面 Gradle 運(yùn)用在組件化,插件化,編譯自己的 Gradle 插件等方面。