Gradle 动态编译-利用配置文件指定不同软件版本对应的服务器地址
来源:互联网 发布:linux send 返回值 编辑:程序博客网 时间:2024/05/21 22:24
1.需求:
1.能够在配置文件中指定不同软件版本对应的服务器地址,免除开发人员多次修改服务器地址的工作,避免错误。2.同时生成不同版本的apk,避免重复无意义的工作。
2.改进:
思路:引入 Jenkins 服务自动打包,在gradle脚本中,使用 buildConfigField 声明一个字段,编译成功后,会为这个字段生成静态常量,我们可以在代码中使用这个常量。然后在gradle 的 buildTypes中配置不同的编译类型(比如测试,开发,上线三种类型),每个类型指定不同的字段的值。而在成功build后,gradle会为不同的类型环境生成不同的apk包,一次性就生成了测试,开发,上线三个apk包。
3.实现方式:
- 修改 build.gradle , 配置buildTypes 下的 buildConfigField字段
buildTypes { release { minifyEnabled false buildConfigField("String","API_HOST","\"http://www.jinlinbao.com\"") } debug{ debuggable true minifyEnabled false buildConfigField("String","API_HOST", "\"http://192.168.1.245\"") }}
注意上面带下划线字体的部分。
这个方法需要三个参数,分别是字段变量类型,变量名,和值。比如这里的
“String”, “API_HOST”, “\”http://192.168.1.245\”” // 一定注意 右斜杠后面跟着转义字符分号
就会生成:
public static finalString API_HOST = “http://192.168.1.245“;
2.. 修改 build.gradle , 配置 defaultConfig 下的 buildConfigField字段 ,这是为了代码编译的方便,使得在各个环境下都有 API_HOST 这个字段。
buildConfigField(“String”,”API_HOST”, “\”http://192.168.1.232\”“)
3.. 配置完成后,先build工程,生成BuildConfig类,然后可以在代码中使用:
String str =BuildConfig.API_HOST;
下面是完整的配置文件:
android { signingConfigs { //签名配置 debug { keyAlias 'androiddebugkey' keyPassword 'android' storeFile file('./keystore/debug.keystore') storePassword 'android' } release { keyAlias 'china317' keyPassword 'china317' storeFile file('./keystore/express-release.jks') storePassword 'china317' } } compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.china317.zhzg.driver.application" minSdkVersion 16 targetSdkVersion 23 versionCode 2 versionName "2.0.1" } buildTypes { debug { debuggable true minifyEnabled false buildConfigField("String","API_HOST", "\"测试服务器地址\"") buildConfigField("String", "VER_ENV","\"dev\"")//自动更新版本参数 signingConfig signingConfigs.debug //签名 } release { minifyEnabled false buildConfigField("String","API_HOST", "\"正式服务器地址\"") buildConfigField("String", "VER_ENV","\"prod\"") signingConfig signingConfigs.release//签名 applicationVariants.all { variant -> variant.outputs.each {output -> def outputFile =output.outputFile def fileName; if (outputFile != null &&outputFile.name.endsWith('.apk')) { if(variant.buildType.name.equals('release')) { fileName = "应用名_${variant.buildType.name}.apk" } else if(variant.buildType.name.equals('debug')) { fileName = "应用名_${variant.buildType.name}.apk" } output.outputFile = newFile(outputFile.parent, fileName) } } } } }}repositories { flatDir { dirs 'libs' }}dependencies { compile *}
4.利用applicationVariants.all{*}为不同版本的apk命名不同的名称。
5.生成不同版本的APK
在AndroidStudio右上侧打开Gradle窗口,双击assemble,即可同时生成各个版本的APK.如下图:
6.下面是代码演示:
public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String str = BuildConfig.API_HOST; TextView txt1 = (TextView) findViewById(R.id.txt1); txt1.setText(str); }}
0 0
- Gradle 动态编译-利用配置文件指定不同软件版本对应的服务器地址
- Gradle编译生成不同的版本,动态设定应用标题 / 应用图标 / 替换常量
- 在Gradle中编译一次生成不同的版本,动态设定应用标题,应用图标,替换常量,andrioid gradle
- gradle版本对应的配置
- 【Andrioid】在Gradle中编译一次生成不同的版本,动态设定应用标题,应用图标,替换常量
- android studio中gradle plugin版本对应的gradle版本
- gradle插件版本和gradle版本之间的对应
- gradle plugin的版本地址
- debian下利用aptitude安装指定版本的软件
- android studio 与gradle的版本对应
- android studio中Gradle 编译需要重点注意gradle,wrapper,build tools之间的版本对应关系
- Gradle与Android Gradle插件的版本对应关系
- 导入github下载的项目时,由于gradle版本不同而造成的无法编译解决办法
- iis不同版本对应的操作系统
- CentOSo对应不同版本的描述
- 不同版本JDK对应的major号
- 软件不同版本的意思
- 软件不同版本的含义
- ubuntu Linux添加root用户
- js 点击按钮触发下一个月上一个月事件,并且进行检测日期是否合法!
- POJ 1569 判断点是否在三角形内
- 基于input子系统的驱动分析
- UVA 11646
- Gradle 动态编译-利用配置文件指定不同软件版本对应的服务器地址
- BZOJ 3680 模拟退火
- css表格练习
- socket 设置非阻塞
- 设计模式之原型模式
- UVA 208 并查集+dfs
- 白话scala系列五 匿名函数分析
- CocoaPods的安装使用及遇到的问题
- UVA 225 剪枝+dfs