==
本篇包括以下内容:
多渠道打包概述
友盟的多渠道打包
美团的多渠道打包
360的多渠道打包
多渠道打包概述
=======
什么是多渠道包
渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、360市场、应用宝市场等
产品在不同的应用市场可能有不同的统计需求,需要为每个应用市场的Android包设定一个可以区分应用市场的标识,这个为Android包设定应用市场标识的过程就是多渠道打包。
为什么要提供多渠道包
国内存在着有众多的应用市场,产品在不同的渠道可能有不同的统计需求,为此Android开发人员需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。
在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计。
实现多渠道打包的原理
通过配置gradle脚本实现多渠道打包
这种打包方式是使用Android Studio的编译工具gradle配合使用的,其核心原理就是通过脚本修改AndroidManifest.xml中的mate-date内容,执行N次打包签名操作实现多渠道打包的需求。然后就可以在java中通过API获取对应的数据。
如何实现
现在android渠道多种多样,其实渠道不仅仅局限于应用市场,一种推广方式也可以看做一个渠道,比如:通过人拉人的方式去推广,官网上推广,百度推广等。所以说渠道成千上万,为了推广,有时候一次也会打成千的安装包,那你半天或者一天啥都别干了,所以介绍几个大公司高效的打包方式,借鉴一下。
友盟的多渠道打包
========
友盟就提供了多渠道打包的方式,可用于渠道统计等。
现在Android的构建工具换成了gradle,通过gradle,简单配置后就可以实现自动打所有渠道包。
补充知识
了解下BuildTypes、Flavors、BuildVariants三个定义:
1、BuildTypes : 构建类型,AndroidStudio的Gradle组件默认提供给了“debug”“release”两个配置。
2、Flavors : 产品渠道,可以根据productFlavors,针对不同的渠道配置个性化apk
3、BuildVariants:每一个buildtype和flavor组成一个buildvariant
友盟打包实现步骤
按照umeng的要求,manifest文件中需要有(在application下,和activity是并列关系):
android:name=“UMENG_CHANNEL” android:value=“${UMENG_CHANNEL_VALUE}”/> 这段配置,value那里就是wandoujia,360之类的渠道名称,但是我们在这里不会去写渠道名,写的是一个占位符,后面gradle编译的时候会动态的替换掉它。 在module(一般也就是app)的build.gradle的android{}中添加如下内容: //productFlavors是android节点的一个自节点。你需要打什么渠道的包,就在这里按umeng的要求用渠道名给UMENG_CHANNEL_VALUE赋值。 /*productFlavors { //方式1:里面是三个渠道 wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: “wandoujia”] } xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: “xiaomi”] } yingyongbao { manifestPlaceholders = [UMENG_CHANNEL_VALUE: “yingyongbao”] } }*/ //优化1:上面只是三个渠道,如果有几十个渠道,都这样写,重复的东西太多,观察到每个渠道就是flavor的名称,所以修改如下: /*productFlavors { wandoujia { //manifestPlaceholders = [UMENG_CHANNEL_VALUE: “wandoujia”] } xiaomi { //manifestPlaceholders=[UMENG_CHANNEL_VALUE: “xiaomi”] } } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }*/ //优化2:上面经过签名打包后生成的apk的名称是有默认命名规则的, // 如:xxx-xiaomi-release.apk 但是我们想包含版本信息如: // xxx-xiaomi-release-1.0.apk,所以最终打包脚本如下: productFlavors { wandoujia { //manifestPlaceholders = [UMENG_CHANNEL_VALUE: “wandoujia”] } xiaomi { //manifestPlaceholders=[UMENG_CHANNEL_VALUE: “xiaomi”] } } //如果需要在不同渠道统一配置,使用productFlavors.all字段 productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith(‘.apk’)) { def fileName = outputFile.name.replace(“.apk”, “-${defaultConfig.versionName}.apk”) output.outputFile = new File(outputFile.parent, fileName) } } } 如果没有错误情况,我们会在Android studio的BuildVariant看到对应的渠道,如下图所示: image.png 获取渠道 在代码中我们可以通过读取mate-data信息来获取渠道,然后添加到请求参数中,获取方法如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String channel=getChannel(); Toast.makeText(MainActivity.this, “channel==” + channel, Toast.LENGTH_SHORT).show(); } private String getChannel() { try { PackageManager pm = getPackageManager(); ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); return appInfo.metaData.getString(“UMENG_CHANNEL”); } catch (PackageManager.NameNotFoundException ignored) { } return “”; } 然后再进行签名 签名配置 签名主要有两种方式: 手动签名打包 自动签名。 手动签名打包: image.png 使用之前签名的文件,输入密码进行签名打包,如下图 image.png 选择打包渠道,如下图 image.png finish后,生成apk文件,如下图 image.png 自动签名打包(通过命令的方式进行签名): 自动签名,是在我们的application中的build.gradle(Module:app),先配置好签名文件信息,我们要先创建好一个签名文件. (1)加载Key Store: 我们先删掉上面的通过第一种方式所签名的apk文件。接下来进行第二种方式来签名,即命令行的方式。 打开Project Stucture图形化界面: image.png 上图中,选中app这个module,然后切换到signing标签栏,紧接着点击添加,然后生成release签名信息,点击"OK"。 image.png 上图中,切换到Build Types标签,将Signing config选择为"release",即将刚刚生成的release签名信息配置进去。 操作完成之后,我们可以看到app这个module的build.gradle文件多出了如下红框部分的代码: image.png 然后执行菜单栏的"build-clean Project": image.png (2)生成realease版本的apk: 在命令行Terminal输入如下命令:(AS已经将命令行Terminal集成到了软件当中) gradlew assembleRelease 如果运行成功,效果如下: image.png 项目/app/build/outputs/apk目录下 image.png 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! 如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿) 小福利: 在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了 很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘 如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。 2021大厂最新Android面试真题解析 各个模块学习视频:如数据结构与算法 只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。 这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得! 《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取! SvYZH-1711608935406)] 各个模块学习视频:如数据结构与算法 [外链图片转存中…(img-FuD5cnCJ-1711608935406)] 只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。 [外链图片转存中…(img-jfwYGfR8-1711608935406)] [外链图片转存中…(img-01SDOeE3-1711608935407)] 这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得! 《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
- Google 认证(GMS 认证)全流程详解Google 认证(GMS 认证)全流程详解 谷歌认证(Google Mobile Services 认证,即 GMS 认证)是 Android 设备预装 Google Play 商店、Gmail、YouTube 等核心谷歌应...
- 世界杯-克罗地亚被摩洛哥逼平 莫德里奇创队史纪录北京时间11月23日18时,世界杯小组赛F组第1轮,摩洛哥对阵克罗地亚。上半场双方均无建树,布努完成关键扑救,佩里西奇远射造险。摩洛哥半...
- 12306账号已经注册了,忘记了怎么办?如何找回原来注册账户12306账号已经注册了,但是忘记了账号和密码的,可以通过“忘记密码”找回原来注册的账户。“忘记密码”重设新密码的方式一般有三种,分...
- 配音圈的四大巨头是谁?配音圈比较知名的CV有哪些?纵观整个配音圈子,我们往往会发现不仅是配音圈,任何圈似乎都有三六九等的阶级划分,最赚钱的永远是处于顶级位置的配音演员,其次才轮...
- 方队是什么意思方队是什么意思 沪江在线词典网为您精选方队的意思及读音、方队是什么意思、反义词、近义词等信息,由江湖贫侠于2012年7月18日添加。 读音...
- 汽车之家选双擎吧,虽然双擎的阿特金森循环技术的发动机会吵点,但是其他优点也比8/9NR老掉牙发动机好(日本都停产久了,还放在国卖),还有些通病问...
- 京东白条逾期不还款会怎么样?原来后果这么严重京东白条逾期不还款会怎么样?原来后果这么严重 王莉 2018-04-16 11:23:03 希财网 京东白条就类似于网购信用卡,可以享受先消费后还款的消费方...
- 新氧青春会员计划的条款和条件新氧青春会员计划的条款和条件(该条款于2025年3月5日起生效) 一. 概述 本会员计划的条款和条件(包括全部附件,以下简称“本条款和条件”...
- 饥荒季节时间表 饥荒四季时间表详解饥荒游戏中一年共有70天,四个季节。饥荒第一年从秋季开始,四季时间分为秋季二十天、冬季十五天、春季二十天、夏季十五天。在每个季节...
- 盘古越狱后闪退 盘古越狱iOS7.1-iOS7.1.1完美越狱常见问题及解决方法汇总随着盘古越狱iOS7.1-iOS7.1.1完美越狱工具的发布,广大果粉越狱过程序也遇到各种iOS7.1-iOS7.1.1完美越狱后问题,首先感谢谢国人的出品的iOS7.1-iOS7.1...