为了账号安全,请及时绑定邮箱和手机立即绑定

Gradle实现的两种简单的多渠道打包方法

标签:
Android

本来计划今天发Android的官方技术文档的翻译——《Gradle插件用户指南》的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了。

今天就说一下使用Gradle进行类似友盟这样的多渠道打包的方法吧。

目前我掌握的方法有两种,都非常简单,用的都是Gradle Android插件里的productFlavors。

以友盟的多渠道打包为例,假设我们需要打包出如下渠道:UMENG, WANDOUJIA, YINGYONGBAO。

第一种方法,是需要创建文件的。

我们在写完我们的代码之后,在app/src下面,分别创建和main同级目录的文件夹umeng, wandoujia, yingyongbao,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下:


1

2

3

4

5

6

7

8

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="your.package.name">

    <application>

 

          <meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>

 

    </application>

</manifest>

注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。

然后在你的build.gradle的android{}节点里面,添加productFlavors节点,代码如下:


1

2

3

4

5

6

7

8

9

10

android {

    // 这里是你的其他配置

 

    productFlavors{

        umeng{  }

        wandoujai {  }

        yingyongbao{  }

    }

    // 你的其他配置

}

注意这里的flavors的名字要和你的文件夹的名字对应。这样配置之后,构建的就是多渠道的APK了。


第二种方法,不用创建那些文件,它使用的是Gradle Android插件里的另一个功能,manifestPlaceholders。

在这种方法中,你只需要在AndroidManifest.xml中,对友盟的渠道进行这样配置:


1

2

3

        <meta-data

            android:name="UMENG_CHANNEL"

            android:value="${CHANNEL_NAME}" />

然后同样使用productFlavors,不过这时它的配置是这样的:



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

android {

    // 你的其他配置代码

 

    productFlavors {

        yingyongbao {

            manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]

        }

        umeng {

            manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]

        }

        wandoujia {

            manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]

        }

 

    }

    // 你的其他配置代码

}

在上面当中,我们也可以指定一个默认的渠道名,如果需要的话。指定默认的值是在defaultConfig节点当中添加如下内容:



1

        manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]

这里的Unspecified换成你实际上的默认的渠道名。

使用manifestPlaceholders的这种配置,同样适用于manifest的其他配置。比如你需要在不同渠道发布的apk里面,指定不同的启动Activity。比如在豌豆荚里面发布的,启动的Activity显示的是豌豆荚首发的界面,应用宝里面启动的是应用宝首发的界面(哈哈,有点坏),你就可以对你的activity的值使用${activity_name}的方式,然后在productFlavors里面配置这个${activity_name}的值。


#另外一种更简单的写法


1

2

3

4

5

6

7

8

//渠道

    productFlavors {

        yignyongbao {}

        wandoujia { }

    }

    productFlavors.all { flavor ->

        flavor.manifestPlaceholders = [CHANNEL_NAME: name]

    }





原文链接:http://www.apkbus.com/blog-705730-62665.html


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消