Android-构建不同环境的Apk

 2023-09-05 阅读 236 评论 0

摘要:在开发Android过程中,常常需要构建不同环境的Apk,比如我们有可能会需要有三个环境 开发环境测试环境线上环境三种环境对应不同的服务器地址: public static final String DEV_URL = "http://dev.domain.com/";public static final String TEST_URL

在开发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  releasepublic 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: debugpublic static final int ENV_SETTING = 0;复制代码

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

    //0  dev//1  test//2  releasepublic 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.releasebuildConfigField("int", "ENV_SETTING", "2")}debug {buildConfigField("int", "ENV_SETTING", "0")}}复制代码

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

 buildTypes {release {signingConfig signingConfigs.releasebuildConfigField("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进行设置。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/760.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息