10_App生產(chǎn)和測試環(huán)境的分離

1. 概述


在 App 的開發(fā)階段會(huì)有“測試”和“生產(chǎn)”兩種環(huán)境疏旨。測試環(huán)境主要就是進(jìn)行調(diào)試贝咙,功能完善虑啤,性能調(diào)優(yōu)等的編寫程序的環(huán)境鸳慈,而每個(gè)階段我們對(duì)外發(fā)布的 App 版本都會(huì)配置好正式的生產(chǎn)環(huán)境也就是正式上線的環(huán)境饱溢。它們之間的區(qū)別主要就是不同環(huán)境下使用不同的接口 URL 和數(shù)據(jù)庫。

在開發(fā)和測試過程中走芋,我們對(duì)產(chǎn)品進(jìn)行迭代升級(jí)時(shí)绩郎,有時(shí)會(huì)我們的手機(jī)上已經(jīng)安裝了一個(gè)上線的應(yīng)用情臭,但是開發(fā)過程中我們還要安裝一個(gè)測試的應(yīng)用以便調(diào)試引几。這時(shí)我們可能要先卸載上線的應(yīng)用,再安裝測試的應(yīng)用,而且還有一些配置需要改動(dòng)闯割,比如接口地址、第三方的 app key 等于样,這樣操作起來顯得很麻煩屡律,也容易出錯(cuò)。

下面就針對(duì)這種情況浅萧,我們?cè)?Android Studio 只需做一些相關(guān)配置就可以解決上述問題逐沙。

2. Android Studio 相關(guān)介紹


2.1 package and applicationId

Android Studio 通過 Gradle 構(gòu)建系統(tǒng)中,applicationId 屬性作為應(yīng)用的唯一標(biāo)識(shí)符(包名)洼畅,用于區(qū)分不同應(yīng)用吩案;package 屬性用來定義被引用的資源類 R 文件。

package 在 AndroidManifest.xml 文件的 manifest 標(biāo)簽里面帝簇, applicationId 在 app/build.gradle文件中的 defaultConfig 配置下徘郭。新建項(xiàng)目時(shí) applicationId 默認(rèn)使用 package 屬性值初始化。

...
// AndroidManifest.xml文件中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.codinglife.moduzhang.testsample">
...
// app/build.gradle 文件中
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.codinglife.moduzhang.testsample"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
...

我們要實(shí)現(xiàn) Apk 的環(huán)境分離丧肴,即在同一設(shè)備上安裝同一應(yīng)用的不同版本残揉,我們我們只需修改 applicationId 的值,構(gòu)建出不同包名的 Apk 安裝包文件芋浮。而要修改 applicationId 的值抱环,我們只需通過 productFlavorsbuildTypes 來輕松實(shí)現(xiàn) Apk 的打包定制(或者說是 Build Variants)。

項(xiàng)目中的 productFlavorsbuildTypes 配置可以在 app/build.gradle 代碼文件或者在頂部操作欄的 File 下 Project Structure 上修改纸巷,作用是一樣的镇草。

2.2 productFlavors

通過定義多個(gè)不同的 productFlavors 來實(shí)現(xiàn)應(yīng)用的不同定制版本,每一個(gè)Flavor 與 buildTypes 配合產(chǎn)出對(duì)應(yīng)的一種輸出類型的 Apk 文件瘤旨,新建的項(xiàng)目初始化只有一個(gè)默認(rèn)的 Flavor 就是 defaultConfig梯啤。

應(yīng)用環(huán)境分離.png

2.3 buildTypes

默認(rèn)情況下,項(xiàng)目的 buildTypes 包含 debug 和 release 兩個(gè)構(gòu)建版本裆站,其中 release 版本的執(zhí)行需要手動(dòng)設(shè)置簽名文件条辟。配置 buildTypes 是通過定義 applicationIdSuffix 來實(shí)現(xiàn)的,就是添加包的后綴名宏胯。

打包定制不同的 App 安裝包.png

除了上面的配置外羽嫡,productFlavors 和 buildTypes 都會(huì)通過各自的 sourceSet 來提供代碼和資源,默認(rèn)的路徑為:src/flavorNamesrc/typeName肩袍。利用這個(gè)特性杭棵,我們可以實(shí)現(xiàn)不同定制版本的 Apk 顯示不同的應(yīng)用名稱和桌面圖標(biāo),以便從設(shè)備上進(jìn)行區(qū)分。

productFlavors 和 buildTypes 配合產(chǎn)出各種格式為 “flavorName + typeName” 的 Build Variants魂爪,以打包出不同版本的 Apk先舷。當(dāng)你沒有自定義flavors,默認(rèn)的defaultConfig也會(huì)與buildTypes形成對(duì)應(yīng)的Build Variants滓侍,只是沒有名字蒋川,所以顯示為debug和release。

defaultConfig + buildTypes.png

3. 生產(chǎn)和測試環(huán)境分離操作


以下以 buildTypes 方式為例

  1. 在 Project Structure 中的Build Types 中撩笆,設(shè)置 debug 版本中的Application Id Suffix 為 .debug 或其它名稱捺球,release 版本不需要?jiǎng)印?br> gradle 文件會(huì)生成如下內(nèi)容
    有了這一步,就可以將 debug 版本和 release 版本的 Apk 安裝在同一設(shè)備上了夕冲。
    設(shè)置Application Id Suffix.png
  2. 我們還可以設(shè)置 debug 版本的應(yīng)用圖標(biāo)氮兵,應(yīng)用名稱等。
    在 src 目錄下新建 debug 目錄歹鱼,目錄名要和上一步中的 Application Id Suffix 一致泣栈,然后在 debug 目錄下新建 res 目錄,在 res 目錄下建立圖片和 values 文件夾弥姻。在選擇 debug 版本運(yùn)行時(shí)南片,這里的資源文件會(huì)自動(dòng)替換 main 目錄下相同的資源文件。
    我們可以在 strings 文件里面放一些 debug 和 release 版本不同的配置信息蚁阳,如:服務(wù)器接口地址铃绒,然后在程序的入口處賦值給代碼里的全局靜態(tài)變量鸽照。這樣就不用每次來回切換修改螺捐。


    debug版本信息.png
  3. 運(yùn)行時(shí)在 BuildVariants 中選擇運(yùn)行 debug 或 release 版本。
    還是要注意在運(yùn)行 release 版本的時(shí)候矮燎,一定要配置簽名信息定血,否則會(huì)報(bào)錯(cuò)。最好把 debug 版本的也設(shè)置統(tǒng)一的簽名文件诞外。


    配置簽名信息.png

重要參考文章:
Android 利用Gradle實(shí)現(xiàn)app的環(huán)境分離
APP生產(chǎn)和開發(fā)環(huán)境的分離(手把手教你)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茫虽,一起剝皮案震驚了整個(gè)濱河市啥纸,隨后出現(xiàn)的幾起案子盾致,更是在濱河造成了極大的恐慌罩驻,老刑警劉巖鉴腻,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件课锌,死亡現(xiàn)場離奇詭異请毛,居然都是意外死亡固棚,警方通過查閱死者的電腦和手機(jī)委粉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門栗涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墨吓,你說我怎么就攤上這事纹磺√妫” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵橄杨,是天一觀的道長秘症。 經(jīng)常有香客問我,道長式矫,這世上最難降的妖魔是什么乡摹? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮采转,結(jié)果婚禮上聪廉,老公的妹妹穿的比我還像新娘。我一直安慰自己故慈,他們只是感情好板熊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著察绷,像睡著了一般干签。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拆撼,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天容劳,我揣著相機(jī)與錄音,去河邊找鬼情萤。 笑死鸭蛙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筋岛。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼晒哄,長吁一口氣:“原來是場噩夢啊……” “哼睁宰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寝凌,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤柒傻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后较木,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體红符,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了预侯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片致开。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萎馅,靈堂內(nèi)的尸體忽然破棺而出双戳,到底是詐尸還是另有隱情,我是刑警寧澤糜芳,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布飒货,位于F島的核電站,受9級(jí)特大地震影響峭竣,放射性物質(zhì)發(fā)生泄漏塘辅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一皆撩、第九天 我趴在偏房一處隱蔽的房頂上張望莫辨。 院中可真熱鬧,春花似錦毅访、人聲如沸沮榜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟆融。三九已至,卻和暖如春守呜,著一層夾襖步出監(jiān)牢的瞬間型酥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工查乒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弥喉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓玛迄,卻偏偏與公主長得像由境,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蓖议,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • 環(huán)境分離 有過互聯(lián)網(wǎng)軟件開發(fā)經(jīng)驗(yàn)的朋友一定對(duì)于測試環(huán)境和生產(chǎn)環(huán)境這兩個(gè)詞很是熟悉虏杰,一般軟件開發(fā)階段都是在測試環(huán)境(...
    亦楓閱讀 2,786評(píng)論 2 57
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/5255b100930e 0. 前言 完全由個(gè)人翻...
    王三的貓阿德閱讀 2,506評(píng)論 0 4
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng),請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,122評(píng)論 8 72
  • 最近在項(xiàng)目中遇到需要實(shí)現(xiàn) Apk 多渠道勒虾、定制化打包纺阔, Google 、百度查找了一些資料修然,成功實(shí)現(xiàn)了上述功能笛钝,在...
    看一季殘花落幕閱讀 2,488評(píng)論 1 8
  • 當(dāng)你在開發(fā)一個(gè)app,通常你會(huì)有幾個(gè)版本质况。大多數(shù)情況是你需要一個(gè)開發(fā)版本,用來測試app和弄清它的質(zhì)量玻靡,然后還需要...
    雪殘閱讀 407評(píng)論 0 0