举个不太恰当的例子,比如我们需要生成针对友盟统计的渠道为官网、应用宝、百度应用市场三个渠道各自对应的开发环境和测试环境的应用包。
那么,我们首先在AndroidManifest.xml中定义相关的点位符
友盟统计渠道点位符:
1
开发环境占位符:
1
在项目的build.gradle的android节点下定义flavorDimensions,如下:
android {
//...省略其他代码
flavorDimensions "channel", "enviornment"
}
1
2
3
4
android{
//...省略其他代码
flavorDimensions"channel","enviornment"
}
然后我们定义productFlavors
android {
//...省略其他代码
flavorDimensions "channel", "enviornment"
productFlavors {
官网 {
dimension = 'channel'
manifestPlaceholders = [
UMENG_CHANNEL_VALUE: "guanwang"
]
}
应用宝 {
dimension = 'channel'
manifestPlaceholders = [
UMENG_CHANNEL_VALUE: "yingyongbao"
]
}
百度应用市场 {
dimension 'channel'
manifestPlaceholders = [
UMENG_CHANNEL_VALUE: "baidu"
]
}
开发环境 {
dimension 'enviornment'
manifestPlaceholders = [
enviornment_VALUE: "dev"
]
}
测试环境 {
dimension 'enviornment'
manifestPlaceholders = [
enviornment_VALUE: "test"
]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
android{
//...省略其他代码
flavorDimensions"channel","enviornment"
productFlavors{
官网{
dimension='channel'
manifestPlaceholders=[
UMENG_CHANNEL_VALUE:"guanwang"
]
}
应用宝{
dimension='channel'
manifestPlaceholders=[
UMENG_CHANNEL_VALUE:"yingyongbao"
]
}
百度应用市场{
dimension'channel'
manifestPlaceholders=[
UMENG_CHANNEL_VALUE:"baidu"
]
}
开发环境{
dimension'enviornment'
manifestPlaceholders=[
enviornment_VALUE:"dev"
]
}
测试环境{
dimension'enviornment'
manifestPlaceholders=[
enviornment_VALUE:"test"
]
}
}
}
获取当前apk占位符的值
我们以app_enviornment这个占位符为例,获取这个点位符的值后,确定连接开发服务器还是测试服务器
新建项目自定义的Application类(如果不明白,请百度一下这步如何操作),本例代码如下:
public class MyApplication extends Application {
public static String AppEnviornment = "";
@Override
public void onCreate() {
super.onCreate();
ApplicationInfo appInfo = null;
try {
appInfo = getApplicationContext().getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
AppEnviornment = appInfo.metaData.getString("app_enviornment");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassMyApplicationextendsApplication{
publicstaticStringAppEnviornment="";
@Override
publicvoidonCreate(){
super.onCreate();
ApplicationInfoappInfo=null;
try{
appInfo=getApplicationContext().getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
AppEnviornment=appInfo.metaData.getString("app_enviornment");
}catch(PackageManager.NameNotFoundExceptione){
e.printStackTrace();
}
}
}
如上,获取到了占位符app_enviornment的值,根据AppEnviornment就可以做其他处理了
这个操作也不是必须放在自定义的Application类中,放在Activity中也可以
自动多版本apk的打包
在项目的build.gradle文件的android节点中增加如下代码:
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = new File(variant.name, "多渠道测试_" + buildType.name +
"_${variant.versionName}(${variant.versionCode})" +
"_${variant.productFlavors[0].name}_${variant.productFlavors[1].name}.apk");
}
}
1
2
3
4
5
6
7
applicationVariants.all{variant->
variant.outputs.all{
outputFileName=newFile(variant.name,"多渠道测试_"+buildType.name+
"_${variant.versionName}(${variant.versionCode})"+
"_${variant.productFlavors[0].name}_${variant.productFlavors[1].name}.apk");
}
}
${variant.versionName} – 版本名称
${variant.versionCode} – 版本编码
${variant.productFlavors[0].name} – 第一维度的名称(官网、应用宝等)
${variant.productFlavors[1].name}- 第二维度的名称(开发环境、测试环境等)
生成的apk截图如下:
Android Studio中如何指定要调试的版本
在studio左下角,找到Build Variants工具栏,在Active Build Variant中选择要调试的那个版本
代码下载
打赏
微信扫一扫,打赏作者吧~