Gradle多渠道小結(jié)

我們的APP開發(fā)結(jié)束后,接下來的工作就是上線不同的應(yīng)用市場(chǎng)庇配。不同的應(yīng)用市場(chǎng)對(duì)于上線的apk文件可能會(huì)有不同的要求斩跌,所以我們要針對(duì)不同的應(yīng)用市場(chǎng)來分別打包。這就是多渠道打包捞慌。

另一方面耀鸦,我們可能要獲取不同應(yīng)用市場(chǎng)的下活躍用戶的數(shù)量,以及不同應(yīng)用市場(chǎng)下apk的運(yùn)行情況卿闹。這時(shí)候就需要在代碼里加入上傳這個(gè)apk的應(yīng)用市場(chǎng)信息揭糕。再比如需要在不同渠道發(fā)布的apk里面,指定不同的啟動(dòng)Activity锻霎,或者根據(jù)不同的應(yīng)用市場(chǎng)來執(zhí)行不同的代碼片段著角。那么你更應(yīng)該看下本文了。

一旋恼、多渠道打包

使用Gradle多渠道打包有很多種吏口,下面介紹一種我經(jīng)常使用到的。

  1. 在AndroidManifest中使用manifestPlaceholders占位符
<meta-data  
    android:name="CHANNEL_NAME"  
    android:value="${CHANNEL_NAME}" />  
  1. 在build.gradle中的android根節(jié)點(diǎn)下加入
    productFlavors {
        _360 {
            manifestPlaceholders = [ CHANNEL_NAME:"360"]
        }
        xiaomi {
            manifestPlaceholders = [ CHANNEL_NAME:"xiaomi"]
        }
        umeng {
            manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
        }
        wandoujia {
            manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
        }
    }

注意
①這里的CHANNEL_NAME要與AndroidManifest中的${CHANNEL_NAME}對(duì)應(yīng)冰更。
②渠道名不能是純數(shù)字产徊,比如360,會(huì)編譯不過的蜀细。要適當(dāng)?shù)男薷囊幌隆?/p>

  1. 完成了這些之后舟铜,同步一下。然后進(jìn)行打包:Build->Generate Signed APK奠衔,然后選擇簽名文件谆刨,這時(shí)候的flavors就會(huì)顯示我們定義的渠道名稱塘娶。按住ctrl選擇要打包的市場(chǎng),然后進(jìn)行打包痊夭,就可以生成對(duì)應(yīng)的apk了刁岸。


    多渠道打包
  2. 打完包,會(huì)一下打出多個(gè)包她我。如下圖:


    多渠道打包
  3. 至此虹曙,多渠道打包完成。

二番舆、多渠道定制

有時(shí)候我們希望apk在執(zhí)行同一功能是根據(jù)市場(chǎng)不同酝碳,去執(zhí)行不同的代碼。比如需要在不同渠道發(fā)布的apk里面合蔽,指定不同的啟動(dòng)Activity击敌。比如在豌豆莢里面發(fā)布的,啟動(dòng)的Activity顯示的是豌豆莢首發(fā)的界面拴事,應(yīng)用寶里面啟動(dòng)的是應(yīng)用寶首發(fā)的界面沃斤。再比如,不同市場(chǎng)的apk版本號(hào)要分開刃宵,小米應(yīng)用市場(chǎng)的apk是1.0.1衡瓶,豌豆莢的是1.0.3,應(yīng)用寶的是1.1.0牲证。

那么你可以按照下面這么做哮针,打包apk的時(shí)候,根據(jù)渠道不同分別打包對(duì)應(yīng)渠道下的代碼坦袍。
舉個(gè)例子十厢,我有一個(gè)類AndFixActivity。這個(gè)類中有一個(gè)顯示渠道名稱的TextView捂齐。這個(gè)TextView通過獲取strings中的channel_name來顯示當(dāng)前的渠道名稱蛮放。但是,我希望在打包小米和豌豆莢這兩個(gè)渠道的時(shí)候奠宜,分別顯示小米和豌豆莢包颁,其他渠道保持默認(rèn)值。來看下步驟:

  1. 在src下新建與main同級(jí)的目錄压真,比如xiaomi娩嚼、wandoujia。這個(gè)目錄名要和productFlavor下的渠道名相同滴肿。
  2. 保持和main中目錄結(jié)構(gòu)一致的情況下岳悟,分別復(fù)制一個(gè)res/values/strings.xml類到xiaomi和wandoujia目錄下。然后把這個(gè)strings.xml下的channel_name的值分別改為“小米”和“豌豆莢”泼差。


    小米

    豌豆莢
  3. 剩下的就和多渠道打包一樣了竿音。在build.gradle中android根節(jié)點(diǎn)上加入productFlavor和屎,加入wandoujia和xiaomi的flavor,然后打包春瞬。就可以了。

注意
可以防止java代碼套啤、res資源和AndroidManifest到flavor下宽气。flavor跟main的文件是會(huì)合并的,但是合并存在一定的規(guī)則潜沦。
①java中代碼合并萄涯,如果有相同的文件是會(huì)報(bào)錯(cuò)重復(fù)錯(cuò)誤的,所以main文件夾中唆鸡,應(yīng)該存放共有的代碼涝影,而flavor文件夾中存放自己所需要的獨(dú)立的代碼。
②res中資源的合并争占,優(yōu)先級(jí)是flavor高于main燃逻,即flavor中資源會(huì)加入或覆蓋main中資源。如果special渠道要求指定的icon和appName臂痕,則在special中res中替換到默認(rèn)的icon伯襟,在string.xml中改正相應(yīng)的appName即可。
③AndroidManifest.xml合并握童,其實(shí)也是增加和覆蓋.

三姆怪、應(yīng)用多開

實(shí)現(xiàn)在一臺(tái)設(shè)備上同時(shí)安裝多個(gè)相同包名的apk。
一般我們?cè)谝慌_(tái)設(shè)備上安裝了一個(gè)apk澡绩,如果再安裝一個(gè)相同包名的apk稽揭,就會(huì)提示覆蓋安裝。這是因?yàn)槊總€(gè)apk在編譯的時(shí)候有一個(gè)applicationId肥卡。如果你第二次安裝apk的時(shí)候溪掀,設(shè)備上已經(jīng)有這個(gè)applicationId的APP了,你再安裝相同applicationId的APP召调,就會(huì)提示覆蓋安裝膨桥。

但是,有時(shí)候我們要對(duì)比一下不同渠道下的APP唠叛。簡(jiǎn)單粗暴地用兩臺(tái)設(shè)備只嚣,來回切換調(diào)試都想到麻煩。我們完全可以通過多渠道來配置不同的applicationId從而實(shí)現(xiàn)應(yīng)用多開艺沼。

通常在build.gradle中android->defaultConfig下就配置了applicationId册舞,一般會(huì)和包名相同。


applicationId

要實(shí)現(xiàn)應(yīng)用多開障般,就可以在procutFlavor中分別配置這個(gè)applicationId调鲸。


應(yīng)用多開.jpg

然后再多渠道打包盛杰,就可以在一臺(tái)設(shè)備上同時(shí)安裝兩個(gè)相同的APP。


應(yīng)用多開
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藐石,一起剝皮案震驚了整個(gè)濱河市即供,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌于微,老刑警劉巖逗嫡,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異株依,居然都是意外死亡驱证,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門恋腕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹锄,“玉大人,你說我怎么就攤上這事荠藤』锏ィ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵商源,是天一觀的道長(zhǎng)车份。 經(jīng)常有香客問我,道長(zhǎng)牡彻,這世上最難降的妖魔是什么扫沼? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮庄吼,結(jié)果婚禮上缎除,老公的妹妹穿的比我還像新娘。我一直安慰自己总寻,他們只是感情好器罐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐行,像睡著了一般轰坊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祟印,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天肴沫,我揣著相機(jī)與錄音,去河邊找鬼蕴忆。 笑死颤芬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播站蝠,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼汰具,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了菱魔?” 一聲冷哼從身側(cè)響起留荔,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澜倦,沒想到半個(gè)月后存谎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肥隆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稚失。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栋艳。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖句各,靈堂內(nèi)的尸體忽然破棺而出吸占,到底是詐尸還是另有隱情,我是刑警寧澤凿宾,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布矾屯,位于F島的核電站,受9級(jí)特大地震影響初厚,放射性物質(zhì)發(fā)生泄漏件蚕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一产禾、第九天 我趴在偏房一處隱蔽的房頂上張望排作。 院中可真熱鬧,春花似錦亚情、人聲如沸妄痪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衫生。三九已至,卻和暖如春土浸,著一層夾襖步出監(jiān)牢的瞬間栅迄,已是汗流浹背西篓。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泳叠。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像种蝶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盯滚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 轉(zhuǎn)至:http://blog.csdn.net/heqiangflytosky/article/details/5...
    kkgo閱讀 2,877評(píng)論 0 1
  • 1荷荤、為什么要進(jìn)行多渠道打包会油? 安卓應(yīng)用商店(一個(gè)商店也叫做一個(gè)渠道,如豌豆莢胶征,360手機(jī)助手,應(yīng)用寶)眾多服傍,大大小...
    閑庭閱讀 5,361評(píng)論 1 13
  • 一钱雷、什么是多渠道 我理解的是:APP發(fā)布到不同的應(yīng)用平臺(tái),監(jiān)測(cè)用戶是從哪個(gè)平臺(tái)安裝的吹零。 二罩抗、為什么要多渠道打包 1...
    LucasAdam閱讀 916評(píng)論 0 1
  • 最近在項(xiàng)目中遇到需要實(shí)現(xiàn) Apk 多渠道、定制化打包灿椅, Google 澄暮、百度查找了一些資料,成功實(shí)現(xiàn)了上述功能阱扬,在...
    看一季殘花落幕閱讀 2,492評(píng)論 1 8
  • 由于國(guó)內(nèi)Android市場(chǎng)眾多渠道,為了統(tǒng)計(jì)每個(gè)渠道的下載及其它數(shù)據(jù)統(tǒng)計(jì)伸辟,就需要我們針對(duì)每個(gè)渠道單獨(dú)打包麻惶,如果讓你...
    Ten_Minutes閱讀 733評(píng)論 0 2