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

[TOC]

介紹

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

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

gradle wrapper

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

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

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

# 開啟并行編譯
org.gradle.parallel=true
# 開啟守護(hù)進(jìn)程
org.gradle.daemon=true
# 按需編譯
org.gradle.configureondemand=true
# 設(shè)置編譯jvm參數(shù)
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 設(shè)置代理
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變量,避免每個項目重復(fù)下載钉凌,這樣后面編譯項目就可以直接運(yùn)行g(shù)radle build

常用命令

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

gradle 任務(wù)查詢命令

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

說明,module 定義在 工程根 settings.gradle 下矢沿,由 include 指定
子模塊任務(wù)滥搭,不代表工程根也有同樣的任務(wù),所以需要單獨(dú)查詢

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

快速構(gòu)建命令

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

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

gradle 指定構(gòu)建目標(biāo)命令

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

gradle 更新最新依賴問題

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

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

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

腳本工具由 python2 編寫穿仪,怎么做到全局使用席爽,請配置在環(huán)境變量中,需要額外功能啊片,請自行修改腳本只锻,本人不提供免費(fèi)的技術(shù)服務(wù)

gradle 構(gòu)建并安裝調(diào)試命令

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

gradle 多渠道打包

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

# 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
# 一般運(yùn)行時的依賴庫笤昨,不是固定配置方式祖驱,建議檢索后嘗試
./gradlew app:dependencies --configuration runtime

gradle 依賴管理

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

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

  • 強(qiáng)制指定編譯版本
configurations.all{
  // transitive false
  // 強(qiáng)制指定版本
  resolutionStrategy{
    force 'org.hamcrest:hamcrest-core:1.3'
  // 強(qiáng)制不編譯
  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'
}

查看詳細(xì)依賴信息

使用離線模式

./gradlew aDR --offline

守護(hù)進(jìn)程

./gradle build --daemon

并行編譯模式

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

按需編譯模式

./gradle build --configure-on-demand

不使用snapshot依賴倉庫

前提是離線可以使用時

./gradlew clean aDR

設(shè)定編碼

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

倉庫設(shè)置

設(shè)置中心倉庫

默認(rèn)是jcenter瞒窒、可以是mavenCentral

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

}

repositories 倉庫的寫作順序拔稳,會影響到拉取的速度葛峻,因為 groovy 腳本執(zhí)行時,是按數(shù)組下標(biāo)進(jìn)行的

Android Studio 提速

禁用插件

去掉一些沒有用的插件巴比,這個不是固定的术奖,如果你能解決網(wǎng)絡(luò)問題礁遵,開啟這些插件對你寫代碼有好處
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

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

這個開啟后选侨,可能導(dǎo)致 includeJarFilter 配置失效掖鱼,Android Studio 升級到 2.3.0修復(fù)這個問題

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

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

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

  • 對應(yīng)推薦使用的 Gradle 版本是 3.3

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

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

android.enableBuildCache=false

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晨仑,一起剝皮案震驚了整個濱河市褐墅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洪己,老刑警劉巖妥凳,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異答捕,居然都是意外死亡逝钥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門拱镐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艘款,“玉大人,你說我怎么就攤上這事沃琅』┡兀” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵益眉,是天一觀的道長晌柬。 經(jīng)常有香客問我,道長郭脂,這世上最難降的妖魔是什么空繁? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮朱庆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闷祥。我一直安慰自己娱颊,他們只是感情好傲诵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箱硕,像睡著了一般拴竹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剧罩,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天栓拜,我揣著相機(jī)與錄音,去河邊找鬼惠昔。 笑死幕与,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镇防。 我是一名探鬼主播啦鸣,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼来氧!你這毒婦竟也來了诫给?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤啦扬,失蹤者是張志新(化名)和其女友劉穎中狂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扑毡,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胃榕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僚楞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勤晚。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泉褐,靈堂內(nèi)的尸體忽然破棺而出赐写,到底是詐尸還是另有隱情,我是刑警寧澤膜赃,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布挺邀,位于F島的核電站,受9級特大地震影響跳座,放射性物質(zhì)發(fā)生泄漏端铛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一疲眷、第九天 我趴在偏房一處隱蔽的房頂上張望禾蚕。 院中可真熱鬧,春花似錦狂丝、人聲如沸换淆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倍试。三九已至讯屈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間县习,已是汗流浹背涮母。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躁愿,地道東北人叛本。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像攘已,于是被迫代替她去往敵國和親炮赦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容