Gradle 动态编译-利用配置文件指定不同软件版本对应的服务器地址

来源:互联网 发布:linux send 返回值 编辑:程序博客网 时间:2024/05/21 22:24

1.需求:

1.能够在配置文件中指定不同软件版本对应的服务器地址,免除开发人员多次修改服务器地址的工作,避免错误。2.同时生成不同版本的apk,避免重复无意义的工作。

2.改进:

思路:引入 Jenkins 服务自动打包,在gradle脚本中,使用 buildConfigField 声明一个字段,编译成功后,会为这个字段生成静态常量,我们可以在代码中使用这个常量。然后在gradle 的 buildTypes中配置不同的编译类型(比如测试,开发,上线三种类型),每个类型指定不同的字段的值。而在成功build后,gradle会为不同的类型环境生成不同的apk包,一次性就生成了测试,开发,上线三个apk包。

3.实现方式:

  1. 修改 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
原创粉丝点击