【Gradle】簡單又實用的Gradle小技巧

一直聽說Gradle神乎其神艺谆,但奈何才疏學淺無法領(lǐng)悟其精髓棵红。

昨天忙里偷閑扒了幾篇大神博客胀糜,有點想法總結(jié)一下祟昭。

心急的同學可以直接拉到最后一個大標題 ** 一些技巧 ** ヾ(≧O≦)〃嗷~


Gradle缕坎?

大概來說,這貨就是一個自動化構(gòu)建工具篡悟,跟ant差不多谜叹,如果沒有它的話,編譯android會是件很麻煩的事情恰力。

如果你用的是AS叉谜,那么他會幫你自動安裝,不用自己操心踩萎。

在使用AS建立 Android 項目的時候,會自動幫你生成Gradle文件很钓,簡單的項目其實可以忽略這東西的存在香府。

圖1.png

如圖1所示,Progect在Android視圖码倦,每次我們新建項目的時候企孩,會出現(xiàn)這三個Gradle文件,第一個是全局Gradle文件袁稽,一般不做修改勿璃,第三個是告訴編譯器需要編譯哪些模塊,一般在Module Setting里修改之后自動更改推汽。我們重點關(guān)注下第二個补疑,也就是我們自己模塊的Gradle文件。

ps:集成codetags的時候歹撒,官方文檔要求修改全局gradle文件莲组,我不知道這么做的必要性是什么。


幾個常見配置

如果整個項目就只有一個module暖夭,那么這個Gradle文件就是最重要的一個锹杈,他關(guān)系到我們整個app的編譯過程,以下是我們項目這個文件的大概樣子


// 使用插件 聲明是Android程序
apply plugin: 'com.android.application'

android {
    // 編譯SDK的版本
    compileSdkVersion 25
    // build tools的版本
    buildToolsVersion "24.0.3"

    defaultConfig {
        // 應(yīng)用包名
        applicationId "com.zx.myapplication"
        // 最小支持的sdk版本
        minSdkVersion 23
        // 目標sdk版本
        targetSdkVersion 25
        // 版本號
        versionCode 1
        // 版本名稱
        versionName "1.0"
    }
    // 簽名信息
    signingConfigs {
        release {
            storeFile file('D:/Java/test/test.jks')
            storePassword "test"
            keyAlias "test"
            keyPassword "test"
        }
        debug {

        }
    }

    buildTypes {
        release {
            // app名稱替換
            manifestPlaceholders = [app_name:"@string/app_name"]
            //構(gòu)建 release 使用 release簽名
            signingConfig signingConfigs.release
            // 是否進行混淆
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // 自動判斷是測試環(huán)境還是生產(chǎn)環(huán)境
            buildConfigField("boolean", "isRelease", "true")
        }
        debug {
            // app名稱替換
            manifestPlaceholders = [app_name:"@string/app_name_debug"]
            //構(gòu)建 debug 使用 debug 簽名
            signingConfig signingConfigs.debug

            // 自動判斷是測試環(huán)境還是生產(chǎn)環(huán)境
            buildConfigField("boolean", "isRelease", "false")
        }

        userdebug {
            // app名稱替換
            manifestPlaceholders = [app_name:"@string/app_name_userdebug"]
            //構(gòu)建 userdebug 使用 release 簽名
            signingConfig signingConfigs.release
            
            // 保留debug信息
            debuggable true 
            // 自動判斷是測試環(huán)境還是生產(chǎn)環(huán)境
            buildConfigField("boolean", "isRelease", "false")
        }
    }

    // 各種渠道迈着,可以做一些多渠道區(qū)分
    productFlavors {
    qihu {

    }
    tengxun {

    }
}

    // 移除lint檢查的error
    lintOptions {
        disable "ResourceType"
    }
}

// 依賴信息
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    testCompile 'junit:junit:4.12'
}

清單文件中被替換的部分長這個樣子


<application
      ...
      android:label="${app_name}"
      ...

      <activity
      ...
      </activity>
<application

這是一個gradle文件的例子竭望,有詳細注釋。

圖2裕菠,通過AS更改Gradle文件.jpg

當然咬清,gradle文件也可以通過圖二幾個選項快速更改。

但是需要強調(diào)的是 ** buildTypes ** 節(jié)點。
AS項目在新建之初枫振,在Gradle文件中喻圃,buildTypes節(jié)點下會默認生成一個release節(jié)點,方便用戶配置正式版本的編譯信息粪滤,此時debug雖然沒有寫出來斧拍,但它也是默認存在的,去圖三的位置可以看到存在兩個節(jié)點杖小。
在當前例子中可以注意到肆汹,我在buildTypes中配置了三個節(jié)點,release予权,debug昂勉,userdebug。這三個節(jié)點分別代表了不同的構(gòu)建版本扫腺,發(fā)布版岗照,測試版以及用戶測試版。
而 ** productFlavors ** 節(jié)點笆环,用來配置多渠道信息攒至,兩個節(jié)點相加,就是 BuildVariants(構(gòu)建變種版本)躁劣。
點擊圖2中的 ** select build variant ** 選項迫吐,在 如圖3 彈出窗口選擇后,可以直接通過 綠色箭頭账忘,Run 'app' 得到相應(yīng)版本志膀,或者在構(gòu)建簽名版本的時候,在Build->Generate Signed APK鳖擒,填寫簽名信息之后溉浙,也可以看到Flavors多了我們添加的渠道。

圖3-構(gòu)建變種版本.png

一些技巧

  1. 在 ** buildTypes ** 的三個節(jié)點中败去,都有兩句代碼:
buildConfigField("boolean", "isRelease", "false") 

signingConfig signingConfigs.release

第一句話的作用是在構(gòu)建不同版本的時候(release/debug/userdebug)放航,自動生成一個類型為 boolean ,變量名為 isRelease 的變量圆裕,然后在項目任意位置广鳍,可以通過 BuildConfig.isRelease 取得這個值。我會通過這個值來判斷訪問測試接口還是正式接口吓妆。
另外赊时,上述判斷版本也可以用其他字段實現(xiàn),詳見自己項目中的BuildConfig.class文件行拢。
第二句話的作用是在構(gòu)建不同版本的時候(release/debug/userdebug)祖秒,使用不同的簽名,比如測試簽名無法調(diào)起 微信分享,必須使用正式簽名竭缝。
在我的配置中房维,有一個 ** userdebug ** 節(jié)點,使用測試接口以及正式簽名抬纸,這樣就可以在測試環(huán)境下咙俩,調(diào)起微信分享。生產(chǎn)環(huán)境的時候使用 ** release ** 節(jié)點湿故,可以防止由于疏忽把測試數(shù)據(jù)帶入生產(chǎn)環(huán)境阿趁。

  1. 自定義build type節(jié)點,如** userdebug ** 節(jié)點如果需要打印輸出信息坛猪,必須配置

userdebug {
        ...
        // 保留debug信息
        debuggable true 
}

debug和release為默認節(jié)點脖阵,無需配置。

  1. 如果想讓測試環(huán)境的APP跟生產(chǎn)環(huán)境的APP同時安裝在手機上墅茉,可以使用

debug {
        ...
        applicationIdSuffix ".debug"
}

這樣可以改變debug包的ApplicationId命黔,這句話的作用是在原有ApplicationId后面追加一個.debug,來達到區(qū)分APP的作用就斤。
PS: 但是這么做的代價是依賴ApplicationId做唯一標識的三方庫會無法使用纷铣,例如微信分享。在三方庫管理平臺上添加一次應(yīng)用即可解決战转,添加的應(yīng)用ApplicationId為 完整包名.debug


特別感謝 stormzhang 大神以躯,看他的博客收獲良多槐秧。


個人理解,難免有錯誤紕漏忧设,歡迎指正刁标。轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末址晕,一起剝皮案震驚了整個濱河市膀懈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谨垃,老刑警劉巖启搂,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刘陶,居然都是意外死亡胳赌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門匙隔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疑苫,“玉大人,你說我怎么就攤上這事『床簦” “怎么了撼短?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挺勿。 經(jīng)常有香客問我曲横,道長,這世上最難降的妖魔是什么满钟? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任胜榔,我火速辦了婚禮,結(jié)果婚禮上湃番,老公的妹妹穿的比我還像新娘夭织。我一直安慰自己,他們只是感情好吠撮,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布尊惰。 她就那樣靜靜地躺著,像睡著了一般泥兰。 火紅的嫁衣襯著肌膚如雪弄屡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天鞋诗,我揣著相機與錄音膀捷,去河邊找鬼。 笑死削彬,一個胖子當著我的面吹牛全庸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播融痛,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼壶笼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雁刷?” 一聲冷哼從身側(cè)響起覆劈,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沛励,沒想到半個月后责语,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡侯勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年鹦筹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片址貌。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡铐拐,死狀恐怖徘键,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遍蟋,我是刑警寧澤吹害,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站虚青,受9級特大地震影響它呀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棒厘,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一纵穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奢人,春花似錦谓媒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至支救,卻和暖如春抢野,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背各墨。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工指孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贬堵。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓邓厕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扁瓢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/5255b100930e 0. 前言 完全由個人翻...
    王三的貓阿德閱讀 2,504評論 0 4
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項补君,請點擊這里進行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,122評論 8 72
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理引几,服務(wù)發(fā)現(xiàn),斷路器挽铁,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • Gradle對于很多開發(fā)者來說有一種既熟悉又陌生的感覺伟桅,他是離我們那么近,以至于我每天做項目都需要他叽掘,但是他又是離...
    阿_希爸閱讀 9,573評論 10 199
  • 今天是二月十四更扁,據(jù)說是情人節(jié)盖腕。因是情人赫冬,再而為侶,有情有侶溃列,簡稱"情侶"劲厌。過情人節(jié)的人是情侶,不為情侶的人听隐,便借以...
    23齒輪閱讀 830評論 0 0