Android-构建不同环境的Apk
在开发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. 有没有办法解决以下问题呢?
- 可以构建不同环境的Apk
- 不需要修改代码
- 可以使用不同的签名
利用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中只能设置两个变量release
和debug
:
buildTypes {release {signingConfig signingConfigs.releasebuildConfigField("int", "ENV_SETTING", "2")}debug {buildConfigField("int", "ENV_SETTING", "0")}}复制代码
buildTypes
中只有两种配置,在build的时候只能生产出两个Apk:debug和release,需要第三种环境的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
的配置,可以通过buildConfigField
给ENV_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
进行设置。
Android-构建不同环境的Apk相关推荐
- Android应用构建:3:Android Studio 3.5.3: apk文件构建与验证
这篇文章介绍一下如何使用Android Studio进行缺省的APK文件生成,以及将此APK文件安装到安卓模拟器上进行结果验证. APK文件种类 根据使用用途和是否有签名的区别,使用Android S ...
- 关于Android 构建
在简书上面有系列关于Android 的文章,还不错,部分同学可以在开发过程中阅读和学习:www.jianshu.com/collection/3fde3b545a35 关于Android 构建,看到这 ...
- React Native Android端多环境自动打包
文章目录 1.技术环境搭建 2.配置Android构建参数. 3.编辑复制文件到指定位置的脚本 4.Jenkins创建工程 5.下载nginx,配置相关参数.HTTPS证书 6.写iOS下载配置文件p ...
- win8下cocos2dx3.2移植android平台及代码打包APK
cocos2dx程序不能只在VS2012下运行,迟早是要搬运到Android和IOS上的.Windows下移植IOS平台先搁下不说比较困难,而且只有越狱的苹果机才可以运行,而且毕竟IOS高端.小众 ...
- 第2章:Android的编译环境--build系统
2.0 build简介 Android的build系统基于GNU Make 和shell 构建的一套编译环境.这套系统定义了大量的变量和函数,无论编写一个产品的配置文件还是一个模块的Android.m ...
- Unity2018导出Android工程并自行生成apk(总)
https://docs.unity3d.com/2018.4/Documentation/Manual/android-gradle-overview.html 以下内容都是在unity2018.4 ...
- Android编译及编译脚本、Android构建基础学习笔记
Android编译及编译脚本.Android构建基础学习笔记 Android编译及编译脚本 概述 Android.mk转换成Android.bp 例子(简单Android.mk文件转Android.b ...
- Android直接用手机打包apk!
你没有看错,用手机浏览器访问Jenkins,就可以打包apk,并生成下载二维码,发送邮件通知测试人员下载,从此解放双手,告别打包测试.先上本人手机邮箱收到的打包成功通知效果图: 废话少说,开干! 本人 ...
- Android Studio开发环境及第一个项目
1. 在你的电脑上搭建Android平台开发环境. 2. 新建项目,实现以下基本内容: (1) 修改默认的APP的名称和图标(任意的,非默认的). (2) 显示个人信息,包括:照片.专业.姓名.学号等 ...
最新文章
- python实现glove,gensim.word2vec模型训练实例
- Scikit-Learn 常用函数
- pt-osc原理、限制、及与原生online-ddl比较
- qpython3可以调用哪些库_Python3 如何使用asyncio库在调用第三方模块(存在IO等待)的情况下实现协程?...
- mysql一些基本sql操作_MySql数据库的一些基本操作---------------SQL语法
- Mybatis_接口编程
- html 显图片宽度100,HTML – 如何显示内联几个 100%宽度?
- mysql的面试2_mysql数据库面试题(2)
- 工具:帆软FineBI使用指南
- Vs2015常见错误码:error LNK2019: 无法解析的外部符号;error C2011:类型重定义;
- 正交表的查询地址汇总
- 打印机显示rpc服务器,win10打印机出现RPC服务器不可用的处理办法
- 关于《微习惯》的记录
- 外边框HTML代码,HTML代码-边框篇
- Kingbase8开发版,启动提示FATAL: XX000: max_connections should be less than orequal than 10
- guzzle php,PHP HTTP 客户端 - Guzzle
- hr员工数据分析(实战)
- oracle是java代码块,Oracle中施行java代码
- DDR Layout使用技巧
- 读《主角》笔记,摘记秦腔皇后忆秦娥的半生浮沉
热门文章
- linux如何导入安装包,linux下安装pip以及导入第三方包
- Notebook响应式扁平化后台UI框架模板
- DTS-SHOP微信小程序多店铺商城平台java源码
- PHP源码-2021来客多商户在线客服系统
- .NET 4.0新增命名空间:System.Collections.Concurrent
- Bootstrap 3 与 Foundation 5 的区别
- iPad iPhone程序增加和删除启动画面
- 如何写一个Jquery 的Plugin插件
- call_user_func和call_user_func_array的用法
- node.js——麻将算法(二)赖子玩法