android多渠道 多维,Android Studio中gradle实现多维度打包

举个不太恰当的例子,比如我们需要生成针对友盟统计的渠道为官网、应用宝、百度应用市场三个渠道各自对应的开发环境和测试环境的应用包。

那么,我们首先在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截图如下:

73f2a3534223fd9a4efb6a3aa709a5bd.png

Android Studio中如何指定要调试的版本

在studio左下角,找到Build Variants工具栏,在Active Build Variant中选择要调试的那个版本

代码下载

打赏

f69872ab5631b766bfb8c62b6b7d28fa.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值