Android Gradle多渠道打包構(gòu)建不同代碼與依賴

1、首先我們使用Idea(AndroidStudio或者Eclipse也行)寫一個(gè)Java類奸远,簡(jiǎn)單地返回一個(gè)字符串標(biāo)識(shí):
Main.java

package com.wushaohong.jar;

public class Main {

    public static void main(String[] args) {
    }

    public String getTag() {
        return "Release";
    }
}

2、打包成一個(gè)jar(不知道如何打包jar移步搜索引擎),命名為jarRelease.jar;再將代碼的getTag方法return "Release"改成return "Debug"厢蒜,再打包成一個(gè)jar,命名為jarDebug.jar烹植。得到兩個(gè)jar包斑鸦,jarRelease.jar與jarDebug.jar。


jar包

3草雕、AndroidStudio創(chuàng)建新的項(xiàng)目巷屿,將兩個(gè)jar包,拷貝到app/libs目錄下墩虹。
***注意事項(xiàng)看注釋解釋

4嘱巾、配置多渠道與渠道加載依賴
app.gradle文件

    defaultConfig {
        ...

        flavorDimensions "versionCode"
    }

    buildTypes {
        ...
    }

    // 多渠道打包方式
    productFlavors {

        // 線下(測(cè)試環(huán)境)
        offline {
            versionName "offline"
            // 配置不同的String,key:config_file败晴,value:offline.properties
            resValue("string", "config_file", "offline.properties")
        }

        // 準(zhǔn)線上(生產(chǎn)環(huán)境,比如帶日志等)
        beforeOnline {
            versionName "beforeonline"
            resValue("string", "config_file", "beforeonline.properties")
        }

        // 線上(發(fā)布版本)
        online {
            versionName "online"
            resValue("string", "config_file", "online.properties")
        }
    }
    
dependencies {
    // 此處是創(chuàng)建項(xiàng)目默認(rèn)生成栽渴,需要注釋掉尖坤,如果不注釋,每次打包都會(huì)把libs目錄下所有的jar包打包到apk闲擦;
    // 再者慢味,因?yàn)槲覀冮_始生成的jar的源代碼包名是一樣的场梆,會(huì)出現(xiàn)jar重復(fù)沖突等多種問題。
//    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ...
    // 渠道名+Implementation纯路,指定某個(gè)渠道包引入某個(gè)依賴或油;
    // 這里我們線下引用Debug.jar,線上引用Release.jar驰唬。
    offlineImplementation(files('libs/JarDebug.jar'))
    beforeOnlineImplementation(files('libs/JarRelease.jar'))
    onlineImplementation(files('libs/JarRelease.jar'))
}

5顶岸、創(chuàng)建渠道代碼(資源等),在src(main同級(jí))目錄下叫编,分別創(chuàng)建與渠道名相同的文件夾辖佣,offline、beforeOnline搓逾、online卷谈。各個(gè)目錄下創(chuàng)建與main相同的子目錄/文件,java/包名(與main一致)霞篡,res(資源文件夾)世蔗,AndroidManifest.xml。
***當(dāng)然這些不一定都要?jiǎng)?chuàng)建朗兵,具體根據(jù)實(shí)際需要就好污淋,比如需要區(qū)分代碼的,則需要java目錄矛市,區(qū)分資源則需要res目錄芙沥,涉及到配置AndroidManifest.xml則需要?jiǎng)?chuàng)建。這些文件目錄浊吏,在實(shí)際編譯打包引用會(huì)與main進(jìn)行合并而昨。


渠道代碼/資源

創(chuàng)建渠道測(cè)試代碼,為了使每個(gè)渠道包在main當(dāng)中都能夠調(diào)用PushUtils找田,所有這里歌憨,每個(gè)渠道都寫一個(gè)結(jié)構(gòu)一致的PushUtils類,實(shí)際的getToken(業(yè)務(wù)方法)可以不一樣墩衙,本文為了驗(yàn)證渠道依賴务嫡,所以這里每個(gè)渠道都寫成一樣,都是調(diào)用jar包返回一個(gè)字符串標(biāo)識(shí)(驗(yàn)證實(shí)際調(diào)用的是否為gradle配置指定的jar)漆改。
PushUtils.java

package com.wushaohong.productflavorsapp;

import com.wushaohong.jar.*;

public class PushUtils {

    public String getToken() {
        Main t = new Main();
        return t.getTag();
    }
}

6心铃、驗(yàn)證

在MainActivity當(dāng)中驗(yàn)證結(jié)果

// 將PushUtils返回的字符串顯示在文本當(dāng)中
textView.setText(new PushUtils().getToken());

運(yùn)行,Build Variants選擇offlineDebug挫剑,文本顯示Debug去扣。這是jarDebug.jar返回的,因?yàn)槲覀冎癵radle配置了offlineImplementation(files('libs/JarDebug.jar'))樊破;同理愉棱,選擇onlineDebug運(yùn)行唆铐,則文本顯示Release。

選擇渠道構(gòu)建

驗(yàn)證apk奔滑,使用assembleRelease生成各個(gè)apk艾岂,在AndroidStudio里,雙擊apk查看朋其,找到對(duì)應(yīng)代碼王浴,查看編譯后的ByteCode。


編譯打包所有渠道

查看apk

查看ByteCode

7令宿、最后叼耙,本文當(dāng)中,使用assembleRelease構(gòu)建出來的各個(gè)渠道包是未加簽名的粒没,如需了解配置簽名打包宵膨,請(qǐng)移步我的另一篇文章:
https://blog.csdn.net/c_3822/article/details/95058358

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篙议,一起剝皮案震驚了整個(gè)濱河市硕糊,隨后出現(xiàn)的幾起案子嬉荆,更是在濱河造成了極大的恐慌,老刑警劉巖响蓉,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硕勿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡枫甲,警方通過查閱死者的電腦和手機(jī)源武,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來想幻,“玉大人粱栖,你說我怎么就攤上這事≡嗵海” “怎么了闹究?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)食店。 經(jīng)常有香客問我渣淤,道長(zhǎng),這世上最難降的妖魔是什么吉嫩? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任价认,我火速辦了婚禮,結(jié)果婚禮上自娩,老公的妹妹穿的比我還像新娘用踩。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布捶箱。 她就那樣靜靜地躺著,像睡著了一般动漾。 火紅的嫁衣襯著肌膚如雪丁屎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天旱眯,我揣著相機(jī)與錄音晨川,去河邊找鬼。 笑死删豺,一個(gè)胖子當(dāng)著我的面吹牛共虑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呀页,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼妈拌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蓬蝶?” 一聲冷哼從身側(cè)響起尘分,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丸氛,沒想到半個(gè)月后培愁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缓窜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年定续,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禾锤。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡私股,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出时肿,到底是詐尸還是另有隱情庇茫,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布螃成,位于F島的核電站旦签,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寸宏。R本人自食惡果不足惜宁炫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氮凝。 院中可真熱鬧羔巢,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幽钢,卻和暖如春歉备,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匪燕。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工蕾羊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帽驯。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓龟再,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尼变。 傳聞我的和親對(duì)象是個(gè)殘疾皇子利凑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359