Android打包配置:测试环境、线上环境、参数化版本号

我们在开发过程中需要区分内部测试环境和线上环境,两者调用接口的域名路径不一样。每次环境切换,都要动态的修改代码,如果线上环境和测试环境不同的域名路径太多,会很麻烦,并且容易出错。


线上和测试环境切换.png

我们可以通过配置gradle来实现自动的环境配置切换。目标:
1.项目开发调试时环境切换
2.打包时可配置测试环境和线上环境
3.测试包和线上包可同时安装在手机上,并能够以app名称区分
4.打包时配置app的版本号
5.修改输出的apk文件名称

一、使用productFlavors实现环境切换

在配置之前,我们先来看一下,新建一个Android项目,默认支持的apk变种:
默认的变种.png

从图上看就只有debug和release两种。

1.配置flavor,测试环境和线上环境使用不同的applicationId

修改app或对应lib的module下的build.gradle文件,修改如下:


修改applicationId.png

此时再看BuildVariants,就会发现有4个变种:neibuDebug,neibuRelease,onlineDebug,onlineRelease。如图:
新的打包变种.png

分别选中neibuDebug和onlineDebug,点击Android Studio的运行按钮,就可以发现手机上同时可以使用两个app。
测试和线上两个app.png

2.配置测试和线上环境使用不同的代码和资源

a.在src文件夹下建立neibu和online两个文件夹,
b.在这两个文件夹下,分别建java和res文件夹,
c.在对应的java文件夹下建立NetConfig.java文件
d.删除掉main文件夹下的NetConfig.java文件

52D998D0-5A9B-4f00-A02A-EA8D72E72229.png

F8774AB6-162C-4f65-9189-3072254EA7CD.png

f.在res中配置两个strings.xml,此处不需要删除掉main下的资源文件


修改app名称.png

新的app名称.png

二、app版本号参数话和修改apk的文件名称

1.修改apk的文件名称,app目录下的,build.gradle文件

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                def buildTypeName = variant.buildType.name
                def flavorName = variant.productFlavors[0].name
                def buildTime = new Date().format("yyyy-MM-dd-HH-mm-ss")
                def fileName = "learn_${flavorName}_${defaultConfig.versionName}_${defaultConfig.versionCode}_${buildTime}_${buildTypeName}.apk"
                output.outputFileName = fileName
            }
        }
    }

打包后,如图:
app名称.png

2.配置版本号,可通过gradle命令传递

a.修改根目录下gradle.properties文件,添加两个value
gradle.properties文件.png

b.修改app文件夹下的,build.gradle文件

    defaultConfig {
        applicationId "com.example.learngradle"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode project.hasProperty("VERSION_CODE") ? (VERSION_CODE as int) : (DEF_VERSION_CODE as int)
        versionName project.hasProperty("VERSION_NAME") ? VERSION_NAME : DEF_VERSION_NAME

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

3.命令行下打包apk

a.命令:gradlew assembleDebug,生成两个debug包

A0E6250E-C410-473b-A9BD-2FAC8A1E6C64.png

62D58703-6F6D-4e15-A426-DAA7C9D12C5F.png

b.命令:gradlew assembleNeibuDebug,打包一个测试环境包
c.命令中配置版本号-PVERSION_CODE=142-PVERSION_NAME=1.2.1
比如:gradlew assembleRelease -PVERSION_CODE=101 -PVERSION_NAME=2.0.1

9BA2D0DC-1A7A-45db-8CE4-2509E826B101.png

代码在github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容