公司测试总是问我这个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,点击运行