这篇博客着重点在详细的介绍如何配置gradle,实现诸如多渠道打包,一次生成不同UI的多渠道apk,自定义资源目录等。如果你对gradle还没有比较清晰的认识,那么推荐你在看这篇博客之前,先看下我的另一篇博客理解与配置android studio的gradle,这篇博客主要让你认识gradle。
1.打包多渠道apk
使用gradle进行多渠道打包是对gradle的一个简单的使用,gradle的功能非常强大,它还有很多值得深究的东西。目前,网络上已经有了大量关于多渠道打包的的资料可供参考,这里不做深究,主要展示一下多渠道打包的流程,如果你想深究,那么,认真看完这篇博客的第三章,你不禁能对多渠道打包有个较好的理解,还能使用gradle做更多很酷的事。
1.1修改AndroidManifest
渠道信息在AndroidManifest中一般使用如下方式标示:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
这里面的value是个可变的值,它之所以可变,是因为在build.gradle中的productFlavors 这个script block下给每个渠道商下的UNMENG_CHANNEL_VALUE赋了不同的值。
1.2修改module下的build.gradle
<span style="font-size:14px;">productFlavors { wandoujia {} baidu {} productFlavors.all { flavor->flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } }</span>
这段代码中,productFlavors是一个方法,{...}是一个闭包,闭包中自定义了两个方法,这两个方法的参数又都是闭包。android dsl使用了很多简写,比如baidu函数的定义,你可以这样写:baidu({...})这样看着就像是一个定义了一个方法,它的参数是一个closrue(闭包)。productFlavors的参数---闭包里面的productFlavors和是一个对象,她和它外面长得一样的那位没什么直接关系,这个对象有个方法叫all,调用它,然后又传入一个闭包。如果这里不明白,可以看一下我在文章开头推荐的那篇博客。它里面对android dsl有详细的介绍。总之这里就是给UMENG_CHANNEL_VALUE赋不同的值。
1.3生成apk
最好安装好gradle工具,配置好环境变量,然后在cmd或者android studio的控制台中输入以下命名:
gradle assemble ,assemble是个task,此外,还有assembleRelease,assembleDebug两个task可用,它们的作用分别是全部编译、
只编译release版和只编译debug版。
gradle assemble 执行后生成的apk:

gradle assembleRelease执行后生成的apk: