Gradle替換變量的小技巧

在使用 androidStudio 的時候稍坯,和 Eclipse 對比最大的優(yōu)勢酬荞,就是可以更靈活的配置任何地方,可以定制出更多更復雜的適合我們自己的個性化配置瞧哟,下面我們就來總結下開發(fā)過程中遇到的一些問題混巧。

開發(fā)打包過程中,我們經常會有多個不同渠道的打包需求勤揩,不同渠道的打包可能會遇到替換資源文件的 string 咧党, drawable 以及 applicationId,包名陨亡, 代碼中的各種開關等等傍衡。怎么解決這些問題深员?

問題一: 怎么打包時候動態(tài)替換 applicationId ?
問題二: 怎么打包時候動態(tài)替換 常量蛙埂?如字符串倦畅,log開關等
問題三: 怎么打包時候動態(tài)替換 渠道資源 ?如友盟的渠道信息

先熟悉下 gradle 配置文件的結構, 并將問題的答案寫在代碼中:

apply plugin: com.android.application''
android{
    compileSdkVersion 25
    buildToolsVersion  25.0.2

    defaultConfig{
        applicationId "com.xyd.http_demo"
        minSdkVersion 16
        targetSdkVersion 22
        verionCode  1
        versionName   "1.0.0"
    }
    // 編譯類型绣的,只能有 release 和 debug 這兩種版本叠赐,可以配置代碼中的開關,靜態(tài)變量等
    buildTypes{
        debug {
            signingConfig signingConfigs.release
            //shrinkResources true
            //對齊優(yōu)化設置為true屡江,否則找不到該task (默認不寫也是true)
            zipAlignEnabled true
            buildConfigField "boolean", "LOG_DEBUG", "true"
            buildConfigField "boolean", "OPEN_AD", "false"
            buildConfigField "boolean", "OPEN_Verify", "false"
        }
        release {
            signingConfig signingConfigs.release
            // 不顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            buildConfigField "boolean", "OPEN_AD", "true"
            buildConfigField "boolean", "OPEN_Verify", "true"

            minifyEnabled false  //混淆
            zipAlignEnabled true //Zipalign優(yōu)化
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
  // 簽名文件的配置
  signingConfigs{
        release {
           keyAlias "xyd"
           keyPassword "xyd"
           storeFile file('.../sss.jks')
           storePassword '123456'
        }
        debug{
        }
  }
  // 配置多渠道芭概, 這里的多渠道名會出現(xiàn)在 gradle -> tasks -> build 下
  productFlavors{
        // 渠道名是字符串的形式,可以用 "" 包起來惩嘉,如 "baidu" ;或者直接寫罢洲,如 xiaomi
       xiaomi {
            // 該配置會覆蓋defaultConfig中的配置, 通過此方式可實現(xiàn)不同渠道宏怔,不同包名
            applicationId "com.xyd.http_demo1" 
            // 該配置會覆蓋 manifest 中的渠道變量 channel 
            //  <meta-data android:name="channel" android:value="${channelName}"/>
            manifestPlaceholders = [channelName: "xiaomi"]
        }

        "baidu" {
            applicationId "com.xyd.htto_debug"
            manifestPlaceholders = [channelName: "baidu"]
        }

    }

}

多渠道信息的配置也可以采用這樣:

android {
 productFlavors {
   "xiaomi"{}
   "baidu"{}
   "wandoujia"{}
 }
 productFlavors.all {
   flavor -> flavor.manifestPlaceholders = [channelName: name]
 }
}

問題四: 怎么打包時候,替換 appName 和 drawable 呢畴椰?

這個問題不提現(xiàn)在下面的配置文件中臊诊,想實現(xiàn)替換 appName 和 drawable 這類 resource 常量,需要在 main 同級目錄下斜脂,新建和渠道名同名的目錄抓艳,并建立相同的子路徑,然后以相同的名字命名不同的資源文件帚戳,打包時候會實現(xiàn)自動替換或者合并玷或。如下圖。

image.png

例如: 在資源文件目錄 mian\res\mipmap-hdpi\ic_laucher.png 片任,那 baidu 渠道要在 baidu\res\mipmap-hdpi\ic_laucher.png 放置偏友,打包 baidu 渠道的時候,就會自動替換圖片对供。

合并的情況位他,比如在 string.xml 中文件內容是:

<string name="loading">加載中...</string>
<string name="loading_no_more">無更多數(shù)據(jù)</string>

baidu 下面的 string.xml 文件內容是:

<string name="loading">正在加中,不要著急...</string>

打包 baidu 渠道會變成:

<string name="loading">正在加中产场,不要著急...</string>
<string name="loading_no_more">無更多數(shù)據(jù)</string>

采用這種方式鹅髓,main 下所有文件都可以替換或者合并。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末京景,一起剝皮案震驚了整個濱河市窿冯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌确徙,老刑警劉巖醒串,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件执桌,死亡現(xiàn)場離奇詭異,居然都是意外死亡厦凤,警方通過查閱死者的電腦和手機鼻吮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较鼓,“玉大人椎木,你說我怎么就攤上這事〔├茫” “怎么了香椎?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禽篱。 經常有香客問我畜伐,道長,這世上最難降的妖魔是什么躺率? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任玛界,我火速辦了婚禮,結果婚禮上悼吱,老公的妹妹穿的比我還像新娘慎框。我一直安慰自己,他們只是感情好后添,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布笨枯。 她就那樣靜靜地躺著,像睡著了一般遇西。 火紅的嫁衣襯著肌膚如雪馅精。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天粱檀,我揣著相機與錄音洲敢,去河邊找鬼。 笑死茄蚯,一個胖子當著我的面吹牛沦疾,可吹牛的內容都是我干的。 我是一名探鬼主播第队,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哮塞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凳谦?” 一聲冷哼從身側響起忆畅,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后家凯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缓醋,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年绊诲,在試婚紗的時候發(fā)現(xiàn)自己被綠了送粱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掂之,死狀恐怖抗俄,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情世舰,我是刑警寧澤动雹,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站跟压,受9級特大地震影響胰蝠,放射性物質發(fā)生泄漏。R本人自食惡果不足惜震蒋,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一茸塞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧查剖,春花似錦钾虐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽效览。三九已至无切,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丐枉,已是汗流浹背哆键。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘦锹,地道東北人籍嘹。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像弯院,于是被迫代替她去往敵國和親辱士。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,081評論 25 707
  • 最近在項目中遇到需要實現(xiàn) Apk 多渠道听绳、定制化打包颂碘, Google 、百度查找了一些資料椅挣,成功實現(xiàn)了上述功能头岔,在...
    看一季殘花落幕閱讀 2,492評論 1 8
  • 這一章主要針對項目中可以用到的一些實用功能來介紹Android Gradle塔拳,比如如何隱藏我們的證書文件,降低風險...
    acc8226閱讀 7,606評論 3 25
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理峡竣,服務發(fā)現(xiàn)靠抑,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 有一次坐地鐵的時候适掰,我無意間看到車窗外一條廣告上寫著:我們需要英雄颂碧。 我不知道那條廣告上說的英雄指的是什么,或者說...
    浪里周小白閱讀 97評論 0 0