//指定相應(yīng)版本號的gradle
gradle wrapper --gradle-version [version]
編譯命令
檢查依賴并編譯打包
./gradlew build
編譯并打出Debug包
./gradlew assembleDebug
編譯打出Debug包并安裝
./gradlew installDebug
編譯并打出Release包
./gradlew assembleRelease
編譯打出Release包并安裝
./gradlew installRelease
Debug/Release編譯并打印日志
./gradlew assembleDebug --info
./gradlew assembleRelease --info
清除構(gòu)建目錄下的產(chǎn)物
./gradlew clean
卸載Debug/Release安裝包
./gradlew uninstallDebug
./gradlew uninstallRelease
輸出:
Uninstalling com.yechaoa.gradlex (from app:debug) from device 'Pixel_5_API_31(AVD) - 12' (emulator-5554).
Uninstalled com.yechaoa.gradlex from 1 device.
adb卸載
在Android Studio中執(zhí)行是直接卸載的當前項目安裝包,如果是adb執(zhí)行則需要指定包名。
adb uninstall packagename
任務(wù)相關(guān)
查看主要Task
./gradlew tasks
查看所有Task
./gradlew tasks --all
執(zhí)行Task
./gradlew taskName
// or
./gradlew :moduleName:taskName
查看依賴
查看項目根目錄下的依賴
./gradlew dependencies
查看app模塊下的依賴
./gradlew :app:dependencies
查看依賴輸出到文件
./gradlew app:dependencies > dependencies.txt
性能相關(guān)
離線編譯
./gradlew assembleDebug --offline
構(gòu)建緩存
./gradlew assembleDebug --build-cache // 開啟
./gradlew assembleDebug --no-build-cache // 不開啟
配置緩存
./gradlew assembleDebug --configuration-cache // 開啟
./gradlew assembleDebug --no-configuration-cache // 不開啟
并行構(gòu)建
./gradlew assembleDebug --parallel // 開啟
./gradlew assembleDebug --no-parallel // 不開啟
離線編譯、構(gòu)建緩存、配置緩存、并行構(gòu)建均需要在gradle.properties中配置
編譯并輸出性能報告
./gradlew assembleDebug --profile
性能報告位于構(gòu)建項目的GradleX/build/reports/profile/路徑下。
See the profiling report at: file:///Users/yechao/AndroidStudioProjects/GradleX/build/reports/profile/profile-2022-11-29-23-13-29.html
編譯并輸出更詳細性能報告
./gradlew assembleDebug --scan
首次執(zhí)行需要郵箱驗證,授權(quán)即可,完事之后即可打開鏈接,scan報告內(nèi)容比profile更加詳細。
動態(tài)傳參
比較常用的傳參屬性,--project-prop,我們一般常用-P表示,用來設(shè)置根項目的項目屬性
獲取參數(shù)
./gradlew assembleDebug -PisTest=true
這里我們用-P傳了一個isTest字段,并賦值為true。
那在代碼里如何獲取這個參數(shù)呢?然后在build.gradle中編寫如下代碼:
if (hasProperty("isTest")){
println("---hasProperty isTest yes")
}else {
println("---hasProperty isTest no")
}
我們可以用hasProperty來獲取命令行(CLI)的參數(shù),module或者插件也可以這么獲?。?/p>
project.property('isTest')
然后我們用上面的命令編譯看下輸出:
? GradleX git:(master) ? ./gradlew assembleDebug -PisTest=true
---Gradle:開始初始化了
---Gradle:settingsEvaluated Settings對象評估完畢
---Gradle:projectsLoaded 準備加載Project對象了
> Configure project :
---Gradle:Projec beforeEvaluate Project開始評估,對象是 = GradleX
---hasProperty isTest yes // --- 看這里 ---
---Gradle:Projec afterEvaluate Project評估完畢,對象是 = GradleX
> Configure project :app
---Gradle:buildFinished 構(gòu)建結(jié)束了
獲取參數(shù)值
我們可以用getProperty()來獲取:
if (hasProperty("isTest")) {
println("---hasProperty isTest yes")
if (Boolean.valueOf(getProperty('isTest'))) {
println("---isTest true")
} else {
println("---isTest false")
}
} else {
println("---hasProperty isTest no")
}
注意,getProperty('isTest')這里要用單引號,另外命令行里面的參數(shù)值都是對象,還需要基本數(shù)據(jù)類型轉(zhuǎn)換一下,即Boolean.valueOf(getProperty('isTest'))。
自定義操作
我們就可以針對獲取的參數(shù)去做一些自定義的操作了,比如修改我們的依賴。
app>build.gradle:
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
if (project.hasProperty("isTest")) {
println("---hasProperty isTest yes")
if (Boolean.valueOf(getProperty('isTest'))) {
println("---isTest true")
implementation 'com.yechaoa.gradlex.devtools:devtools:1.1.1'
} else {
println("---isTest false")
implementation 'com.yechaoa.gradlex.devtools:devtools:2.2.2'
}
} else {
println("---hasProperty isTest no")
}
testImplementation 'junit:junit:4.13.2'
}