关于Gradle多渠道打包的问题
2016-07-28 15:42
405 查看
关于Gradle多渠道打包的问题
刚开始用ant的打包方式,后来换了Android-studio开发之后,就换做gradle多渠道打包,一时间确实方便了很多,配置非常简单,打包时间跟电脑配置有很大的关系。因为一直用的是友盟统计,下面简单记录下大致的流程。之前打包的代码是这样的,因为需要在调用接口的时候传渠道号
<application> ...... <meta-data android:name="UMENG_CHANNEL" android:value="@string/channel_id" /> ...... </application>
我们知道友盟的官网文档建议我们在清单文件中设置name=”UMENG_CHANNEL”如下的meta-data标签
<application> ...... <meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}" /> ...... </application>
然后我们在module中的build.gradle文件中可以设置productFlavors ,如图
android { ...... productFlavors { anzhi{ manifestPlaceholders = [UMENG_CHANNEL: "anzhi"] } baidu { manifestPlaceholders = [UMENG_CHANNEL: "baidu"] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL: "wandoujia"] } } ...... }
假如你要打很多的渠道包的情况,是不是要写很多?现在我们可以用下面的快速设置
productFlavors { anzhi{} baidu {} wandoujia {} }
这时候也需要加上下面这句话,意思就是包含了上面所有的渠道。
productFlavors.all { flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name] }
这样我们就可以直接打包了,当然gradle打包只是将清单文件中的UMENG_CHANNEL的值更改为我们所写的渠道号,与我们之前打包的方式不同的是String里面的值并没有改,那么假如业务需求要在用户注册和充值的时候传渠道号,怎么办呢?给大家介绍一个常用的方法。
ApplicationInfo appInfo = null; try { appInfo = this.getPackageManager() .getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } String msg = appInfo.metaData.getString("UMENG_CHANNEL");
通过这个方法可以得到清单文件中的UMENG_CHANNEL的Values,这样的话我们的业务就可以完整实现了。
相关文章推荐
- Android之事件分发与消费机制
- 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件
- Hadoop学习笔记:MapReduce框架详解
- Flex布局属性和方法简介
- iOS 第三方框架 - CocoaPods的安装、使用、原理
- shell脚本常用
- Web Worker
- TFS命令行详解
- csdf
- thinkphp 写日志文件
- 谈谈Android中的Rect类
- OpenCV实现平台收集
- LIBSVM与LIBLINEAR
- Thinkphp3.2.3分页使用实例解析
- Zookeeper节点类型
- 数据库新建用户分配权限
- Android 解决不同进程发送KeyEvent 的问题
- 理解KMP算法
- Ubuntu 16.04 安装 google 输入法