Gradle高級:差異化構建使用筆記

????為了解相關資料时捌,在網(wǎng)上找了很久才找到相關資料定铜。記錄一下伪冰,防止忘記怠缸。
????參考資料:http://blog.csdn.net/zhaoyanjun6/article/details/77678577

背景


????由于同一個項目需要提供給不同的客戶,同時不同的客戶又有各自定制的功能嗅义。即一個項目屏歹,多個不同的定制版本的模式。因此引發(fā)了多個版本管理的問題之碗。如果每個定制版本都一份代碼蝙眶,對于代碼的維護將會非常困難,因此共用一份代碼是必須的褪那。

????最開始幽纷,由于定制版本不多,差異也不大武通,所以通過設定一個靜態(tài)值來表示不同的定制版霹崎,再由運行時決定功能邏輯。后來冶忱,隨著定制版本增多尾菇、各版本之間的邏輯差異加大,導致版本判斷的代碼越來越多囚枪,邏輯越來越復雜派诬。由于冗余代碼的增加,維護也越來越困難链沼。因此默赂,代碼的管理方案也需要相應的改變。首先想到的是通過SVN等版本管理工具進行管理括勺,將基礎版本作為主干缆八,各定制版本在分支上開發(fā)曲掰。在一個分支上添加了公共功能或者是修復了公共功能部分的BUG時,再將代碼合并到主干奈辰,其它分支再到主干上同步栏妖。這是一個優(yōu)秀的解決方案,但是在公共部分的代碼更新頻繁的情況下奖恰,這個方案會導致頻繁的分支同步與合并吊趾。雖然在改動量小的時候,及時更新同步可以有效解決合并困難的問題瑟啃。不過對于開發(fā)人員并不集中且無法利用網(wǎng)絡的情況下论泛,需要有一種新的代碼管理方案來解決。

????新的方案就是利用Gradle的差異化構建來進行管理蛹屿。這個方案將差異化的代碼屁奏,即各定制版本不同邏輯的部分分布到各版本中,而將共同的部分集中在一起错负,所以不需要同步了袁,也不需要在運行時進行邏輯判斷,因為在編譯時已經(jīng)進行過了統(tǒng)一的判斷了湿颅。但是在各定制功能存在組合時,這個方案的問題也非常大粥诫,這里暫時不討論油航。

使用步驟


第一步 創(chuàng)建一個編譯版本

????創(chuàng)建一個命名為custom1的Build Type。根據(jù)需要改變其它的配置怀浆。
創(chuàng)建編譯版本
第二步 指定編譯版本

????打開Build Variants谊囚,并將目標Module的Build Variant選擇剛才創(chuàng)建的編譯版本。然后運行执赡。
選擇編譯版本

????結果镰踏,如圖所示,無法運行沙合。提示 Error : the apk for your currently selected variant(app-custom1-unsigned.apk)is not signed.Please specity a signing configuration for this variant(custom1)奠伪。(這是故意留著的,因為在發(fā)現(xiàn)這個問題后首懈,上網(wǎng)找绊率,發(fā)現(xiàn)資料不多)。

????問題原因是沒有指定簽名文件究履,所以無法生成簽名的安裝包滤否,而生成的未簽名的安裝包是無法運行的。解決方案是:點擊Fix最仑,然后創(chuàng)建簽名配置
創(chuàng)建簽名配置

????如上圖所示藐俺,這里創(chuàng)建了一個名為normal的配置炊甲,Normal.jks簽名文件是前面已經(jīng)創(chuàng)建好的。然后在custom1中指定Signing Config為剛剛創(chuàng)建的normal欲芹。至此卿啡,就已經(jīng)完成了定制版本的配置。接下來將添加定制版本的代碼耀石。


指定簽名配置
第三步 添加定制版本代碼

????在Project結構下牵囤,在src目錄下創(chuàng)建一個與步驟一創(chuàng)建的build type同名的文件夾custom1,并在文件夾下創(chuàng)建名為java的文件夾滞伟,與名為res的文件夾揭鳞,分別用于存放代碼與資源文件。
創(chuàng)建定制版本代碼目錄

????可以看到現(xiàn)在custom1的目錄結構與main的目錄結構一致了梆奈。main目錄表示的是各build type共用的代碼野崇,custom1目錄表示的是當build variant設置為custom1時使用的代碼。

第四步 定制邏輯

????重復第一到第三步亩钟,再創(chuàng)建一個定制版custom2乓梨。然后再在兩個定制版本中添加相同的包名以及類文件。以供main目錄下的公共代碼使用清酥,公共代碼沒有使用到的可以自由定義扶镀。完成代碼后就可以通過更改build variant的設置選擇不同的定制邏輯了。
選擇custom1定制邏輯
選擇custom2定制邏輯

????從以上兩圖可以清晰的看出焰轻,當且僅當build variant選定的build type對應的代碼會回到編譯中去臭觉。

????如果沒有時間從實踐一遍,或者對實際效果不了解辱志,可以直接下載源代碼:https://gitee.com/IndoorsNum31/GradleDifferentiatedBuild

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蝠筑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子揩懒,更是在濱河造成了極大的恐慌什乙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件已球,死亡現(xiàn)場離奇詭異臣镣,居然都是意外死亡,警方通過查閱死者的電腦和手機和悦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門退疫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸽素,你說我怎么就攤上這事褒繁。” “怎么了馍忽?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵棒坏,是天一觀的道長燕差。 經(jīng)常有香客問我,道長坝冕,這世上最難降的妖魔是什么徒探? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮喂窟,結果婚禮上测暗,老公的妹妹穿的比我還像新娘。我一直安慰自己磨澡,他們只是感情好碗啄,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稳摄,像睡著了一般稚字。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厦酬,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天胆描,我揣著相機與錄音,去河邊找鬼仗阅。 笑死昌讲,一個胖子當著我的面吹牛,可吹牛的內容都是我干的减噪。 我是一名探鬼主播剧蚣,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旋廷!你這毒婦竟也來了?” 一聲冷哼從身側響起礼搁,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤饶碘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馒吴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扎运,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年饮戳,在試婚紗的時候發(fā)現(xiàn)自己被綠了豪治。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扯罐,死狀恐怖负拟,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情歹河,我是刑警寧澤掩浙,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布花吟,位于F島的核電站,受9級特大地震影響厨姚,放射性物質發(fā)生泄漏衅澈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一谬墙、第九天 我趴在偏房一處隱蔽的房頂上張望今布。 院中可真熱鬧,春花似錦拭抬、人聲如沸部默。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甩牺。三九已至,卻和暖如春累奈,著一層夾襖步出監(jiān)牢的瞬間贬派,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工澎媒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搞乏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓戒努,卻偏偏與公主長得像请敦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子储玫,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,513評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理侍筛,服務發(fā)現(xiàn),斷路器撒穷,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項匣椰,請點擊這里進行查閱:DSL參考 1.1新構建系統(tǒng)...
    Chuckiefan閱讀 12,118評論 8 72
  • 于是,在正式的拜師禮和為裴家少爺送行的家宴都結束后端礼,師徒二人才告別了洛陽禽笑。 裴家的車夫將少爺送到城門就離開了。高珍...
    時光門外閱讀 493評論 0 2
  • 水分充足的身體能夠更好地運作蟀伸,更有效地排除身體垃圾,并且更容易使脂肪從身體細胞中釋放出來,而如果身體缺水的話(在大...
    喬小君閱讀 208評論 0 0