由于每次打包发布、run项目切换项目环境搞的整个人心烦气躁。在花费了数天时间研究gradle本地配置,终于不用再更换环境时手忙脚乱的改接口路径,各种各样的第三方key值。在此分享出来,供大家参考。
gradle本地变量保存
在Project 的gradle中可定义本地变量,代码如下:
allprojects {
repositories {
jcenter()
}
}
ext {
android = [
compileSdkVersion : 23,
buildToolsVersion : "23.0.0",
minSdkVersion : 17,
targetSdkVersion : 23,
supportLibraryVersion: "23.2.0",
]
config = [
// service url
serviceUrlDevelop : "\" 你的开发接口路径 \"",
serviceUrl : "\" 你的正式版接口路径 \"",
// baiDu push sdk key
baiDuPushKeyDevelop: "\" 你的开发版百度推送key \"" as String,
baiDuPushKey : "\" 你的正式版百度推送key \"" as String,
// baiDu map sdk key
baiDuMapKeyDevelop : " 你的开发版百度地图key " as String,
baiDuMapKey : " 你的正式版百度地图key " as String,
//label name
labelDevelop : " AppName_develop " as String,
label : " AppName " as String,
]
这里的 ext 是我定义的一个变量类,上面的allprojects 是告诉大家放在哪个里面,知道的这里可以忽视。
android 里面放的是大家熟悉的一些版本号之类的,下面代码块会用到。
config 里面放的是我的两个环境的配置参数,一个是开发环境,一个是正式环境。
这里遇到的坑
1.{}里面的属性用= ,属性和属性之间不要写逗号(,),例如:
ext {
str = "aa" as String
num = 0 as int
android = []
config = []
}
2.[] 里面用: ,属性和属性之间要写逗号(,),例如:
android = [
compileSdkVersion : 23,
buildToolsVersion : "23.0.0",
minSdkVersion : 17,
targetSdkVersion : 23,
supportLibraryVersion: "23.2.0",
]
3.大家看到我的config里面有些key加了转义符(""xxx""),有些每加是不是觉得很奇怪。没错,这是重点,大家拿好本子和笔记好了啊。一般来说我们的key值会在两个地方配置。
一个是java代码里面,比如说百度推送:
PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY, "baiDuPushKey");
这里因为key是在java代码里面的,你在gradle配置好,编译后会生成在BuildConfig.java中生成对应的字段和值,如果你加转义符就会是这样的:
public static final String BAIDU_PUSH = "12223131313";
不加会是这样的:
public static final String BAIDU_PUSH = 12223131313;
立马就编译失败好伐,立马哭了好伐。。。
同理,另外一个是在AndroidManifest.xml里面配置(我只知道这俩,还有其他的告诉告诉我哈),比如百度地图的key:
这里就可以不用转义符了,具体原因不知道,但是我在gradle里面打印出来加了转义符的:
这是有转义符的:"111111111111"
这是没有转义符的:111111111111
反正加了转义符会多个双引号,这样key的效验就失败了。你懂得。
变量的用法
apply plugin: 'com.android.application'
//apply plugin: 'android-apt'
def androidConfig = rootProject.ext.android
def GWTConfig = rootProject.ext.config
android {
// 编译SDK的版本
compileSdkVersion androidConfig.compileSdkVersion
// build tools的版本
buildToolsVersion androidConfig.buildToolsVersion
}
这样就行了,今天先这样,明天好好理理下面该怎么写再说。