Android 利用Gradle实现App环境分离

974 阅读2分钟

公司测试总是问我这个app是内网还是外网,这个地址是哪个服务器的

我怎么知道是哪个服务器的😅

去网上搜了一圈大部分都是说在哪预留个位置显示地址好了,这个方法虽然可以解决这个问题,但是始终不是最优解。想起测试妹子之前又说能不能同时存在多个环境的app,每次测不同服务器的都要卸载安装太麻烦了。

本着追求技术的目的,对,就是这么的单纯。研究了下如何利用gradle实现app环境分离。

说了这么多废话,下面才是正文。

实现思路

Android是依据包名来识别app的,也就是说我们需要修改打包出的apk包名来实现多环境共存,那么久需要解决两个问题。
1、如何在打包时候修改包名。
2、如何依据不同的包来加载不同服务器地址字段。

修改包名

查阅官方文档,发现有 applicationIdSuffix 这个属性,官方地址

    buildTypes {
        //本地测试服
        debug {
            //调试时用正式签名
            signingConfig signingConfigs.release
            applicationIdSuffix '.debug'
        }
        //公网测试服
        beta {
           //调试时用正式签名
           signingConfig signingConfigs.release
           applicationIdSuffix '.beta'
           //设置开启调试
           debuggable true
        }
    }

在打包时候就会在包名后面增加debug这个字段,这样就有效解决了包名的问题。这里我分为debug版本和beta版本。debuggable 设置为true 表示开启debug模式,方便调试。

依据包名修改使用服务器地址

在res 文件夹下创建 buildTypes 对应名称文件夹

资源在打包时,会和main中融合,优先使用当前包下的资源,我们可以在string中加入app_service_ip 地址,这样我们就可以在代码中使用对应的IP地址。既然这样你可能想到那不同的环境,app名称icon是不是也可以这样做,没错,我们可以对不同的环境下app使用对应的icon,app name,这样可以方便识别不同的版本。

打包不同app版本

选择不同的 buildTypes

调试编译器直接选择

在Android studio中选择Build Variants,点击运行