Android多渠道打包以及分發(fā)策略

首先我事先說明此方法不適用于國(guó)內(nèi)開發(fā)者双泪,

因?yàn)閲?guó)內(nèi)應(yīng)用市場(chǎng)太多,如果這樣編得編到吐血教藻。

所以先附上比較適合國(guó)內(nèi)開發(fā)者的方法致板。

(美團(tuán)老版多渠道打包)

http://tech.meituan.com/mt-apk-packaging.html

(美團(tuán)新版多渠道打包)

http://tech.meituan.com/android-apk-v2-signature-scheme.html

新版本主要是針對(duì)Android 7.0(Nougat)推出了新的應(yīng)用簽名方案APK Signature Scheme v2。

附上Github地址

https://github.com/Meituan-Dianping/walle

------------------分割線-------------------

因?yàn)楝F(xiàn)在暫時(shí)只面向Google Play就行,所以只考慮最簡(jiǎn)單的build版本砖第。

詳細(xì)步驟

修改app/build.gradle文件

采取修改gradle的方式現(xiàn)實(shí)撤卢,這樣的優(yōu)點(diǎn)是簡(jiǎn)單,缺點(diǎn)是每一個(gè)包都要重復(fù)編譯梧兼,十分十分耗時(shí)放吩。

將下方的gradle文件修改后,sync之后羽杰,Android Studio右側(cè)會(huì)出現(xiàn)對(duì)應(yīng)的assemble選項(xiàng)(root->Tasks->build)渡紫,如果直接點(diǎn)擊assemble就是打所有包。

附上app/build.gradle文件考赛,詳細(xì)看注釋

apply plugin: 'com.android.application'

def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+8"))
}
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.foxmail.aroundme.labeltextview"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    //秘鑰的位置惕澎,別名和密碼,推薦保存到別處
    signingConfigs {
        release {
            storeFile file("../gzl.jks")
            storePassword KEYSTORE_PASSWORD
            keyAlias "gzl"
            keyPassword KEY_PASSWORD
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
//            minifyEnabled true
//            shrinkResources true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }
    //多渠道種類颜骤,只是一個(gè)示例
    productFlavors {
        //豌豆莢
        wandoujia {
            //AndroidManifest.xml中定義的meta-data標(biāo)簽,
            // 需要和meta-data中的android:value="${CHANNEL}對(duì)應(yīng)
            manifestPlaceholders = [CHANNEL: "wandoujia"]
            //Build中生成一個(gè)字符用來區(qū)分不同渠道的不同策略
            buildConfigField "String", "CHANNEL", "\"wandoujia\""
        }
        //百度
        baidu {
            manifestPlaceholders = [CHANNEL: "baidu"]
            buildConfigField "String", "CHANNEL", "\"baidu\""
        }
    }
    //重命名apk文件
    def String apkName = "Alpha" + "_" + defaultConfig.versionName + "_" + defaultConfig.versionCode + "_dev_" + releaseTime() as String

    applicationVariants.all { variant ->

        if (variant.buildType.name.equals('release') || variant.buildType.name.equals('debug')) {
            variant.outputs.each { output ->
                def appName = 'Label'
                def oldFile = output.outputFile
                def buildName = ''

                variant.productFlavors.each { product ->
                    //循環(huán)取到的是productFlavors的每個(gè)名字唧喉,也是區(qū)分名字的關(guān)鍵
                    buildName = product.name
                }

                def releaseApkName = appName+ "_" + buildName + "_${apkName}.apk"
                output.outputFile = new File(oldFile.parent, releaseApkName)
            }
        }
    }


}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'
    compile project(':library')
}


修改

然后在AndroidManifest中添加


<meta-data
        android:name="UMENG_CHANNEL"
        android:value="${CHANNEL}" />
        
<application 

    .......
/>

編譯完后在BuildConfig中應(yīng)該有一個(gè)字段為CHANNEL,
對(duì)應(yīng)在productFlavors的wandoujia的代碼:

buildConfigField "String", "CHANNEL", ""wandoujia""

(注意要有轉(zhuǎn)義字符,不然會(huì)認(rèn)為是變量)

修改應(yīng)用內(nèi)代碼

Java代碼中添加


 if(BuildConfig.CHANNEL.equals("wandoujia")) {
            Log.d("msg", "wandoujia");
            Toast.makeText(MainActivity.this, "wandoujia", Toast.LENGTH_LONG).show();
        } else if (BuildConfig.CHANNEL.equals("baidu")) {
            Log.d("msg", "baidu");
            Toast.makeText(MainActivity.this, "baidu", Toast.LENGTH_LONG).show();
        }


不同渠道Apk可以采取這個(gè)策略來實(shí)現(xiàn)不同的操作

完美忍抽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末八孝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸠项,更是在濱河造成了極大的恐慌干跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锈锤,死亡現(xiàn)場(chǎng)離奇詭異驯鳖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)久免,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扭弧,“玉大人阎姥,你說我怎么就攤上這事「肽恚” “怎么了呼巴?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)御蒲。 經(jīng)常有香客問我衣赶,道長(zhǎng),這世上最難降的妖魔是什么厚满? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任府瞄,我火速辦了婚禮,結(jié)果婚禮上碘箍,老公的妹妹穿的比我還像新娘遵馆。我一直安慰自己鲸郊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布货邓。 她就那樣靜靜地躺著秆撮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪换况。 梳的紋絲不亂的頭發(fā)上职辨,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音戈二,去河邊找鬼舒裤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挽拂,可吹牛的內(nèi)容都是我干的惭每。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼亏栈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼台腥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绒北,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤黎侈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后闷游,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峻汉,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年脐往,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了休吠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡业簿,死狀恐怖瘤礁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梅尤,我是刑警寧澤柜思,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站巷燥,受9級(jí)特大地震影響赡盘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缰揪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一陨享、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦霉咨、人聲如沸蛙紫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坑傅。三九已至,卻和暖如春喷斋,著一層夾襖步出監(jiān)牢的瞬間唁毒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工星爪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浆西,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓顽腾,卻偏偏與公主長(zhǎng)得像近零,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抄肖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,328評(píng)論 25 707
  • 目錄一久信、Python打包及優(yōu)化(美團(tuán)多渠道打包)二、Gradle打包三漓摩、其他打包方案:修改Zip文件的commen...
    守望君閱讀 5,696評(píng)論 4 17
  • android多渠道打包 1.如何查看apk的簽名信息 1將apk解壓裙士; 2.找到META-INF 下的.RSA文...
    ping0505閱讀 1,045評(píng)論 0 1
  • 我的家鄉(xiāng)位于廣東省的粵西地區(qū),龍母故鄉(xiāng)——德慶管毙!在眾多的美食小吃中腿椎,我最鐘愛的莫過于竹篙粉,它滑而不膩夭咬,爽口柔韌啃炸,...
    今夕何夕_斯閱讀 4,075評(píng)論 3 3
  • Lifeline 守在病床邊肮帐,聽著窗外雨聲淅瀝,沒有過多的話語边器,就想握著你的手,看著你的臉龐托修。 你起來瞧瞧忘巧,今天的...
    諼草先生閱讀 556評(píng)論 0 2