android gradle加載配置文件參數(shù)

注 此文是之前配置的方案,好處在于通過文件的方式隔離配置參數(shù),壞處在于不夠簡(jiǎn)潔究西,在下目前提供一種更加便捷的環(huán)境配置方案,后來的小伙伴可以自行選擇之勘天,個(gè)人傾向于此種配置方案怔揩,對(duì)應(yīng)的文章地址為 android 更為簡(jiǎn)潔的gradle 參數(shù)配置 - 簡(jiǎn)書

此文只是簡(jiǎn)單的通過配置變量的方式實(shí)現(xiàn)配置信息之間的切換脯丝,除去了頻繁更改地址、開關(guān)伏伐、AppKey等其它的配置信息宠进。

本篇文章簡(jiǎn)單的使用了gradle的生命周期,有興趣的童鞋可以自行百度了解一下藐翎。

一般android studio剛創(chuàng)建的project的setting.gradle文件只包括一行: ?

這一行的意思是構(gòu)建mutiProject材蹬,按照正常的邏輯來說,其實(shí)android studio創(chuàng)建的每個(gè)module都算是一個(gè)單獨(dú)的Project吝镣,而gradle通過構(gòu)建此文件堤器,將這些項(xiàng)目統(tǒng)一構(gòu)建為mutiProject。

gradle的構(gòu)建過程簡(jiǎn)單理解如下所示:

setting.gradle文件只有一份末贾,這也就意味著整個(gè)mutiProject的gradle對(duì)象只有一份闸溃,它可以在任何project的gradle文件當(dāng)中獲取到這個(gè)對(duì)象。

build.gradle文件有多份,每個(gè)module下存在于單個(gè)build.gradle文件辉川,這就意味著表蝙,每個(gè)module都具備單獨(dú)的project對(duì)象,這就意味著每個(gè)module都是一個(gè)單獨(dú)的project乓旗。

setting.gradle文件對(duì)應(yīng)著gradle對(duì)象的初始化府蛇,那一般的初始化操作可以在此gradle腳本文件當(dāng)中運(yùn)行,但不要原始生成的include標(biāo)簽?zāi)ㄈビ煊蓿@是gradle構(gòu)建mutiProject關(guān)鍵所在汇跨。

首先,我在項(xiàng)目當(dāng)中配置了debug.properties以及release.properties,這兩個(gè)文件:

第二步妆距,在gradle.properties文件當(dāng)中定義一個(gè)boolean值IS_RELEASE_MODE穷遂,這個(gè)變量就是加載配置了debug和release兩個(gè)版本的配置文件的開關(guān),如果有多種配置信息的毅厚,請(qǐng)改用字符串定義變量塞颁。,true表示Release參數(shù)吸耿,false代表debug參數(shù)祠锣。

注:此處不得不說一下,gradle.properties文件當(dāng)中的屬性咽安,我暫且這樣理解為伴网,在setting.gradle文件初始化gradle對(duì)象的時(shí)候,這個(gè)文件當(dāng)中的屬性已經(jīng)默認(rèn)加載到這個(gè)gradle對(duì)象當(dāng)中妆棒,所以這個(gè)文件當(dāng)中定義的屬性是可以直接調(diào)用澡腾。

第三步,setting.gradle當(dāng)中讀取文件當(dāng)中定義屬性代碼展示如下(請(qǐng)配合參考groovy語言糕珊,$符是腳本語言的通用處理符號(hào))

同時(shí)动分,如果想后期讀取自己定義的properties文件,這時(shí)候就需要用來gradle對(duì)象的擴(kuò)展屬性红选,對(duì)于gradle的擴(kuò)展屬性是通過gradle.ext標(biāo)識(shí)符來完成的澜公,特別聲明,gradle.ext.屬性名只需要在第一次賦值的時(shí)候需要帶上ext標(biāo)簽喇肋,在后面的過程可以直接gradle.屬性名進(jìn)行任意的更改和取值坟乾。

調(diào)用讀取配置文件的方法

基本參數(shù)配置完畢,可以通過gradle指令(gradlew clean指令就可觀察對(duì)應(yīng)擴(kuò)展屬性的值)在IS_RELEASE_MODE=true的情況下蝶防,輸出如下所示甚侣。

如果諸位童鞋覺得這個(gè)指令等待時(shí)間過長(zhǎng),那就自定義一個(gè)task间学,運(yùn)行指令如上圖所示殷费,task的代碼塊是定義在project 類當(dāng)中印荔,所以只能在build.gradle文件當(dāng)中進(jìn)行配置:

以上gradle的ext擴(kuò)展屬性對(duì)應(yīng)配置腳本信息已經(jīng)完畢。而這里需要解釋的是上文當(dāng)中有兩種讀取配置文件屬性的處理方式宗兼,下文會(huì)具體指出其中需要注意的地方躏鱼。

第四步,在依賴的最頂層的libray 當(dāng)中的build.gradle中做如下配置殷绍,為什么說要在最頂層的libray當(dāng)中做這個(gè)配置染苛,這是由于每個(gè)project(也就是as當(dāng)中的module)都會(huì)在build當(dāng)中生成對(duì)應(yīng)自己build.gradle當(dāng)中配置的BuildConfig.java類,所以主到,把這些配置信息放到最頂層的庫茶行,是為了其它依賴者也能夠公用這個(gè)庫的BuildConfig.java類。具體配置如下:

gradle編譯完畢之后會(huì)在當(dāng)前build.gradle對(duì)應(yīng)的project的build目錄下生成BuildConfig類:

同時(shí)登钥,在gradle.properties當(dāng)中將IS_RELEASE_MODE=false畔师,BuildConfig編譯完畢之后就能完成debug.properties文件屬性值的切換。

到了這個(gè)地方牧牢,按照以上步驟走看锉,基本上可以解決多個(gè)版本配置信息之間的切換了。但上面提到的兩種屬性處理方式塔鳍,在這里伯铣,我就通過未定義到BuildConfig的TEST7 屬性來說明具體原因,這個(gè)點(diǎn)具體如下所示轮纫,如果我將TEST5采用非字符串的處理方式腔寡,BuildConfig如下所示:

這就導(dǎo)致BuildConfig.java文件默認(rèn)報(bào)錯(cuò),我想大家還有一種比較簡(jiǎn)單的處理方式掌唾,那就是在配置文件當(dāng)中直接對(duì)需要加在字符串的直接加上字符串就行了放前,我為了統(tǒng)一性,采用代碼控制了這個(gè)問題糯彬,為了配置文件的屬性的統(tǒng)一性凭语。

下面單獨(dú)說下這個(gè)TEST7屬性的處理方式:在第三方sdk當(dāng)中經(jīng)常有<meta-data />標(biāo)簽形式定義的APP_KEY模式,這個(gè)就可以通過android 代碼塊中的maniPlaceHolder實(shí)現(xiàn)撩扒。

manifestPlaceHolders可以在androidManifest.xml文件當(dāng)中讀取定義的屬性
Manifest文件通過manifestPlaceHolders獲取gradle定義的屬性

我想大家已經(jīng)get到這個(gè)TEST7使用的點(diǎn)了叽粹,對(duì),沒錯(cuò)却舀,它一般用于和AndroidManifest.xml完成變量的交互,它采用非字符串讀取方式的處理方式锤灿,那是因?yàn)樵谀J(rèn)加載到AndroidManifest.xml中的這個(gè)變量會(huì)被處理為字符串格式挽拔,也可以簡(jiǎn)單理解,系統(tǒng)內(nèi)部已經(jīng)做了字符串的添加操作但校,這時(shí)候再來一次的話螃诅,就會(huì)導(dǎo)致清單文件的這個(gè)變量讀取成帶字符串的值,這會(huì)導(dǎo)致第三方SDK或其它情況的錯(cuò)誤。(請(qǐng)注意术裸,有興趣的同學(xué)可以按照字符串方式處理倘是,然后反編譯,可以很清楚的在清單配置文件當(dāng)中看到這個(gè)變量的value值袭艺。)

demo指向搀崭,能用代碼說話,就別說廢話了--https://github.com/kaycool/EnvironmentConfigDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猾编,一起剝皮案震驚了整個(gè)濱河市瘤睹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌答倡,老刑警劉巖轰传,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘪撇,居然都是意外死亡获茬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門倔既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恕曲,“玉大人,你說我怎么就攤上這事叉存÷肓” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵歼捏,是天一觀的道長(zhǎng)稿存。 經(jīng)常有香客問我,道長(zhǎng)瞳秽,這世上最難降的妖魔是什么瓣履? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮练俐,結(jié)果婚禮上袖迎,老公的妹妹穿的比我還像新娘。我一直安慰自己腺晾,他們只是感情好燕锥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悯蝉,像睡著了一般归形。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼻由,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天暇榴,我揣著相機(jī)與錄音厚棵,去河邊找鬼。 笑死蔼紧,一個(gè)胖子當(dāng)著我的面吹牛婆硬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奸例,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼彬犯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了哩至?” 一聲冷哼從身側(cè)響起躏嚎,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菩貌,沒想到半個(gè)月后卢佣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箭阶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年虚茶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仇参。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘹叫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诈乒,到底是詐尸還是另有隱情罩扇,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布怕磨,位于F島的核電站喂饥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肠鲫。R本人自食惡果不足惜员帮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望导饲。 院中可真熱鬧捞高,春花似錦、人聲如沸渣锦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袋毙。三九已至辈讶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娄猫,已是汗流浹背贱除。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳溺,地道東北人月幌。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悬蔽,于是被迫代替她去往敵國(guó)和親扯躺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蝎困,服務(wù)發(fā)現(xiàn)录语,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評(píng)論 6 342
  • 這一章主要針對(duì)項(xiàng)目中可以用到的一些實(shí)用功能來介紹Android Gradle禾乘,比如如何隱藏我們的證書文件澎埠,降低風(fēng)險(xiǎn)...
    acc8226閱讀 7,575評(píng)論 3 25
  • 前言 為什么需要學(xué)Gradle? Gradle 是 Android 現(xiàn)在主流的編譯工具,雖然在Gradle 出現(xiàn)之...
    真笨笨魚閱讀 1,489評(píng)論 0 0
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng)始藕,請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,122評(píng)論 8 72