1.多环境打包
在android开发中经常遇到要打不同环境的包,所谓不同环境就是接口连接的服务器域名不同,如开发环境为devIP,测试环境为buildIP,uat环境为uatIP,release环境为releaseIP 。以前的做法是同过一个static变量去配置环境变量,这样每次打不同环境的包需要多次修改配置并且多次打包,现在使用as后发现一种可以一次性打所有环境的包 方法如下:
<1>首先要学习使用BuildConfig配置类(不知道的查一下)
在gradle 中添加配置BuildConfig配置
buildTypes {
...
dev{
buildConfigField("String","Environment","DEV")
...
}
release{
buildConfigField("String","Environment","release")
...
}
}
这样就在BuildConfig中添加啦Environment字段,再在代码中根据Environment变量配置环境
<2>打包输出所有环境的包
只需要在as命令行下使用gradlew build 就ok,也可以使用gradle build命令不过需要配置环境变量,打包可能出错如需要加
android {
...
lintOptions {
abortOnError false
}
...
}
记得在每个module下的配置都加
<3>自定义打包apk的名字
在gradle文件中的Android节点下添加如下代码
android.applicationVariants.all {
variant -> variant.outputs.each {
output -> output.outputFile = new File(output.outputFile.parent, "packageanme" + defaultConfig.versionCode + "_v" + defaultConfig.versionName +"_"+buildType.name+ ".apk");
}
}
动态获取版本号:
在gradle文件中的Android节点外添加如下代码
def getVersionNameFromManifest() {
def manifestParser = new com.android.builder.core.DefaultManifestParser()
return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)
}
defaultConfig中配置版本号:直接在defaultConfig 中加入versionName 属性,也可以直接调用上面方法(不过这里有个坑,在改变配置xml中版本号时,会出现找不到对应版本apk,或者apk不更新,所以还是每次改变版本号时,versionName 也跟着改变就ok)
defaultConfig {
……
versionName "2.0.14"
……
}
2.多渠道打包
在使用友盟统计,腾讯云统计的时候,需要配置渠道,打包不同渠道时每次修改配置文件很繁琐,as提供一种方便方法如下
<1>项目的manifest.xml中使用占位符
<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_NAME}" />
<2>在gradle中给占位符赋值
android {
// 你的其他配置代码
productFlavors {
yingyongbao {
manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]
}
umeng {
manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
}
wandoujia {
manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
}
}
// 你的其他配置代码
}
最后打包输出即可