Android Studio中的Gradle配置不同服務(wù)器地址以生成不同安裝包”

需求:

在產(chǎn)品開發(fā)中厉萝,經(jīng)常需要發(fā)布各個(gè)版本鸥拧,每個(gè)版本的服務(wù)器地址有不同的服務(wù)器地址茉稠。比如

  • 開發(fā)服務(wù)器使用 192.168.1.232服務(wù)器额湘,

  • 測(cè)試服務(wù)器使用 192.168.1.245服務(wù)器秕铛,

  • 正式上線后服務(wù)器地址是http://xxxx.com
     
     在配合git開發(fā)中還要分支管理缩挑,常用的有:

  • dev

  • test

  • master
     
     我們起初的開發(fā)過程是:

1.在項(xiàng)目開始時(shí),開發(fā)人員寫代碼鬓梅,簽入代碼到dev分支供置。開發(fā)人員使用 開發(fā)服務(wù)器的服務(wù)器地址
2.在啟動(dòng)測(cè)試時(shí),開發(fā)組負(fù)責(zé)人合并代碼到 test 測(cè)試分支绽快。測(cè)試組負(fù)責(zé)人要修改代碼中 服務(wù)器地址的源文件芥丧,更改為 測(cè)試服務(wù)器的地址紧阔,打包分發(fā)到測(cè)試組成員開始測(cè)試。
3.測(cè)試完畢后续担,測(cè)試組負(fù)責(zé)人合并代碼到 master 分支擅耽,修改服務(wù)器地址為 上線服務(wù)器地址,并測(cè)試物遇,再到正式發(fā)布乖仇。
  在上面的這些步驟中我們看到,需要多次修改服務(wù)器地址询兴,對(duì)相關(guān)的技術(shù)能力有一定要求乃沙,認(rèn)為操作還容易操作,比如寫了一個(gè)不存在的服務(wù)地址诗舰。

改進(jìn):

引入 Jenkins 服務(wù)自動(dòng)打包警儒,Jenkins是個(gè)非常優(yōu)秀的自動(dòng)構(gòu)建工具,可以為我們的打包提供很棒的體驗(yàn)眶根。使得 測(cè)試人員 在需要時(shí)蜀铲,自己就能進(jìn)行打包而不需要其他更多操作。當(dāng)然属百,這需要我們配置好構(gòu)建腳本记劝。在使用Android studio之后,就需要了解 gradle腳本了诸老。

技術(shù)關(guān)鍵詞:

buildConfigField隆夯, BuildConfig

思路:

在gradle腳本中,使用 buildConfigField 聲明一個(gè)字段别伏,編譯成功后蹄衷,會(huì)為這個(gè)字段生成靜態(tài)常量,我們可以在代碼中使用這個(gè)常量厘肮。而在配合 gradle 的 buildTypes 配置不同的編譯類型(比如測(cè)試愧口,開發(fā),上線三種類型)类茂,每個(gè)類型指定不同的 字段的值耍属。而在成功build后,gradle會(huì)為 美工不同的類型環(huán)境生成不同的apk包巩检,比如一次性就生成了 測(cè)試厚骗,開發(fā),上線三個(gè)apk包兢哭。

實(shí)現(xiàn)方式:

1.修改 build.gradle , 配置buildTypes 下的 buildConfigField字段

 buildTypes {
        release {
            minifyEnabled false
            buildConfigField("String", "API_HOST", "\"http://www.jinlinbao.com\"")
            signingConfig signingConfigs.zyfkey
        }
        debug245 {
            debuggable true
            minifyEnabled false
            buildConfigField("String", "API_HOST", "\"http://192.168.1.245\"")
            signingConfig signingConfigs.zyfkey
        }
    }

注意上面帶下劃線字體的部分领舰。

這個(gè)方法需要三個(gè)參數(shù),分別是 字段變量類型,變量名冲秽,和值舍咖。比如這里的

"String", "API_HOST", ""http://192.168.1.245"" // 一定注意 右斜杠后面跟著 轉(zhuǎn)義字符分號(hào)
 就會(huì)生成:
    public static final String API_HOST = "http://192.168.1.245";

2.修改 build.gradle , 配置 defaultConfig 下的 buildConfigField字段 ,這是為了 代碼編譯的方便,使得在各個(gè)環(huán)境下都有 API_HOST 這個(gè)字段锉桑。

buildConfigField("String", "API_HOST", ""http://192.168.1.232"")

3.開始 build 排霉,完成后,可以在代碼中使用:

String str = BuildConfig.API_HOST;

完整腳本

下面是完整的 配置腳本:

apply plugin: 'com.android.application'


android {
    signingConfigs {
        zyfkey {
            keyAlias '-'
            keyPassword '-'
            storeFile file('/Users/zhangyunfei/git/vocabulary/zhangyf.keystore')
            storePassword '-'
        }
    }
    compileSdkVersion 19
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "vir56k.vecabulary"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
        buildConfigField("String", "API_HOST", "\"http://192.168.1.232\"")
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField("String", "API_HOST", "\"http://www.jinlinbao.com\"")
            signingConfig signingConfigs.zyfkey
        }
        debug245 {
            debuggable true
            minifyEnabled false
            buildConfigField("String", "API_HOST", "\"http://192.168.1.245\"")
            signingConfig signingConfigs.zyfkey
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

下面是代碼演示:

  

package vir56k.vecabulary;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String str =   BuildConfig.API_HOST;
        TextView txt1 = (TextView) findViewById(R.id.txt1);
        txt1.setText(str);
    }


}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末民轴,一起剝皮案震驚了整個(gè)濱河市攻柠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杉武,老刑警劉巖辙诞,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異轻抱,居然都是意外死亡飞涂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門祈搜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较店,“玉大人,你說我怎么就攤上這事容燕×撼剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蘸秘,是天一觀的道長(zhǎng)官卡。 經(jīng)常有香客問我,道長(zhǎng)醋虏,這世上最難降的妖魔是什么寻咒? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮颈嚼,結(jié)果婚禮上毛秘,老公的妹妹穿的比我還像新娘。我一直安慰自己阻课,他們只是感情好叫挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著限煞,像睡著了一般抹恳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上署驻,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天奋献,我揣著相機(jī)與錄音绊序,去河邊找鬼。 笑死秽荞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抚官。 我是一名探鬼主播扬跋,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼凌节!你這毒婦竟也來了钦听?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤倍奢,失蹤者是張志新(化名)和其女友劉穎朴上,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卒煞,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痪宰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畔裕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衣撬。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扮饶,靈堂內(nèi)的尸體忽然破棺而出具练,到底是詐尸還是另有隱情,我是刑警寧澤甜无,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布扛点,位于F島的核電站,受9級(jí)特大地震影響岂丘,放射性物質(zhì)發(fā)生泄漏陵究。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一元潘、第九天 我趴在偏房一處隱蔽的房頂上張望畔乙。 院中可真熱鬧,春花似錦翩概、人聲如沸牲距。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牍鞠。三九已至,卻和暖如春评姨,著一層夾襖步出監(jiān)牢的瞬間难述,已是汗流浹背萤晴。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胁后,地道東北人店读。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像攀芯,于是被迫代替她去往敵國(guó)和親屯断。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理侣诺,服務(wù)發(fā)現(xiàn)殖演,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評(píng)論 6 342
  • 讀《解憂雜貨店》有感 從我給自己立下2016年要寫100篇文章以后,每讀完一本書搔确,我都會(huì)問自己彼棍,如果用一句話概括這...
    好時(shí)光生活薈閱讀 835評(píng)論 0 0
  • 寒煙籠翠,殘?jiān)瞥鲫囃谆煅囊豢|霓裳滥酥。征雁斷飛,機(jī)蛩緊織畦幢,千魂欲度仙鄉(xiāng)坎吻。迢遞送清商。甚黃柯被冷宇葱,衰草凝霜瘦真。暗笛傳聲,移...
    納蘭蘇淺閱讀 209評(píng)論 0 0