分类打包(本地测试、线上测试、正式环境或者更多)
2018-01-15 11:40
597 查看
需求
由于在项目中有多个开发环境,甚至多层测试后才能发到线上(或者给到其他开发用,不同的环境),每次到不同的地方进行修改实在太麻烦了,太麻烦了,所有决定进行统一管理和配置实现
首先需要知道有哪些会因为开发环境,进行变动而变动;然后进行实现修改,通过打包配置进而切换环境。例如:会有本地、线上测试、正式环境3种url
首先我把他们放到arrays.xml
<string-array name="user_urls"> <item>https://userlocal.xx.cn/</item> <item>http://mf-1-user.xx.cn/</item> <item>http://mf-cs-user.xx.cn</item> </string-array> <string-array name="order_urls"> <item>https://financelocal.xx.cn/</item> <item>http://mf-1-finance.xx.cn/</item> <item>http://mf-cs-finance.xx.cn</item> </string-array> <string-array name="token_urls"> <item>https://jwtlocal.xx.cn/</item> <item>http://mf-1-login.xx.cn/</item> <item>http://mf-cs-jwt.xx.cn</item> </string-array>
然后如果通过何种方式可以方便的在打包的时候直接区分呢?
我是通过在
AndroidManifest.xml中设置
<meta-data android:name="appType" android:value="${appType}"/>
以及在
build.gradle中
productFlavors { debug_mofang{ versionName "local_test_1.0.5.1" manifestPlaceholders = [ appType : 0, APP_LOGO: "@mipmap/logo_debug", ] } debug_2_mofang{ versionName "online_test_1.0.5.1" manifestPlaceholders = [ appType : 2, APP_LOGO: "@mipmap/logo_debug", ] } mofang { versionName "1.0.5" manifestPlaceholders = [ appType : 1, APP_LOGO: "@mipmap/logo", ] } }
在使用的地方,通过以下方法获取
appType
public static int getAppTye(Context context){ ApplicationInfo appInfo = null; try { appInfo = context .getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (null == appInfo){ return 1; } int appType = appInfo.metaData.getInt("appType"); LogUtil.i("appType = " + appType); return appType; }
使用由于我使用了xutils3:
public static String getOrderUrl(int type){ String[] urls = x.app() .getApplicationContext() .getResources() .getStringArray(R.array.order_urls); LogUtil.i("OrderUrl = " + urls[type]); return urls[type]; } public static String getTokenUrl(int type){ String[] urls = x.app() .getApplicationContext() .getResources() .getStringArray(R.array.token_urls); LogUtil.i("TokenUrl = " + urls[type]); return urls[type]; } public static String getUpdateUrl(int type){ String[] urls = x.app() .getApplicationContext() .getResources() .getStringArray(R.array.update_urls); LogUtil.i("UpdateUrl = " + urls[type]); return urls[type]; }
获取到不同的url
int apiType = WebUtils.getAppTye(x.app().getApplicationContext()); String HTTP_USER = UrlUtils.getUserUrl(apiType) ; String HTTP_ORDER = UrlUtils.getOrderUrl(apiType) ; String HTTP_TOKEN = UrlUtils.getTokenUrl(apiType) ;
然后
Sync now就可看到
安装
打包时,通过配置获取到appType,自动切换不同的使用环境。
相关文章推荐
- Android使用Gradle命令动态修改BASE_URL(测试/正式环境地址)完成打包,不需要修改代码
- Maven为本地、测试、生产等不同的环境打包
- 本地模拟正式环境自动预警邮件发送的测试方法
- 在Android打包中区分测试和正式环境浅析
- gradle 的配置(多渠道打包,改包名,测试环境vs正式环境处理方式,配置宏)
- 使用OSS JavaScript的sdk进行web端直传,开发环境下测试没有问题,但部署到服务器上或者打包到IOS原生包中出现了问题。
- Android打包中区分测试和正式环境
- 详解vue.js根据不同环境(正式、测试)打包到不同目录
- 微信公众号测试环境访问本地项目-ngrok
- Windows环境下新浪SAE本地开发环境搭建及简单测试
- spring来进行正式、测试环境无缝式切换
- AndroidManifest占位符(实现根据正式还是测试环境设置不同的app名称)
- maven 开发环境 、测试环境、生产环境打包
- 使用Maven自动打包配置文件生成开发环境,测试环境,生产环境
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
- 本地搭建IPv6环境测试APP
- 搭建可调试的微信公众平台本地测试环境
- 最简单的方法如何从测试环境切换到线上
- 开发者线上环境测试发布后的Dubbo接口
- android 工程 切换环境 测试正式环境切换的几种方法的总结