您的位置:首页 > 其它

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

2016-09-06 14:24 435 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐