Android-构建不同环境的Apk

Android-构建不同环境的Apk

在开发Android过程中,常常需要构建不同环境的Apk,比如我们有可能会需要有三个环境

  • 开发环境
  • 测试环境
  • 线上环境

三种环境对应不同的服务器地址:

   public static final String DEV_URL = "http://dev.domain.com/";
   public static final String TEST_URL = "http://test.domain.com/";
   public static final String RELEASE_URL = "http://www.domain.com/";

可以使用一个变量配置使用不同的环境:

    //0  dev
    //1  test
    //2  release
    public static final int ENV_SETTING = 0;

定义一个获取不同环境url的方法,默认为dev环境:

    public static String getBaseUrl() {
        switch (ENV_SETTING) {
            case 1:
                return TEST_URL;
            case 2:
                return RELEASE_URL;
            default:
                return DEV_URL;
        }
    }

这样可以通过设置ENV_SETTING构建不同的Apk:

  • 开发的时候使用默认dev环境
  • 测试的时候给test环境
  • 发布的时候使用release环境

但是这样做却有一些问题,就是每次必须修改ENV_SETTING的值,每次更改都会导致版本库变动,产生新的提交,如果提交之后的话,其他的开发者不一定会知道版本库的变动,导致环境不同产生错误,还有可能环境不对,生产出了错误环境的Apk. 有没有办法解决以下问题呢?

  1. 可以构建不同环境的Apk
  2. 不需要修改代码
  3. 可以使用不同的签名
    利用gradle可以解决上面的三个问题,下面就看下如何使用gradle解决上面的问题吧!

buildConfigField

buildConfigField是gradle的一个方法,他的作用是可以给BuildConfig添加变量,赋值等。它的使用:

buildConfigField("int", "ENV_SETTING", "0")

这样就给BuildConfig中新增加了一个变量EN_SETTING,新增的代码如下:

// Fields from build type: debug
  public static final int ENV_SETTING = 0;

在代码中使用BuildConfig新增的变量EN_SETTING:

    //0  dev
    //1  test
    //2  release
    public static final int ENV_SETTING = BuildConfig.ENV_SETTING;

buildConfigField通过BuildConfig类可以把gradle里的配置传递给Java代码。只是传递给了Java值还不能解开始说的三个问题。下面再看下如何在gradle中配置不同的环境。

buildTypes

虽然通过gradle中可以配置ENV_SETTING变量,通过buildConfigField可以让java代码获取到设置的值。但是在buildTypes中只能设置两个变量releasedebug:

buildTypes {
        release {
            signingConfig signingConfigs.release
            buildConfigField("int", "ENV_SETTING", "2")
        }
        debug {
            buildConfigField("int", "ENV_SETTING", "0")
        }


    }

buildTypes中只有两种配置,在build的时候只能生产出两个Apk:debugrelease,需要第三种环境的Apk,就需要定义一种新的buildTypes,用来构建测试环境的Apk. 新增加一种buildTypes

 buildTypes {
        release {
            signingConfig signingConfigs.release
            buildConfigField("int", "ENV_SETTING", "2")
        }
        debug {
            buildConfigField("int", "ENV_SETTING", "0")
        }
        releaseTest.initWith(buildTypes.release)
        releaseTest {
            buildConfigField("int", "ENV_SETTING", "1")
        }

    }

新增加buildTypes叫做releaseTest(注意不能使用test开头)。 它继承了buildTypes.release的配置,可以通过buildConfigFieldENV_SETTING重新赋值,它会覆盖buildTypes.release的配置。 这样就有了三种不同的build配置。

assmble*

gradle通过assmble*命令可以打包不同buildTypes的Apk,在右侧的gradle工具栏里面的build菜单栏里面可以看到三种不同的assemble:

  • assembleDebug
  • assembleRelease
  • assembleReleaseTest

这样就可以根据需要构建不同的Apk,不需要更改代码就可以构建不同环境的Apk,而且生成的Apk的名字也能区分出不同的环境,通过上面的配置可以构建出三种Apk:

  • app-debug.apk
  • app-release.apk
  • app-releaseTest.apk

还可以根据上面的配置需要设置不同的Apk签名,通过signingConfig进行设置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容