Gradle Android-build 常用命令參數(shù)及解釋

[TOC]

介紹

Gradle 是google開發(fā)的基于groovy語言 ,用于代替 ant 構建的一種配置型語言

Gradle 是基于groovy語言實現(xiàn)(基于JVM的語法和java類似的腳本語言)的一個Android編譯系統(tǒng), google針對Android編譯用groovy語言開發(fā)了一套 DSL 語言
有額外需要直接使用groovy,或者java代碼解決

gradle wrapper

每個基于gradle構建的工程都有一個gradle本地代理,叫做 gradle wrapper
/gradle/wrapper/gralde-wrapper.properties 目錄中聲明了指向目錄和版本

官方的各個版本的代理下載地址 https://services.gradle.org/distributions/
如果 gradle 初次構建緩慢,可以手動下載代理放到${USER}/.gradle/wrapper/dists

本地建立文件 gradle.properties 或者在用戶的 .gradle目錄下建立 gradle.properties 文件作為全局設置,參數(shù)有

# 開啟并行編譯
org.gradle.parallel=true
# 開啟守護進程
org.gradle.daemon=true
# 按需編譯
org.gradle.configureondemand=true
# 設置編譯jvm參數(shù)
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 設置代理
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10384
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10384
# 開啟JNI編譯支持過時API
android.useDeprecatedNdk=true

安裝一個全局的gradle,并配置好Path變量,避免每個項目重復下載,這樣后面編譯項目就可以直接運行gradle build

常用命令

注意:在window下可以直接運行 gradlew 如果是Linux 或者 mac 命令為 gradle gradlew 這里都簡寫成 ./gradlew

gradle 任務查詢命令

  • 所有后面的命令,都必須在 tasks --all 可見,不然報告找不到這個任務
# 查看任務
./gradlew tasks
# 查看所有任務 包括緩存任務等
./gradlew tasks --all
# 對某個module [moduleName] 的某個任務[TaskName] 運行
./gradlew :moduleName:taskName

說明,module 定義在 工程根 settings.gradle 下,由 include 指定
子模塊任務,不代表工程根也有同樣的任務,所以需要單獨查詢

moduel 最佳命名實踐為 全小寫英文 防止編譯兼容問題

快速構建命令

# 查看構建版本
./gradlew -v
# 清除build文件夾
./gradlew clean
# 檢查依賴并編譯打包
./gradlew build
# 編譯并安裝debug包
./gradlew installDebug
# 編譯并打印日志
./gradlew build --info
# 譯并輸出性能報告,性能報告一般在 構建工程根目錄 build/reports/profile
./gradlew build --profile
# 調試模式構建并打印堆棧日志
./gradlew build --info --debug --stacktrace
# 強制更新最新依賴,清除構建并構建
./gradlew clean build --refresh-dependencies

注意build命令把 debug、release環(huán)境的包都打出來的
如果需要指定構建使用如下命令

gradle 指定構建目標命令

# 編譯并打Debug包
./gradlew assembleDebug
# 這個是簡寫 assembleDebug
./gradlew aD
# 編譯并打Release的包
./gradlew assembleRelease
# 這個是簡寫 assembleRelease
./gradlew aR

gradle 更新最新依賴問題

這個是困擾不少開發(fā)者的問題,其實研究一下就知道

  • gradle 相對 maven 做了一層本地緩存 ${user}/.gradle/caches/modules-2(默認緩存更新是 24小時)
  • gradle 在當前工程也做了一層緩存 ${project.root}/.gradle
  • 使用 IDE 這種集成開發(fā)環(huán)境,也加了一層緩存(在 IDE 的緩存目錄里面)
  • 工程開發(fā)配置文件(當前工程下 .idea .vsc 等等),這個會影響到代碼提示

所以,經常出現(xiàn) gradle 命令更新到最新依賴代碼,IDE 不顯示的問題,你需要自行處理好緩存
一般命令行 加入 --refresh-dependencies 可以更新 gradle 部分,但不會影響到 IDE
如果想要 IDE 在寫代碼時知道更新,你需要刷新或者修改 IDE 的緩存,具體怎么操作需要根據(jù)情況自行解決
這里提供2個工具腳本輔助

腳本工具由 python2 編寫,怎么做到全局使用,請配置在環(huán)境變量中,需要額外功能,請自行修改腳本,本人不提供免費的技術服務

gradle 構建并安裝調試命令

# 編譯并打Debug包
./gradlew assembleDebug
# 編譯app module 并打Debug包
./gradlew install app:assembleDebug
# 編譯并打Release的包
./gradlew assembleRelease
#  Release模式打包并安裝
./gradlew installRelease
# 卸載Release模式包
./gradlew uninstallRelease

gradle 多渠道打包

assemble還可以和productFlavors結合使用,如果出現(xiàn)類似 Task 'install' is ambiguous in root project 這種錯誤,請查看配置的多個渠道然后修改命令為
./gradlew install[productFlavorsName] app:assembleDebug
來用命令構建調試

# Release模式打包并安裝
./gradlew installRelease
# 卸載Release模式包
./gradlew uninstallRelease
# Release模式全部渠道打包
./gradlew assembleRelease
# Release模式 test 渠道打包
./gradlew assembleTestRelease
# debug release模式全部渠道打包
./gradlew assemble

gradle 查看包依賴

./gradlew dependencies
# 或者模組的 依賴
./gradlew app:dependencies
# 檢索依賴庫
./gradlew app:dependencies | grep CompileClasspath
# windows 沒有 grep 命令
./gradlew app:dependencies | findstr "CompileClasspath"

# 將檢索到的依賴分組找到 比如 multiDebugCompileClasspath 就是 multi 渠道分發(fā)的開發(fā)編譯依賴
./gradlew app:dependencies --configuration multiDebugCompileClasspath
# 一般編譯時的依賴庫,不是固定配置方式,建議檢索后嘗試
./gradlew app:dependencies --configuration compile
# 一般運行時的依賴庫,不是固定配置方式,建議檢索后嘗試
./gradlew app:dependencies --configuration runtime

gradle 依賴管理

  • 傳遞依賴特性
dependencies {
    transitive true
}

手動配置transitive屬性為false,阻止依賴的下載

  • 強制指定編譯版本
configurations.all{
  // transitive false
  // 強制指定版本
  resolutionStrategy{
    force 'org.hamcrest:hamcrest-core:1.3'
  // 強制不編譯
  all*.excludegroup: 'org.hamcrest', module:'hamcrest-core'
  }
}
  • 動態(tài)依賴特性
dependencies {
    // 任意一個版本
    compile group:'b',name:'b',version:'1.+'
    // 最新的版本
    compile group:'a',name:'a',version:'latest.integration'
}

查看詳細依賴信息

使用離線模式

./gradlew aDR --offline

守護進程

./gradle build --daemon

并行編譯模式

./gradle build --parallel --parallel-threads=N

按需編譯模式

./gradle build --configure-on-demand

不使用snapshot依賴倉庫

前提是離線可以使用時

./gradlew clean aDR

設定編碼

allprojects {
...
    tasks.withType(JavaCompile){
        options.encoding = "UTF-8"
    }
...
}

倉庫設置

設置中心倉庫

默認是jcenter、可以是mavenCentral

repositories {
    // gralde 4.0 以后出現(xiàn),訪問倉庫為 https://dl.google.com/dl/android/maven2/
    google()
    // 私有,或者國內鏡像倉庫配置方法
    maven { url "http://maven.oschina.net/content/groups/public" }
    // maven centeral 由Sonatype公司提供的服務,它是ApacheMaven、SBT和其他構建系統(tǒng)的默認倉庫
    mavenCentral()
    // jcenter 由JFrog公司提供的Bintray中的Java倉庫,是GoovyGrape內的默認倉庫,Gradle內建支持
    jcenter()
    // mavenCentral 和 jcenter 搜索庫 http://mvnrepository.com/

}

repositories 倉庫的寫作順序,會影響到拉取的速度,因為 groovy 腳本執(zhí)行時,是按數(shù)組下標進行的

Android Studio 提速

禁用插件

去掉一些沒有用的插件,這個不是固定的,如果你能解決網絡問題,開啟這些插件對你寫代碼有好處
Google Cloud Testing、Google Cloud Tools For Android Studio、Goole Login、Google Services、JavaFX、SDK Updater、TestNG-J

android studio 2.2.2新特性 編譯緩存

工程根目錄 gradle.properties 文件里加上

android.enableBuildCache=true

這個設置可以讓Android Studio 會把依賴的 jar 或 arr 緩存到本地,并且把模塊名稱設置為 hash 值

這個開啟后,可能導致 includeJarFilter 配置失效,Android Studio 升級到 2.3.0修復這個問題

每次編譯生成的緩存在 $HOME/.android/build-cache
如果緩存過多可以手動刪除該目錄進行清除

升級到 Android Studio 2.3 后編譯不兼容問題

升級到 Android Studio 2.3 后,Gradle Plugin 也升級到 2.3.0

  • 對應推薦使用的 Gradle 版本是 3.3

這時候會發(fā)現(xiàn)工程模塊目錄下 {module name}/build/intermediates/exploded-aar/
目錄沒了

它會在 $HOME/.android/build-cache 下生成一部分緩存文件,來代替 exploded-aar
如果需要生成exploded-aar,可以配置項目目錄下的 gradle.properties ,添加一行內容

android.enableBuildCache=false

然后重新構建項目即可在 {module name}/build/intermediates/看到 exploded-aar 目錄

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容