Gradle3.0 多渠道打包

android開(kāi)發(fā)中常常會(huì)碰到開(kāi)發(fā)環(huán)境與生產(chǎn)環(huán)境接口地址使用不同域名的情況股毫、甚至要求debug包與release包不同包名堡僻,其實(shí)這些都可以通過(guò)gradle來(lái)幫我們完成圾笨,再也不用手動(dòng)改代碼乔遮,拒絕麻煩與出錯(cuò),了解gralde的用法贫途,有助于提升生產(chǎn)力。這里僅記錄自己開(kāi)發(fā)中碰到的問(wèn)題及解決方式

結(jié)合使用場(chǎng)景與實(shí)際操作

  • 動(dòng)態(tài)改變接口地址
  • release與debug版本不同包名
  • debug使用release版本正式簽名
  • apk打包自動(dòng)命名

一待侵、比如release版本要求api域名為:https://www.release.*,而debug版本為:https://www.test.*丢早。</br>我們這里介紹的是通過(guò)在Manifest文件中添加變量,同時(shí)在gradle中打包時(shí)動(dòng)態(tài)的去更改屬性的值秧倾,應(yīng)用啟動(dòng)的時(shí)候去讀取從而動(dòng)態(tài)的改變當(dāng)前版本的域名

  1. 通過(guò)gradle修改AndroidManifest.xm meta-data值
 <!--AndroidManifest.xml-->
 <!--編譯時(shí)域名動(dòng)態(tài)切換-->
 <application>
 <meta-data android:value="${app_version_key}"
     android:name="app_version"/>...</application>
  1. app下的gradle中使用manifestPlaceholders來(lái)動(dòng)態(tài)替換屬性值怨酝,格式如下;
     release {
            manifestPlaceholders = [
                    app_version_key: "release"
            ]
        }
     debug {
            manifestPlaceholders = [
                    app_version_key: "test"
            ]
        }

3.由于清單文件中我們的meta-data節(jié)點(diǎn)寫(xiě)在application節(jié)點(diǎn)根目錄下,這里我們?cè)赼pplication中去獲取該屬性的值(其他方式請(qǐng)自行g(shù)oogle)

   try {
            ApplicationInfo info = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
            String host = info.metaData.getString("app_version");
            if (host.equals("test")) {//測(cè)試版
                HttpApis.host = "https://www.release.*";
            } else {//正式版
                HttpApis.host = "https://www.test.*";
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

通過(guò)上述操作我們已經(jīng)可以實(shí)現(xiàn)打包時(shí)那先,release包與debug包域名分開(kāi)农猬。上述同樣可用在第三方sdk如極光推送、測(cè)試版與正式版分開(kāi)推送售淡,可使用manifestPlaceholders 動(dòng)態(tài)的改變對(duì)應(yīng)的屬性值

二斤葱、有時(shí)候?yàn)榱藴y(cè)試方便,我們常將正式版與測(cè)試版分兩個(gè)包名打包揖闸,從而實(shí)現(xiàn)同臺(tái)手機(jī)可以同時(shí)安裝揍堕、拒絕不斷的安裝卸載操作

1、修改app下的gradle文件,需要注意的一點(diǎn)是在配置了productFlavors后汤纸,defaultConfig中的applicationId便會(huì)失效

 android{
    defaultConfig {
        //applicationId "com.david.smarthome"
        ...
        flavorDimensions "versionCode"

    }
    productFlavors {
        appdebug {
            applicationId 'com.david.smarthome_test'
        }
        apprelease {
            applicationId 'com.david.smarthome'
        }
    }
 }

2衩茸、Android Studio會(huì)自動(dòng)根據(jù)build.gradle 生成對(duì)應(yīng)的BuildVariants。


image

對(duì)應(yīng)Release與Debug即可組合成2*2 個(gè)版本的包贮泞。使用圖形界面安裝時(shí)可以通過(guò)Build Variants選擇當(dāng)前要build到手機(jī)的版本

3楞慈、Signed Apk時(shí)同樣有2*2種維度的不同版本可供打包


image

自此我們已經(jīng)完成多包名打包的配置

三幔烛、由于Android Studio 打Debug包時(shí)默認(rèn)使用 簽名為Debug版本,即:debug.keystore,而當(dāng)我們接入的第三方SDK如微信等要求提交Release版本的簽名(release.jks)囊蓝。這個(gè)時(shí)候最方便的方式便是讓打Debug包的時(shí)候直接使用我們正式版的簽名

修改app.gradle,添加signingConfigs饿悬,同時(shí)在debug中指向該簽名文件

android {
    signingConfigs {
        signconfig {
            keyAlias 'smarthome'
            keyPassword '123123'
            storeFile file('/Users/david/AndroidStudioProjects/SmartHome/smarthome.jks')
            storePassword '123123
        }
    }
      debug {
            ...
            signingConfig signingConfigs.signconfig
     
        }
}    

以上兩部即可實(shí)現(xiàn)我們的效果,Debug包已經(jīng)使用的是我們正式版的簽名文件

四慎颗、定義打包命名規(guī)則乡恕,結(jié)合時(shí)間日期,免去手動(dòng)重命名易錯(cuò)俯萎,沒(méi)規(guī)律的問(wèn)題

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android{
     applicationVariants.all { variant ->
        if (variant.buildType.name.equals('release')) {
            variant.outputs.all { output ->
                def buildName = "com.david.smarthome"
                def type = variant.buildType.name
                def releaseApkName = buildName + '_' + type + "_" + versionName + '_' + releaseTime() + '.apk'
                outputFileName = releaseApkName
            }
        } else {
            variant.outputs.all { output ->
                def buildName = "com.david.smarthome"
                def releaseApkName = buildName + '_' + "test" + "_" + versionName + '_' + releaseTime() + '.apk'
                outputFileName = releaseApkName
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末傲宜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子夫啊,更是在濱河造成了極大的恐慌函卒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇眯,死亡現(xiàn)場(chǎng)離奇詭異报嵌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熊榛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)锚国,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人玄坦,你說(shuō)我怎么就攤上這事血筑。” “怎么了煎楣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵豺总,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我择懂,道長(zhǎng)喻喳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任困曙,我火速辦了婚禮表伦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赂弓。我一直安慰自己绑榴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布盈魁。 她就那樣靜靜地躺著翔怎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赤套,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天飘痛,我揣著相機(jī)與錄音,去河邊找鬼容握。 笑死宣脉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剔氏。 我是一名探鬼主播塑猖,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谈跛!你這毒婦竟也來(lái)了羊苟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤感憾,失蹤者是張志新(化名)和其女友劉穎蜡励,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阻桅,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凉倚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫂沉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稽寒。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趟章,靈堂內(nèi)的尸體忽然破棺而出瓦胎,到底是詐尸還是另有隱情,我是刑警寧澤尤揣,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站柬祠,受9級(jí)特大地震影響北戏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漫蛔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一嗜愈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莽龟,春花似錦蠕嫁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春赘阀,著一層夾襖步出監(jiān)牢的瞬間益缠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工基公, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幅慌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓轰豆,卻偏偏與公主長(zhǎng)得像胰伍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酸休,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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