举个不太恰当的例子,比如我们需要生成针对友盟统计的渠道为官网、应用宝、百度应用市场三个渠道各自对应的开发环境和测试环境的应用包。
那么,我们首先在AndroidManifest.xml中定义相关的点位符
友盟统计渠道点位符:
1 |
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/> |
开发环境占位符:
1 |
<meta-data android:value="${enviornment_VALUE}" android:name="app_enviornment"/> |
在项目的build.gradle的android节点下定义flavorDimensions,如下:
1 2 3 4 |
android { //...省略其他代码 flavorDimensions "channel", "enviornment" } |
然后我们定义productFlavors
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类(如果不明白,请百度一下这步如何操作),本例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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(); } } } |
如上,获取到了占位符app_enviornment的值,根据AppEnviornment就可以做其他处理了
这个操作也不是必须放在自定义的Application类中,放在Activity中也可以
自动多版本apk的打包
在项目的build.gradle文件的android节点中增加如下代码:
1 2 3 4 5 6 7 |
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"); } } |
- ${variant.versionName} – 版本名称
- ${variant.versionCode} – 版本编码
- ${variant.productFlavors[0].name} – 第一维度的名称(官网、应用宝等)
- ${variant.productFlavors[1].name}- 第二维度的名称(开发环境、测试环境等)
生成的apk截图如下:
Android Studio中如何指定要调试的版本
在studio左下角,找到Build Variants工具栏,在Active Build Variant中选择要调试的那个版本